From a36fe1aae4b53c0f389df80c225a31064c33ac94 Mon Sep 17 00:00:00 2001 From: catalinaperalta Date: Thu, 12 Mar 2026 18:29:56 -0700 Subject: [PATCH 1/6] add tests for complex xml arrays --- .../http-specs/specs/payload/xml/main.tsp | 29 ++++++++++++ .../http-specs/specs/payload/xml/mockapi.ts | 46 +++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/packages/http-specs/specs/payload/xml/main.tsp b/packages/http-specs/specs/payload/xml/main.tsp index d768dfb2d2d..2aea8c4b655 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,17 @@ interface XmlErrorValue { @body body: SimpleModel; } | XmlError; } + +@doc("Operations for the ComplexArrayModel type.") +@route("/complexArrayModel") +interface ComplexArrayValue + extends XmlOperations< + ComplexArrayModel, + """ + + + 123abc + + + """ + > {} diff --git a/packages/http-specs/specs/payload/xml/mockapi.ts b/packages/http-specs/specs/payload/xml/mockapi.ts index 1560c5e84ba..07e54a2cd8d 100644 --- a/packages/http-specs/specs/payload/xml/mockapi.ts +++ b/packages/http-specs/specs/payload/xml/mockapi.ts @@ -136,6 +136,29 @@ export const modelWithDatetime = ` `; +export const complexArrayModel = ` + + + 123abc + + +`; + +export const complexArrayModelMultipleItems = ` + + + 123abc + + + 123abc + + +`; + +export const complexArrayModelNoItems = ` + +`; + function createServerTests(uri: string, data?: any) { return { get: passOnSuccess({ @@ -275,3 +298,26 @@ Scenarios.Payload_Xml_XmlErrorValue_get = passOnCode(400, { }, kind: "MockApiDefinition", }); + +const Payload_Xml_ComplexArrayModel = createServerTests( + "/payload/xml/complexArrayModel", + complexArrayModel, +); +Scenarios.Payload_Xml_ComplexArrayModelValue_get = Payload_Xml_ComplexArrayModel.get; +Scenarios.Payload_Xml_ComplexArrayModelValue_put = Payload_Xml_ComplexArrayModel.put; + +const Payload_Xml_ComplexArrayModelMultipleItems = createServerTests( + "/payload/xml/complexArrayModel", + complexArrayModelMultipleItems, +); +Scenarios.Payload_Xml_ComplexArrayModelMultipleItemsValue_get = + Payload_Xml_ComplexArrayModelMultipleItems.get; +Scenarios.Payload_Xml_ComplexArrayModelMultipleItemsValue_put = + Payload_Xml_ComplexArrayModelMultipleItems.put; + +const Payload_Xml_ComplexArrayModelNoItems = createServerTests( + "/payload/xml/complexArrayModel", + complexArrayModelNoItems, +); +Scenarios.Payload_Xml_ComplexArrayModelNoItemsValue_get = Payload_Xml_ComplexArrayModelNoItems.get; +Scenarios.Payload_Xml_ComplexArrayModelNoItemsValue_put = Payload_Xml_ComplexArrayModelNoItems.put; From e97a183810f502fd89bfefddd470d97c06a56166 Mon Sep 17 00:00:00 2001 From: catalinaperalta Date: Thu, 12 Mar 2026 18:49:44 -0700 Subject: [PATCH 2/6] add change and update test --- .../complex-array-tests-2026-2-12-18-44-14.md | 7 +++++++ packages/http-specs/specs/payload/xml/mockapi.ts | 12 ++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 .chronus/changes/complex-array-tests-2026-2-12-18-44-14.md 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/specs/payload/xml/mockapi.ts b/packages/http-specs/specs/payload/xml/mockapi.ts index 07e54a2cd8d..d6fcd14602b 100644 --- a/packages/http-specs/specs/payload/xml/mockapi.ts +++ b/packages/http-specs/specs/payload/xml/mockapi.ts @@ -303,21 +303,21 @@ const Payload_Xml_ComplexArrayModel = createServerTests( "/payload/xml/complexArrayModel", complexArrayModel, ); -Scenarios.Payload_Xml_ComplexArrayModelValue_get = Payload_Xml_ComplexArrayModel.get; -Scenarios.Payload_Xml_ComplexArrayModelValue_put = Payload_Xml_ComplexArrayModel.put; +Scenarios.Payload_Xml_ComplexArrayValue_get = Payload_Xml_ComplexArrayModel.get; +Scenarios.Payload_Xml_ComplexArrayValue_put = Payload_Xml_ComplexArrayModel.put; const Payload_Xml_ComplexArrayModelMultipleItems = createServerTests( "/payload/xml/complexArrayModel", complexArrayModelMultipleItems, ); -Scenarios.Payload_Xml_ComplexArrayModelMultipleItemsValue_get = +Scenarios.Payload_Xml_ComplexArrayMultipleItemsValue_get = Payload_Xml_ComplexArrayModelMultipleItems.get; -Scenarios.Payload_Xml_ComplexArrayModelMultipleItemsValue_put = +Scenarios.Payload_Xml_ComplexArrayMultipleItemsValue_put = Payload_Xml_ComplexArrayModelMultipleItems.put; const Payload_Xml_ComplexArrayModelNoItems = createServerTests( "/payload/xml/complexArrayModel", complexArrayModelNoItems, ); -Scenarios.Payload_Xml_ComplexArrayModelNoItemsValue_get = Payload_Xml_ComplexArrayModelNoItems.get; -Scenarios.Payload_Xml_ComplexArrayModelNoItemsValue_put = Payload_Xml_ComplexArrayModelNoItems.put; +Scenarios.Payload_Xml_ComplexArrayNoItemsValue_get = Payload_Xml_ComplexArrayModelNoItems.get; +Scenarios.Payload_Xml_ComplexArrayNoItemsValue_put = Payload_Xml_ComplexArrayModelNoItems.put; From dbf5094a8f4a229b57b943fe356e6b034fbcc36f Mon Sep 17 00:00:00 2001 From: catalinaperalta Date: Thu, 12 Mar 2026 18:56:56 -0700 Subject: [PATCH 3/6] update scenarios --- .../http-specs/specs/payload/xml/main.tsp | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/http-specs/specs/payload/xml/main.tsp b/packages/http-specs/specs/payload/xml/main.tsp index 2aea8c4b655..def8a7f6b61 100644 --- a/packages/http-specs/specs/payload/xml/main.tsp +++ b/packages/http-specs/specs/payload/xml/main.tsp @@ -405,7 +405,7 @@ interface XmlErrorValue { } | XmlError; } -@doc("Operations for the ComplexArrayModel type.") +@doc("Operations for the ComplexArrayModel type with a single item.") @route("/complexArrayModel") interface ComplexArrayValue extends XmlOperations< @@ -418,3 +418,30 @@ interface ComplexArrayValue """ > {} + +@doc("Operations for the ComplexArrayModel type with multiple items.") +@route("/complexArrayModel") +interface ComplexArrayMultipleItemsValue + extends XmlOperations< + ComplexArrayModel, + """ + + + 123abc + + + 123abc + + + """ + > {} + +@doc("Operations for the ComplexArrayModel type with no items (empty array).") +@route("/complexArrayModel") +interface ComplexArrayNoItemsValue + extends XmlOperations< + ComplexArrayModel, + """ + + """ + > {} From b20549e780f8699d8ea3eb427a3f157a480a63b2 Mon Sep 17 00:00:00 2001 From: catalinaperalta Date: Thu, 12 Mar 2026 19:05:11 -0700 Subject: [PATCH 4/6] update routes --- packages/http-specs/specs/payload/xml/main.tsp | 4 ++-- packages/http-specs/specs/payload/xml/mockapi.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/http-specs/specs/payload/xml/main.tsp b/packages/http-specs/specs/payload/xml/main.tsp index def8a7f6b61..83a5d0e898f 100644 --- a/packages/http-specs/specs/payload/xml/main.tsp +++ b/packages/http-specs/specs/payload/xml/main.tsp @@ -420,7 +420,7 @@ interface ComplexArrayValue > {} @doc("Operations for the ComplexArrayModel type with multiple items.") -@route("/complexArrayModel") +@route("/complexArrayModelMultipleItems") interface ComplexArrayMultipleItemsValue extends XmlOperations< ComplexArrayModel, @@ -437,7 +437,7 @@ interface ComplexArrayMultipleItemsValue > {} @doc("Operations for the ComplexArrayModel type with no items (empty array).") -@route("/complexArrayModel") +@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 d6fcd14602b..199ae1048e5 100644 --- a/packages/http-specs/specs/payload/xml/mockapi.ts +++ b/packages/http-specs/specs/payload/xml/mockapi.ts @@ -307,7 +307,7 @@ Scenarios.Payload_Xml_ComplexArrayValue_get = Payload_Xml_ComplexArrayModel.get; Scenarios.Payload_Xml_ComplexArrayValue_put = Payload_Xml_ComplexArrayModel.put; const Payload_Xml_ComplexArrayModelMultipleItems = createServerTests( - "/payload/xml/complexArrayModel", + "/payload/xml/complexArrayModelMultipleItems", complexArrayModelMultipleItems, ); Scenarios.Payload_Xml_ComplexArrayMultipleItemsValue_get = @@ -316,7 +316,7 @@ Scenarios.Payload_Xml_ComplexArrayMultipleItemsValue_put = Payload_Xml_ComplexArrayModelMultipleItems.put; const Payload_Xml_ComplexArrayModelNoItems = createServerTests( - "/payload/xml/complexArrayModel", + "/payload/xml/complexArrayModelNoItems", complexArrayModelNoItems, ); Scenarios.Payload_Xml_ComplexArrayNoItemsValue_get = Payload_Xml_ComplexArrayModelNoItems.get; From 5d7d604087bf2f30f679e18907c149e7dc45041d Mon Sep 17 00:00:00 2001 From: catalinaperalta Date: Thu, 12 Mar 2026 23:57:53 -0700 Subject: [PATCH 5/6] fix --- packages/http-specs/specs/payload/xml/mockapi.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/http-specs/specs/payload/xml/mockapi.ts b/packages/http-specs/specs/payload/xml/mockapi.ts index 41aaa08d649..e918155b1bd 100644 --- a/packages/http-specs/specs/payload/xml/mockapi.ts +++ b/packages/http-specs/specs/payload/xml/mockapi.ts @@ -155,9 +155,7 @@ export const complexArrayModelMultipleItems = ` `; -export const complexArrayModelNoItems = ` - -`; +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 @@ -167,6 +165,7 @@ const modelWithDatetimeNoMs = ` 2022-08-26T18:38:00Z Fri, 26 Aug 2022 14:38:00 GMT +`; function createServerTests(uri: string, data?: any) { return { From 1112e387c20246aa6319ad160a0648e2a630cb1f Mon Sep 17 00:00:00 2001 From: catalinaperalta Date: Fri, 13 Mar 2026 12:20:55 -0700 Subject: [PATCH 6/6] spec summary and pr feedback --- packages/http-specs/spec-summary.md | 54 +++++++++++++++++++ .../http-specs/specs/payload/xml/main.tsp | 14 ----- .../http-specs/specs/payload/xml/mockapi.ts | 17 ------ 3 files changed, 54 insertions(+), 31 deletions(-) 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 83a5d0e898f..2ba28990763 100644 --- a/packages/http-specs/specs/payload/xml/main.tsp +++ b/packages/http-specs/specs/payload/xml/main.tsp @@ -408,20 +408,6 @@ interface XmlErrorValue { @doc("Operations for the ComplexArrayModel type with a single item.") @route("/complexArrayModel") interface ComplexArrayValue - extends XmlOperations< - ComplexArrayModel, - """ - - - 123abc - - - """ - > {} - -@doc("Operations for the ComplexArrayModel type with multiple items.") -@route("/complexArrayModelMultipleItems") -interface ComplexArrayMultipleItemsValue extends XmlOperations< ComplexArrayModel, """ diff --git a/packages/http-specs/specs/payload/xml/mockapi.ts b/packages/http-specs/specs/payload/xml/mockapi.ts index e918155b1bd..b31e665b041 100644 --- a/packages/http-specs/specs/payload/xml/mockapi.ts +++ b/packages/http-specs/specs/payload/xml/mockapi.ts @@ -137,14 +137,6 @@ export const modelWithDatetime = ` `; export const complexArrayModel = ` - - - 123abc - - -`; - -export const complexArrayModelMultipleItems = ` 123abc @@ -346,15 +338,6 @@ const Payload_Xml_ComplexArrayModel = createServerTests( Scenarios.Payload_Xml_ComplexArrayValue_get = Payload_Xml_ComplexArrayModel.get; Scenarios.Payload_Xml_ComplexArrayValue_put = Payload_Xml_ComplexArrayModel.put; -const Payload_Xml_ComplexArrayModelMultipleItems = createServerTests( - "/payload/xml/complexArrayModelMultipleItems", - complexArrayModelMultipleItems, -); -Scenarios.Payload_Xml_ComplexArrayMultipleItemsValue_get = - Payload_Xml_ComplexArrayModelMultipleItems.get; -Scenarios.Payload_Xml_ComplexArrayMultipleItemsValue_put = - Payload_Xml_ComplexArrayModelMultipleItems.put; - const Payload_Xml_ComplexArrayModelNoItems = createServerTests( "/payload/xml/complexArrayModelNoItems", complexArrayModelNoItems,