Skip to content

Commit 2972229

Browse files
committed
fix: duplicate operation ids on media and cast segments
Signed-off-by: Vincent Biret <vibiret@microsoft.com>
1 parent 0026276 commit 2972229

File tree

10 files changed

+636
-637
lines changed

10 files changed

+636
-637
lines changed

src/Microsoft.OpenApi.OData.Reader/Operation/MediaEntityOperationalHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ protected string GetOperationId(string prefix, string identifier)
150150
}
151151
}
152152

153-
return string.Join(".", items);
153+
return $"{string.Join(".", items)}-{Path.GetPathHash(Context.Settings)}";
154154
}
155155

156156
/// <summary>

src/Microsoft.OpenApi.OData.Reader/Operation/ODataTypeCastGetOperationHandler.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ private bool IsSingleElement
7272
/// <inheritdoc/>
7373
protected override void Initialize(ODataContext context, ODataPath path)
7474
{
75-
// reseting the fields as we're reusing the handler
75+
// resetting the fields as we're reusing the handler
7676
singleton = null;
7777
isKeySegment = false;
7878
secondLastSegmentIsComplexProperty = false;
@@ -198,7 +198,7 @@ protected override void SetBasicInfo(OpenApiOperation operation)
198198

199199
// OperationId
200200
if (Context.Settings.EnableOperationId)
201-
operation.OperationId = EdmModelHelper.GenerateODataTypeCastPathOperationIdPrefix(Path, Context) + $".As{Utils.UpperFirstChar(TargetSchemaElement.Name)}";
201+
operation.OperationId = EdmModelHelper.GenerateODataTypeCastPathOperationIdPrefix(Path, Context) + $".As{Utils.UpperFirstChar(TargetSchemaElement.Name)}-{Path.GetPathHash(Context.Settings)}";
202202

203203
base.SetBasicInfo(operation);
204204
}
@@ -244,12 +244,11 @@ protected override void SetTags(OpenApiOperation operation)
244244
else if ((SecondLastSegment is ODataKeySegment && !isIndexedCollValuedNavProp)
245245
|| (SecondLastSegment is ODataNavigationSourceSegment))
246246
{
247-
var entitySet = navigationSource as IEdmEntitySet;
248-
var singleton = navigationSource as IEdmSingleton;
247+
var singletonNavigationSource = navigationSource as IEdmSingleton;
249248

250-
tagName = entitySet != null
251-
? entitySet.Name + "." + entitySet.EntityType.Name
252-
: singleton.Name + "." + singleton.EntityType.Name;
249+
tagName = navigationSource is IEdmEntitySet entitySetNavigationSource
250+
? entitySetNavigationSource.Name + "." + entitySetNavigationSource.EntityType.Name
251+
: singletonNavigationSource.Name + "." + singletonNavigationSource.EntityType.Name;
253252
}
254253
else if (SecondLastSegment is ODataComplexPropertySegment)
255254
{

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/MediaEntityDeleteOperationHandlerTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public void CreateMediaEntityPropertyDeleteOperationWithTargetPathAnnotationsRet
6565
Assert.Equal(2, operation.Responses.Count);
6666
Assert.Equal(new string[] { "204", "default" }, operation.Responses.Select(e => e.Key));
6767

68-
Assert.Equal("People.Person.DeletePhoto", operation.OperationId);
68+
Assert.Equal("People.Person.DeletePhoto-883f", operation.OperationId);
6969
}
7070

7171
[Theory]
@@ -180,8 +180,8 @@ private void VerifyMediaEntityDeleteOperation(string annotation, bool enableOper
180180

181181
if (enableOperationId)
182182
{
183-
Assert.Equal("Todos.Todo.DeleteLogo", deleteOperation.OperationId);
184-
Assert.Equal("me.DeletePhotoContent", deleteOperation2.OperationId);
183+
Assert.Equal("Todos.Todo.DeleteLogo-9540", deleteOperation.OperationId);
184+
Assert.Equal("me.DeletePhotoContent-797b", deleteOperation2.OperationId);
185185
}
186186
else
187187
{

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/MediaEntityGetOperationHandlerTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,8 @@ private void VerifyMediaEntityGetOperation(string annotation, bool enableOperati
144144

145145
if (enableOperationId)
146146
{
147-
Assert.Equal("Todos.Todo.GetLogo", getOperation.OperationId);
148-
Assert.Equal("me.GetPhotoContent", getOperation2.OperationId);
147+
Assert.Equal("Todos.Todo.GetLogo-9540", getOperation.OperationId);
148+
Assert.Equal("me.GetPhotoContent-797b", getOperation2.OperationId);
149149
}
150150
else
151151
{

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/MediaEntityPutOperationHandlerTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,8 @@ private void VerifyMediaEntityPutOperation(string annotation, bool enableOperati
158158

159159
if (enableOperationId)
160160
{
161-
Assert.Equal("Todos.Todo.UpdateLogo", putOperation.OperationId);
162-
Assert.Equal("me.UpdatePhotoContent", putOperation2.OperationId);
161+
Assert.Equal("Todos.Todo.UpdateLogo-9540", putOperation.OperationId);
162+
Assert.Equal("me.UpdatePhotoContent-797b", putOperation2.OperationId);
163163
}
164164
else
165165
{

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/ODataTypeCastGetOperationHandlerTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public void CreateODataTypeCastGetOperationReturnsCorrectOperationForCollectionN
7171

7272
if (enableOperationId)
7373
{
74-
Assert.Equal("People.ListFriends.AsEmployee", operation.OperationId);
74+
Assert.Equal("People.ListFriends.AsEmployee-11bf", operation.OperationId);
7575
}
7676
else
7777
{
@@ -134,7 +134,7 @@ public void CreateODataTypeCastGetOperationReturnsCorrectOperationForCollectionN
134134

135135
if (enableOperationId)
136136
{
137-
Assert.Equal("People.GetFriends.AsEmployee", operation.OperationId);
137+
Assert.Equal("People.GetFriends.AsEmployee-11bf", operation.OperationId);
138138
}
139139
else
140140
{
@@ -191,7 +191,7 @@ public void CreateODataTypeCastGetOperationReturnsCorrectOperationForEntitySet(b
191191

192192
if (enableOperationId)
193193
{
194-
Assert.Equal("People.Person.ListPerson.AsEmployee", operation.OperationId);
194+
Assert.Equal("People.Person.ListPerson.AsEmployee-013a", operation.OperationId);
195195
}
196196
else
197197
{
@@ -251,7 +251,7 @@ public void CreateODataTypeCastGetOperationReturnsCorrectOperationForEntitySetId
251251

252252
if (enableOperationId)
253253
{
254-
Assert.Equal("People.Person.GetPerson.AsEmployee", operation.OperationId);
254+
Assert.Equal("People.Person.GetPerson.AsEmployee-317b", operation.OperationId);
255255
}
256256
else
257257
{
@@ -312,7 +312,7 @@ public void CreateODataTypeCastGetOperationReturnsCorrectOperationForSingleNavig
312312

313313
if (enableOperationId)
314314
{
315-
Assert.Equal("People.GetBestFriend.AsEmployee", operation.OperationId);
315+
Assert.Equal("People.GetBestFriend.AsEmployee-7188", operation.OperationId);
316316
}
317317
else
318318
{
@@ -369,7 +369,7 @@ public void CreateODataTypeCastGetOperationReturnsCorrectOperationForSingleton(b
369369

370370
if (enableOperationId)
371371
{
372-
Assert.Equal("Me.Person.GetPerson.AsEmployee", operation.OperationId);
372+
Assert.Equal("Me.Person.GetPerson.AsEmployee-bd18", operation.OperationId);
373373
}
374374
else
375375
{

0 commit comments

Comments
 (0)