diff --git a/.chronus/changes/complex-array-tests-2026-2-12-18-44-14.md b/.chronus/changes/complex-array-tests-2026-2-12-18-44-14.md new file mode 100644 index 00000000000..35d65b72758 --- /dev/null +++ b/.chronus/changes/complex-array-tests-2026-2-12-18-44-14.md @@ -0,0 +1,7 @@ +--- +changeKind: feature +packages: + - "@typespec/http-specs" +--- + +Add tests for complex xml array definitions diff --git a/packages/http-specs/spec-summary.md b/packages/http-specs/spec-summary.md index c68a503c558..a583dcaab9b 100644 --- a/packages/http-specs/spec-summary.md +++ b/packages/http-specs/spec-summary.md @@ -2995,6 +2995,60 @@ Expected response body: ``` +### Payload_Xml_ComplexArrayNoItemsValue_get + +- Endpoint: `get /payload/xml/complexArrayModelNoItems` + +Expected response body: + +```xml + +``` + +### Payload_Xml_ComplexArrayNoItemsValue_put + +- Endpoint: `put /payload/xml/complexArrayModelNoItems` + +Expected request body: + +```xml + +``` + +### Payload_Xml_ComplexArrayValue_get + +- Endpoint: `get /payload/xml/complexArrayModel` + +Expected response body: + +```xml + + + 123abc + + + 123abc + + +``` + +### Payload_Xml_ComplexArrayValue_put + +- Endpoint: `put /payload/xml/complexArrayModel` + +Expected request body: + +```xml + + + 123abc + + + 123abc + + +``` + ### Payload_Xml_ModelWithArrayOfModelValue_get - Endpoint: `get /payload/xml/modelWithArrayOfModel` diff --git a/packages/http-specs/specs/payload/xml/main.tsp b/packages/http-specs/specs/payload/xml/main.tsp index d768dfb2d2d..d6fda1bccd0 100644 --- a/packages/http-specs/specs/payload/xml/main.tsp +++ b/packages/http-specs/specs/payload/xml/main.tsp @@ -126,6 +126,22 @@ model XmlErrorBody { code: int32; } +@doc("The complex model.") +@name("ComplexModel") +model ComplexModel { + @doc("The unique ID for the complex model.") + @name("Id") + id: string; +} + +@doc("Contains an array of complex models with XML unwrapped representation.") +model UnwrappedArrayModel { + @doc("The array of complex models.") + @unwrapped + @name("MyModel") + items: Array; +} + @doc("Template for XML operations") interface XmlOperations { @scenario @@ -389,3 +405,30 @@ interface XmlErrorValue { @body body: SimpleModel; } | XmlError; } + +@doc("Operations for the UnwrappedArrayModel type.") +@route("/unwrappedArrayModel") +interface UnwrappedArrayValue + extends XmlOperations< + UnwrappedArrayModel, + """ + + + 123abc + + + 123abc + + + """ + > {} + +@doc("Operations for the UnwrappedArrayModel type with no items (empty array).") +@route("/unwrappedArrayModelNoItems") +interface UnwrappedArrayNoItemsValue + extends XmlOperations< + UnwrappedArrayModel, + """ + + """ + > {} diff --git a/packages/http-specs/specs/payload/xml/mockapi.ts b/packages/http-specs/specs/payload/xml/mockapi.ts index de2d3f85834..0c29d3fa7be 100644 --- a/packages/http-specs/specs/payload/xml/mockapi.ts +++ b/packages/http-specs/specs/payload/xml/mockapi.ts @@ -136,6 +136,19 @@ export const modelWithDatetime = ` `; +export const unwrappedArrayModel = ` + + + 123abc + + + 123abc + + +`; + +export const unwrappedArrayOfModelNoItems = ``; + // Some clients serialize UTC datetimes without trailing zero milliseconds. Both // "2022-08-26T18:38:00.000Z" and "2022-08-26T18:38:00Z" are valid RFC3339 representations // of the same instant; accept either form. @@ -317,3 +330,17 @@ Scenarios.Payload_Xml_XmlErrorValue_get = passOnCode(400, { }, kind: "MockApiDefinition", }); + +const Payload_Xml_UnwrappedArrayModel = createServerTests( + "/payload/xml/unwrappedArrayModel", + unwrappedArrayModel, +); +Scenarios.Payload_Xml_UnwrappedArrayValue_get = Payload_Xml_UnwrappedArrayModel.get; +Scenarios.Payload_Xml_UnwrappedArrayValue_put = Payload_Xml_UnwrappedArrayModel.put; + +const Payload_Xml_UnwrappedArrayOfModelNoItems = createServerTests( + "/payload/xml/unwrappedArrayOfModelNoItems", + unwrappedArrayOfModelNoItems, +); +Scenarios.Payload_Xml_UnwrappedArrayNoItemsValue_get = Payload_Xml_UnwrappedArrayOfModelNoItems.get; +Scenarios.Payload_Xml_UnwrappedArrayNoItemsValue_put = Payload_Xml_UnwrappedArrayOfModelNoItems.put;