Skip to content
This repository was archived by the owner on Jun 20, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,30 +25,21 @@ internal class MediaEntityGetOperationHandler : MediaEntityOperationalHandler
protected override void SetBasicInfo(OpenApiOperation operation)
{
// Summary
if (EntitySet != null)
if (IsNavigationPropertyPath)
{
string typeName = EntitySet.EntityType().Name;
operation.Summary = $"Get media content for {typeName} from {EntitySet.Name}";
operation.Summary = $"Get media content for the navigation property {NavigationProperty.Name} from {NavigationSource.Name}";
}
else
{
operation.Summary = $"Get media content for the navigation property {NavigationProperty.Name} from {NavigationSource.Name}";
string typeName = EntitySet.EntityType().Name;
operation.Summary = $"Get media content for {typeName} from {EntitySet.Name}";
}

// OperationId
if (Context.Settings.EnableOperationId)
{
string identifier = Path.LastSegment.Kind == ODataSegmentKind.StreamContent ? "Content" : Path.LastSegment.Identifier;

if (EntitySet != null)
{
string typeName = EntitySet.EntityType().Name;
operation.OperationId = $"{EntitySet.Name}.{typeName}.Get{Utils.UpperFirstChar(identifier)}";
}
else // Singleton
{
operation.OperationId = GetOperationId("Get", identifier);
}
operation.OperationId = GetOperationId("Get", identifier);
}

base.SetBasicInfo(operation);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,31 @@ internal abstract class MediaEntityOperationalHandler : NavigationPropertyOperat
/// </summary>
protected IEdmSingleton Singleton { get; private set; }

/// <summary>
/// Gets/Sets flag indicating whether path is navigation property path
/// </summary>
protected bool IsNavigationPropertyPath { get; private set; }

/// <inheritdoc/>
protected override void Initialize(ODataContext context, ODataPath path)
{
// The first segment will either be an entity set navigation source or a singleton navigation source.
// The first segment will either be an EntitySet navigation source or a Singleton navigation source
ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;
EntitySet = navigationSourceSegment.NavigationSource as IEdmEntitySet;

if (EntitySet == null)
{
// Singleton
Singleton = navigationSourceSegment.NavigationSource as IEdmSingleton;
}

// Check whether path is a navigation property path
IsNavigationPropertyPath = Path.Segments.Contains(
Path.Segments.Where(segment => segment is ODataNavigationPropertySegment).FirstOrDefault());

if (IsNavigationPropertyPath)
{
// Initialize navigation property paths from base
base.Initialize(context, path);
Singleton = NavigationSource as IEdmSingleton;
}
}

Expand Down Expand Up @@ -78,7 +91,7 @@ protected override void SetExtensions(OpenApiOperation operation)
}

/// <summary>
/// Retrieves the operation Id for a navigation property stream path.
/// Retrieves the operation Id for a media entity stream path.
/// </summary>
/// <param name="prefix">The http method identifier name.</param>
/// <param name="identifier">The stream segment identifier name.</param>
Expand All @@ -90,15 +103,27 @@ protected string GetOperationId(string prefix, string identifier)

IList<string> items = new List<string>
{
NavigationSource.Name
EntitySet?.Name ?? Singleton.Name
};

ODataSegment lastSegment = Path.Segments.Last(c => c is ODataStreamContentSegment || c is ODataStreamPropertySegment);
foreach (ODataSegment segment in Path.Segments.Skip(1))
{
if (segment == lastSegment)
{
items.Add(prefix + Utils.UpperFirstChar(identifier));
if (!IsNavigationPropertyPath)
{
string typeName = EntitySet?.EntityType().Name ?? Singleton.EntityType().Name;
items.Add(typeName);
items.Add(prefix + Utils.UpperFirstChar(identifier));
}
else
{
// Remove the last navigation property segment for navigation property paths,
// as this will be included within the prefixed name of the operation id
items.Remove(NavigationProperty.Name);
items.Add(prefix + Utils.UpperFirstChar(NavigationProperty.Name) + Utils.UpperFirstChar(identifier));
}
break;
}
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,30 +25,21 @@ internal class MediaEntityPutOperationHandler : MediaEntityOperationalHandler
protected override void SetBasicInfo(OpenApiOperation operation)
{
// Summary
if (EntitySet != null)
if (IsNavigationPropertyPath)
{
string typeName = EntitySet.EntityType().Name;
operation.Summary = $"Update media content for {typeName} in {EntitySet.Name}";
operation.Summary = $"Update media content for the navigation property {NavigationProperty.Name} in {NavigationSource.Name}";
}
else
{
operation.Summary = $"Update media content for the navigation property {NavigationProperty.Name} in {NavigationSource.Name}";
string typeName = EntitySet.EntityType().Name;
operation.Summary = $"Update media content for {typeName} in {EntitySet.Name}";
}

// OperationId
if (Context.Settings.EnableOperationId)
{
string identifier = Path.LastSegment.Kind == ODataSegmentKind.StreamContent ? "Content" : Path.LastSegment.Identifier;

if (EntitySet != null)
{
string typeName = EntitySet.EntityType().Name;
operation.OperationId = $"{EntitySet.Name}.{typeName}.Update{Utils.UpperFirstChar(identifier)}";
}
else
{
operation.OperationId = GetOperationId("Update", identifier);
}
operation.OperationId = GetOperationId("Update", identifier);
}

base.SetBasicInfo(operation);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ private void VerifyMediaEntityGetOperation(string annotation, bool enableOperati
if (enableOperationId)
{
Assert.Equal("Todos.Todo.GetLogo", getOperation.OperationId);
Assert.Equal("me.photo.GetContent", getOperation2.OperationId);
Assert.Equal("me.GetPhotoContent", getOperation2.OperationId);
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ private void VerifyMediaEntityPutOperation(string annotation, bool enableOperati
if (enableOperationId)
{
Assert.Equal("Todos.Todo.UpdateLogo", putOperation.OperationId);
Assert.Equal("me.photo.UpdateContent", putOperation2.OperationId);
Assert.Equal("me.UpdatePhotoContent", putOperation2.OperationId);
}
else
{
Expand Down