diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/flatten-property/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/flatten-property/main.tsp index 242d49ece4..8bccd8dc31 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/flatten-property/main.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/flatten-property/main.tsp @@ -110,3 +110,91 @@ op putFlattenModel(@body input: FlattenModel): FlattenModel; """) @put op putNestedFlattenModel(@body input: NestedFlattenModel): NestedFlattenModel; + +@doc("This is the model with unknown type properties to be flattened.") +model FlattenUnknownModel { + name: string; + + #suppress "@azure-tools/typespec-azure-core/no-unknown" "For testing purposes" + #suppress "@azure-tools/typespec-azure-core/no-legacy-usage" "Testing backcompat" + @global.Azure.ClientGenerator.Core.Legacy.flattenProperty + properties?: unknown; +} + +@scenario +@route("/flattenUnknownModel") +@scenarioDoc(""" + Update and receive model with flatten property of unknown type. + Expected input body: + ```json + { + "name": "foo" + } + ``` + + Expected response body: + ```json + { + "name": "test", + "properties": { + "key1": "value1", + "key2": "value2" + } + } + ``` + """) +@put +op putFlattenUnknownModel(@body input: FlattenUnknownModel): FlattenUnknownModel; + +@doc("This is the model with all read-only properties to be flattened.") +model SolutionProperties { + @visibility(Lifecycle.Read) + solutionId?: string; + + @visibility(Lifecycle.Read) + title?: string; + + @visibility(Lifecycle.Read) + content?: string; +} + +@doc("This is the model with flattened properties that are all read-only.") +model Solution { + name: string; + + #suppress "@azure-tools/typespec-azure-core/no-legacy-usage" "Testing backcompat" + @global.Azure.ClientGenerator.Core.Legacy.flattenProperty + properties: SolutionProperties; + + #suppress "@azure-tools/typespec-azure-core/no-legacy-usage" "Testing backcompat" + @global.Azure.ClientGenerator.Core.Legacy.flattenProperty + propertiesOptional?: SolutionProperties; +} + +@scenario +@route("/flattenReadOnlyModel") +@scenarioDoc(""" + Test model with flatten property containing all read-only properties. + Expected input body: + ```json + { + "name": "foo", + "properties": {}, + "propertiesOptional": {} + } + ``` + + Expected response body: + ```json + { + "name": "test", + "properties": { + "solutionId": "solution1", + "title": "Solution Title", + "content": "Solution Content" + } + } + ``` + """) +@put +op putFlattenReadOnlyModel(@body body: Solution): Solution; diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/flatten-property/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/flatten-property/mockapi.ts index 8b5205d8f9..422f19579e 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/flatten-property/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/flatten-property/mockapi.ts @@ -61,3 +61,38 @@ Scenarios.Azure_ClientGenerator_Core_FlattenProperty_putNestedFlattenModel = pas }, ), ); + +Scenarios.Azure_ClientGenerator_Core_FlattenProperty_putFlattenUnknownModel = passOnSuccess( + createMockApiDefinitions( + "flattenUnknownModel", + { + name: "foo", + }, + { + name: "test", + properties: { + key1: "value1", + key2: "value2", + }, + }, + ), +); + +Scenarios.Azure_ClientGenerator_Core_FlattenProperty_putFlattenReadOnlyModel = passOnSuccess( + createMockApiDefinitions( + "flattenReadOnlyModel", + { + name: "foo", + properties: {}, + propertiesOptional: {}, + }, + { + name: "test", + properties: { + solutionId: "solution1", + title: "Solution Title", + content: "Solution Content", + }, + }, + ), +);