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..2ba28990763 100644 --- a/packages/http-specs/specs/payload/xml/main.tsp +++ b/packages/http-specs/specs/payload/xml/main.tsp @@ -126,6 +126,21 @@ 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 ComplexArrayModel { + @doc("The array of complex models.") + @unwrapped + items: Array; +} + @doc("Template for XML operations") interface XmlOperations { @scenario @@ -389,3 +404,30 @@ interface XmlErrorValue { @body body: SimpleModel; } | XmlError; } + +@doc("Operations for the ComplexArrayModel type with a single item.") +@route("/complexArrayModel") +interface ComplexArrayValue + extends XmlOperations< + ComplexArrayModel, + """ + + + 123abc + + + 123abc + + + """ + > {} + +@doc("Operations for the ComplexArrayModel type with no items (empty array).") +@route("/complexArrayModelNoItems") +interface ComplexArrayNoItemsValue + extends XmlOperations< + ComplexArrayModel, + """ + + """ + > {} diff --git a/packages/http-specs/specs/payload/xml/mockapi.ts b/packages/http-specs/specs/payload/xml/mockapi.ts index de2d3f85834..b31e665b041 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 complexArrayModel = ` + + + 123abc + + + 123abc + + +`; + +export const complexArrayModelNoItems = ``; + // 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_ComplexArrayModel = createServerTests( + "/payload/xml/complexArrayModel", + complexArrayModel, +); +Scenarios.Payload_Xml_ComplexArrayValue_get = Payload_Xml_ComplexArrayModel.get; +Scenarios.Payload_Xml_ComplexArrayValue_put = Payload_Xml_ComplexArrayModel.put; + +const Payload_Xml_ComplexArrayModelNoItems = createServerTests( + "/payload/xml/complexArrayModelNoItems", + complexArrayModelNoItems, +); +Scenarios.Payload_Xml_ComplexArrayNoItemsValue_get = Payload_Xml_ComplexArrayModelNoItems.get; +Scenarios.Payload_Xml_ComplexArrayNoItemsValue_put = Payload_Xml_ComplexArrayModelNoItems.put;