diff --git a/src/Microsoft.OpenApi.OData.Reader/Operation/ComplexPropertyUpdateOperationHandler.cs b/src/Microsoft.OpenApi.OData.Reader/Operation/ComplexPropertyUpdateOperationHandler.cs index d3790baa..0d3e61e9 100644 --- a/src/Microsoft.OpenApi.OData.Reader/Operation/ComplexPropertyUpdateOperationHandler.cs +++ b/src/Microsoft.OpenApi.OData.Reader/Operation/ComplexPropertyUpdateOperationHandler.cs @@ -23,9 +23,9 @@ protected override void Initialize(ODataContext context, ODataPath path) { base.Initialize(context, path); - _updateRestrictions = Context.Model.GetRecord(TargetPath, CapabilitiesConstants.UpdateRestrictions); - var complexPropertyUpdateRestrictions = Context.Model.GetRecord(ComplexPropertySegment.Property, CapabilitiesConstants.UpdateRestrictions); - _updateRestrictions?.MergePropertiesIfNull(complexPropertyUpdateRestrictions); + _updateRestrictions = Context.Model.GetRecord(TargetPath, CapabilitiesConstants.UpdateRestrictions); + var complexPropertyUpdateRestrictions = Context.Model.GetRecord(ComplexPropertySegment.Property, CapabilitiesConstants.UpdateRestrictions); + _updateRestrictions?.MergePropertiesIfNull(complexPropertyUpdateRestrictions); _updateRestrictions ??= complexPropertyUpdateRestrictions; } @@ -40,7 +40,8 @@ protected override void SetBasicInfo(OpenApiOperation operation) // OperationId if (Context.Settings.EnableOperationId) { - operation.OperationId = EdmModelHelper.GenerateComplexPropertyPathOperationId(Path, "Update"); + string prefix = OperationType == OperationType.Patch ? "Update" : "Set"; + operation.OperationId = EdmModelHelper.GenerateComplexPropertyPathOperationId(Path, prefix); } } @@ -101,37 +102,37 @@ protected override void AppendCustomParameters(OpenApiOperation operation) private OpenApiSchema GetOpenApiSchema() { - var schema = new OpenApiSchema - { - UnresolvedReference = true, - Reference = new OpenApiReference - { - Type = ReferenceType.Schema, - Id = ComplexPropertySegment.ComplexType.FullName() - } - }; - - if (ComplexPropertySegment.Property.Type.IsCollection()) - { + var schema = new OpenApiSchema + { + UnresolvedReference = true, + Reference = new OpenApiReference + { + Type = ReferenceType.Schema, + Id = ComplexPropertySegment.ComplexType.FullName() + } + }; + + if (ComplexPropertySegment.Property.Type.IsCollection()) + { return new OpenApiSchema { Type = Constants.ObjectType, - Properties = new Dictionary - { - { + Properties = new Dictionary + { + { "value", new OpenApiSchema { Type = "array", Items = schema - } - } + } + } } - }; - } - else - { - return schema; + }; + } + else + { + return schema; } } } \ No newline at end of file diff --git a/src/Microsoft.OpenApi.OData.Reader/Operation/EntityUpdateOperationHandler.cs b/src/Microsoft.OpenApi.OData.Reader/Operation/EntityUpdateOperationHandler.cs index 7ce526df..6317c746 100644 --- a/src/Microsoft.OpenApi.OData.Reader/Operation/EntityUpdateOperationHandler.cs +++ b/src/Microsoft.OpenApi.OData.Reader/Operation/EntityUpdateOperationHandler.cs @@ -50,7 +50,8 @@ protected override void SetBasicInfo(OpenApiOperation operation) if (Context.Settings.EnableOperationId) { string typeName = entityType.Name; - string operationName = $"Update{ Utils.UpperFirstChar(typeName)}"; + string prefix = OperationType == OperationType.Patch ? "Update" : "Set"; + string operationName = $"{prefix}{ Utils.UpperFirstChar(typeName)}"; if (keySegment.IsAlternateKey) { string alternateKeyName = string.Join("", keySegment.Identifier.Split(',').Select(static x => Utils.UpperFirstChar(x))); diff --git a/src/Microsoft.OpenApi.OData.Reader/Operation/NavigationPropertyUpdateOperationHandler.cs b/src/Microsoft.OpenApi.OData.Reader/Operation/NavigationPropertyUpdateOperationHandler.cs index 0ae4b500..35a47c93 100644 --- a/src/Microsoft.OpenApi.OData.Reader/Operation/NavigationPropertyUpdateOperationHandler.cs +++ b/src/Microsoft.OpenApi.OData.Reader/Operation/NavigationPropertyUpdateOperationHandler.cs @@ -41,7 +41,7 @@ protected override void SetBasicInfo(OpenApiOperation operation) // OperationId if (Context.Settings.EnableOperationId) { - string prefix = "Update"; + string prefix = OperationType == OperationType.Patch ? "Update" : "Set"; operation.OperationId = GetOperationId(prefix); } diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/ComplexPropertyPutOperationHandlerTests.cs b/test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/ComplexPropertyPutOperationHandlerTests.cs index 007b362f..85ddcde6 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/ComplexPropertyPutOperationHandlerTests.cs +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/ComplexPropertyPutOperationHandlerTests.cs @@ -61,7 +61,7 @@ public void CreateComplexPropertyPutOperationReturnsCorrectOperationForSingle(bo if (enableOperationId) { - Assert.Equal("Customers.UpdateBillingAddress", put.OperationId); + Assert.Equal("Customers.SetBillingAddress", put.OperationId); } else { @@ -108,7 +108,7 @@ public void CreateComplexPropertyPutOperationReturnsCorrectOperationForCollectio if (enableOperationId) { - Assert.Equal("Customers.UpdateAlternativeAddresses", put.OperationId); + Assert.Equal("Customers.SetAlternativeAddresses", put.OperationId); } else { diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/EntityPutOperationHandlerTests.cs b/test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/EntityPutOperationHandlerTests.cs index fb5f11c2..bee82961 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/EntityPutOperationHandlerTests.cs +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/EntityPutOperationHandlerTests.cs @@ -66,7 +66,7 @@ public void CreateEntityPutOperationReturnsCorrectOperation(bool enableOperation if (enableOperationId) { - Assert.Equal("Customers.Customer.UpdateCustomer", putOperation.OperationId); + Assert.Equal("Customers.Customer.SetCustomer", putOperation.OperationId); } else { diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/NavigationPropertyPutOperationHandlerTests.cs b/test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/NavigationPropertyPutOperationHandlerTests.cs index 499863bc..9c0a25bf 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/NavigationPropertyPutOperationHandlerTests.cs +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/NavigationPropertyPutOperationHandlerTests.cs @@ -71,7 +71,7 @@ public void CreateNavigationPutOperationReturnsCorrectOperation(bool enableOpera if (enableOperationId) { - Assert.Equal("People.UpdateBestFriend", operation.OperationId); + Assert.Equal("People.SetBestFriend", operation.OperationId); } else { diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.json b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.json index 3e3f587b..5f9d201d 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.json +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.json @@ -165,7 +165,7 @@ "Airlines.Airline" ], "summary": "Update entity in Airlines", - "operationId": "Airlines.Airline.UpdateAirline", + "operationId": "Airlines.Airline.SetAirline", "consumes": [ "application/json" ], @@ -534,7 +534,7 @@ "Airports.AirportLocation" ], "summary": "Update property Location value.", - "operationId": "Airports.UpdateLocation", + "operationId": "Airports.SetLocation", "consumes": [ "application/json" ], diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.yaml b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.yaml index 89ee6536..92cc03a2 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.yaml +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.V2.yaml @@ -107,7 +107,7 @@ paths: tags: - Airlines.Airline summary: Update entity in Airlines - operationId: Airlines.Airline.UpdateAirline + operationId: Airlines.Airline.SetAirline consumes: - application/json parameters: @@ -349,7 +349,7 @@ paths: tags: - Airports.AirportLocation summary: Update property Location value. - operationId: Airports.UpdateLocation + operationId: Airports.SetLocation consumes: - application/json parameters: diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.json b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.json index d89fdd91..82c5c99a 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.json +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.json @@ -192,7 +192,7 @@ "Airlines.Airline" ], "summary": "Update entity in Airlines", - "operationId": "Airlines.Airline.UpdateAirline", + "operationId": "Airlines.Airline.SetAirline", "parameters": [ { "name": "AirlineCode", @@ -609,7 +609,7 @@ "Airports.AirportLocation" ], "summary": "Update property Location value.", - "operationId": "Airports.UpdateLocation", + "operationId": "Airports.SetLocation", "parameters": [ { "name": "IcaoCode", diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.yaml b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.yaml index 25510e86..c08786ea 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.yaml +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Resources/TripService.OpenApi.yaml @@ -125,7 +125,7 @@ paths: tags: - Airlines.Airline summary: Update entity in Airlines - operationId: Airlines.Airline.UpdateAirline + operationId: Airlines.Airline.SetAirline parameters: - name: AirlineCode in: path @@ -398,7 +398,7 @@ paths: tags: - Airports.AirportLocation summary: Update property Location value. - operationId: Airports.UpdateLocation + operationId: Airports.SetLocation parameters: - name: IcaoCode in: path