Skip to content
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import "@typespec/http";
import "@typespec/spector";
import "@azure-tools/typespec-client-generator-core";
import "@azure-tools/typespec-azure-core";

using Http;
using global.Azure.ClientGenerator.Core;
using Spector;
using global.Azure.Core;
Comment thread
v-jiaodi marked this conversation as resolved.
Outdated

@doc("Illustrates the model flatten cases.")
@scenarioService("/azure/client-generator-core/flatten-property")
Expand Down Expand Up @@ -110,3 +112,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;
Comment thread
MaryGao marked this conversation as resolved.
}

@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.
Comment thread
MaryGao marked this conversation as resolved.
Comment thread
MaryGao marked this conversation as resolved.
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;
Original file line number Diff line number Diff line change
Expand Up @@ -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",
},
},
),
);