diff --git a/.chronus/changes/copilot-add-array-encoding-test-case-2026-0-12-6-2-30.md b/.chronus/changes/copilot-add-array-encoding-test-case-2026-0-12-6-2-30.md new file mode 100644 index 00000000000..7ffefca44cf --- /dev/null +++ b/.chronus/changes/copilot-add-array-encoding-test-case-2026-0-12-6-2-30.md @@ -0,0 +1,7 @@ +--- +changeKind: feature +packages: + - "@typespec/http-specs" +--- + +Add test case for ArrayEncoding with extensible union \ No newline at end of file diff --git a/packages/http-specs/spec-summary.md b/packages/http-specs/spec-summary.md index a265b83066f..31fc2dc0877 100644 --- a/packages/http-specs/spec-summary.md +++ b/packages/http-specs/spec-summary.md @@ -168,6 +168,27 @@ Expected response body: } ``` +### Encode_Array_Property_pipeDelimitedEnumElement + +- Endpoint: `post /encode/array/property/pipe-delimited-enum-element` + +Test operation with request and response model contains an extensible enum array property with pipeDelimited encode. +Expected request body: + +```json +{ + "value": "blue|red|green" +} +``` + +Expected response body: + +```json +{ + "value": "blue|red|green" +} +``` + ### Encode_Array_Property_spaceDelimited - Endpoint: `post /encode/array/property/space-delimited` diff --git a/packages/http-specs/specs/encode/array/main.tsp b/packages/http-specs/specs/encode/array/main.tsp index 4e707eeb41d..8f49a7e999f 100644 --- a/packages/http-specs/specs/encode/array/main.tsp +++ b/packages/http-specs/specs/encode/array/main.tsp @@ -8,6 +8,13 @@ using Spector; @scenarioService("/encode/array") namespace Encode.Array; +union Color { + string, + Blue: "blue", + Red: "red", + Green: "green", +} + model CommaDelimitedArrayProperty { @encode(ArrayEncoding.commaDelimited) value: string[]; @@ -28,6 +35,11 @@ model NewlineDelimitedArrayProperty { value: string[]; } +model PipeDelimitedArrayEnumElementProperty { + @encode(ArrayEncoding.pipeDelimited) + value: Color[]; +} + @route("/property") namespace Property { @route("/comma-delimited") @@ -109,4 +121,26 @@ namespace Property { """) @post op newlineDelimited(@body body: NewlineDelimitedArrayProperty): NewlineDelimitedArrayProperty; + + @route("/pipe-delimited-enum-element") + @scenario + @scenarioDoc(""" + Test operation with request and response model contains an extensible enum array property with pipeDelimited encode. + Expected request body: + ```json + { + "value": "blue|red|green" + } + ``` + Expected response body: + ```json + { + "value": "blue|red|green" + } + ``` + """) + @post + op pipeDelimitedEnumElement( + @body body: PipeDelimitedArrayEnumElementProperty, + ): PipeDelimitedArrayEnumElementProperty; } diff --git a/packages/http-specs/specs/encode/array/mockapi.ts b/packages/http-specs/specs/encode/array/mockapi.ts index 8b22eeb67ea..9ed503e474c 100644 --- a/packages/http-specs/specs/encode/array/mockapi.ts +++ b/packages/http-specs/specs/encode/array/mockapi.ts @@ -41,3 +41,8 @@ Scenarios.Encode_Array_Property_newlineDelimited = createPropertyServerTests( "/encode/array/property/newline-delimited", "\n", ); + +Scenarios.Encode_Array_Property_pipeDelimitedEnumElement = createPropertyServerTests( + "/encode/array/property/pipe-delimited-enum-element", + "|", +);