diff --git a/packages/typespec-ts/test/modularUnit/anonymousModel.spec.ts b/packages/typespec-ts/test/modularUnit/anonymousModel.spec.ts index baf3056031..12bcea59f4 100644 --- a/packages/typespec-ts/test/modularUnit/anonymousModel.spec.ts +++ b/packages/typespec-ts/test/modularUnit/anonymousModel.spec.ts @@ -38,7 +38,7 @@ describe("anonymous model", () => { await assertEqualContent( serializer!, ` - export function barSerializer(item: Bar): BarRest { + export function barSerializer(item: Bar): Record { return { prop1: item["prop1"], prop2: item["prop2"], @@ -53,10 +53,11 @@ describe("anonymous model", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -70,7 +71,7 @@ describe("anonymous model", () => { prop4: string, prop5: Bar, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/{pathParam}", pathParam) .post({ @@ -85,8 +86,8 @@ describe("anonymous model", () => { }, }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"];\n if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -148,7 +149,7 @@ describe("anonymous model", () => { await assertEqualContent( modelFile?.getFunction("barSerializer")?.getFullText()!, ` - export function barSerializer(item: Bar): BarRest { + export function barSerializer(item: Bar): Record { return { prop1: item["prop1"], prop2: item["prop2"], @@ -178,10 +179,11 @@ describe("anonymous model", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( @@ -192,7 +194,7 @@ describe("anonymous model", () => { prop2: number, prop4: string, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/{pathParam}", pathParam) .post({ @@ -210,8 +212,9 @@ describe("anonymous model", () => { }, }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -272,7 +275,7 @@ describe("anonymous model", () => { await assertEqualContent( serializer!, ` - export function barSerializer(item: Bar): BarRest { + export function barSerializer(item: Bar): Record { return { prop1: item["prop1"], prop2: item["prop2"], @@ -303,10 +306,11 @@ describe("anonymous model", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -318,7 +322,7 @@ describe("anonymous model", () => { queryParam: string, prop2: number, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/{pathParam}/{prop1}", pathParam, prop1) .post({ @@ -334,8 +338,9 @@ describe("anonymous model", () => { }, }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -405,7 +410,7 @@ describe("anonymous model", () => { await assertEqualContent( modelFile?.getFunction("barSerializer")?.getText()!, ` - export function barSerializer(item: Bar): BarRest { + export function barSerializer(item: Bar): Record { return { prop1: item["prop1"], prop2: item["prop2"], @@ -416,7 +421,7 @@ describe("anonymous model", () => { await assertEqualContent( modelFile?.getFunction("fooSerializer")?.getText()!, ` - export function fooSerializer(item: Foo): FooRest { + export function fooSerializer(item: Foo): Record { return { prop1: item["prop1"], prop2: item["prop2"], @@ -434,10 +439,11 @@ describe("anonymous model", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( @@ -446,7 +452,7 @@ describe("anonymous model", () => { queryParam: string, body: Foo, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/{pathParam}", pathParam) .post({ @@ -461,8 +467,9 @@ describe("anonymous model", () => { }, }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -500,10 +507,11 @@ describe("anonymous model", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( @@ -512,7 +520,7 @@ describe("anonymous model", () => { queryParam: string, body: Record, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/{pathParam}", pathParam) .post({ @@ -521,8 +529,9 @@ describe("anonymous model", () => { body: body }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -565,7 +574,7 @@ describe("anonymous model", () => { await assertEqualContent( modelFile?.getFunction("barSerializer")?.getFullText()!, ` - export function barSerializer(item: Bar): BarRest { + export function barSerializer(item: Bar): Record { return { prop1: item["prop1"], prop2: item["prop2"], @@ -579,10 +588,11 @@ describe("anonymous model", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( @@ -591,7 +601,7 @@ describe("anonymous model", () => { queryParam: string, test: { prop1: string; prop2: Bar }, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/{pathParam}", pathParam) .post({ @@ -600,8 +610,9 @@ describe("anonymous model", () => { body: { prop1: test["prop1"], prop2: barSerializer(test.prop2) }, }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -649,7 +660,7 @@ describe("anonymous model", () => { await assertEqualContent( serializer!, ` - export function testSerializer(item: Test): TestRest { + export function testSerializer(item: Test): Record { return { color: item["color"], } @@ -663,17 +674,18 @@ describe("anonymous model", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( context: Client, body: Test, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -681,8 +693,9 @@ describe("anonymous model", () => { body: { color: body["color"] }, }); } - export async function _readDeserialize(result: Read204Response): Promise { - if (result.status !== "204") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -722,7 +735,7 @@ describe("anonymous model", () => { await assertEqualContent( serializer!, ` - export function testSerializer(item: Test): TestRest { + export function testSerializer(item: Test): Record { return { color: {foo: item.color["foo"]}, } @@ -736,17 +749,18 @@ describe("anonymous model", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( context: Client, body: Test, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -754,8 +768,9 @@ describe("anonymous model", () => { body: { color: { foo: body.color["foo"] } }, }); } - export async function _readDeserialize(result: Read204Response): Promise { - if (result.status !== "204") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -783,22 +798,24 @@ describe("anonymous model", () => { await assertEqualContent( operationDetail, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( context: Client, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ ...operationOptionsToRequestParameters(options) }); } - export async function _readDeserialize(result: Read200Response): Promise<${returnType}> { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise<${returnType}> { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return result.body ${returnType.startsWith("Record") ? "as any" : ""}; @@ -869,24 +886,26 @@ describe("anonymous model", () => { await assertEqualContent( operationFiles?.[0]!.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( context: Client, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _readDeserialize( - result: Read200Response + result: PathUncheckedResponse ): Promise<{ foo?: { bar: string | null } }> { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -944,26 +963,28 @@ describe("anonymous model", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( context: Client, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _readDeserialize( - result: Read200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -1034,24 +1055,26 @@ describe("anonymous model", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( context: Client, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ ...operationOptionsToRequestParameters(options) }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -1062,11 +1085,11 @@ describe("anonymous model", () => { bar: result.body.baz["test"] === undefined ? result.body.baz["test"] - : result.body.baz["test"].map((p) => { + : result.body.baz["test"].map((p: any) => { return { test: p["test"] }; }), nonemptyAnomyous: { a: result.body.baz.nonemptyAnomyous["a"] }, - nonemptyAnomyousArray: result.body.baz["nonemptyAnomyousArray"].map((p) => { + nonemptyAnomyousArray: result.body.baz["nonemptyAnomyousArray"].map((p: any) => { return { b: p["b"] }; },), nonemptyAnomyousDict: result.body.baz["nonemptyAnomyousDict"], diff --git a/packages/typespec-ts/test/modularUnit/apiOperations.spec.ts b/packages/typespec-ts/test/modularUnit/apiOperations.spec.ts index 97a992a397..33b9049796 100644 --- a/packages/typespec-ts/test/modularUnit/apiOperations.spec.ts +++ b/packages/typespec-ts/test/modularUnit/apiOperations.spec.ts @@ -22,17 +22,18 @@ describe("api operations in Modular", () => { assert.equal(operationFiles?.length, 1); await assertEqualContent( operationFiles?.[0]?.getFullText()!, - `import { TestingContext as Client } from "../rest/index.js"; + `import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _uploadFileViaBodySend( context: Client, body: Uint8Array, options: UploadFileViaBodyOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/uploadFileViaBody") .post({ @@ -42,9 +43,10 @@ describe("api operations in Modular", () => { }); } export async function _uploadFileViaBodyDeserialize( - result: UploadFileViaBody204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -78,17 +80,18 @@ describe("api operations in Modular", () => { assert.equal(operationFiles?.length, 1); await assertEqualContent( operationFiles?.[0]?.getFullText()!, - `import { TestingContext as Client } from "../rest/index.js"; + `import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _uploadFileViaBodySend( context: Client, body: Uint8Array, options: UploadFileViaBodyOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/uploadFileViaBody") .post({ @@ -98,9 +101,10 @@ describe("api operations in Modular", () => { }); } export async function _uploadFileViaBodyDeserialize( - result: UploadFileViaBody204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -134,10 +138,11 @@ describe("api operations in Modular", () => { assert.equal(operationFiles?.length, 1); await assertEqualContent( operationFiles?.[0]?.getFullText()!, - `import { TestingContext as Client } from "../rest/index.js"; + `import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; import { uint8ArrayToString } from "@azure/core-util"; @@ -145,7 +150,7 @@ describe("api operations in Modular", () => { context: Client, body: { name: string; file: Uint8Array }, options: UploadFileOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/uploadFile") .post({ @@ -158,9 +163,10 @@ describe("api operations in Modular", () => { }); } export async function _uploadFileDeserialize( - result: UploadFile204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -195,10 +201,11 @@ describe("api operations in Modular", () => { assert.equal(operationFiles?.length, 1); await assertEqualContent( operationFiles?.[0]?.getFullText()!, - `import { TestingContext as Client } from "../rest/index.js"; + `import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; import { uint8ArrayToString } from "@azure/core-util"; @@ -206,7 +213,7 @@ describe("api operations in Modular", () => { context: Client, body: { files: Uint8Array[] }, options: UploadFilesOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/uploadFiles") .post({ @@ -218,9 +225,10 @@ describe("api operations in Modular", () => { }); } export async function _uploadFilesDeserialize( - result: UploadFiles204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -254,24 +262,26 @@ describe("api operations in Modular", () => { assert.equal(operationFiles?.length, 1); await assertEqualContent( operationFiles?.[0]?.getFullText()!, - `import { TestingContext as Client } from "../rest/index.js"; + `import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _downloadFileSend( context: Client, options: DownloadFileOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/downloadFile") .post({ ...operationOptionsToRequestParameters(options) }); } export async function _downloadFileDeserialize( - result: DownloadFile200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return result.body as any; @@ -305,24 +315,26 @@ describe("api operations in Modular", () => { assert.equal(operationFiles?.length, 1); await assertEqualContent( operationFiles?.[0]?.getFullText()!, - `import { TestingContext as Client } from "../rest/index.js"; + `import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _downloadFileSend( context: Client, options: DownloadFileOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/downloadFile") .post({ ...operationOptionsToRequestParameters(options) }); } export async function _downloadFileDeserialize( - result: DownloadFile200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return result.body as any; @@ -356,25 +368,27 @@ describe("api operations in Modular", () => { assert.equal(operationFiles?.length, 1); await assertEqualContent( operationFiles?.[0]?.getFullText()!, - `import { TestingContext as Client } from "../rest/index.js"; + `import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; import { stringToUint8Array } from "@azure/core-util"; export function _downloadFileSend( context: Client, options: DownloadFileOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/downloadFile") .post({ ...operationOptionsToRequestParameters(options) }); } export async function _downloadFileDeserialize( - result: DownloadFile200Response + result: PathUncheckedResponse ): Promise<{ name: string; file: Uint8Array }> { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -416,30 +430,32 @@ describe("api operations in Modular", () => { assert.equal(operationFiles?.length, 1); await assertEqualContent( operationFiles?.[0]?.getFullText()!, - `import { TestingContext as Client } from "../rest/index.js"; + `import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; import { stringToUint8Array } from "@azure/core-util"; export function _downloadFileSend( context: Client, options: DownloadFileOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/downloadFile") .post({ ...operationOptionsToRequestParameters(options) }); } export async function _downloadFileDeserialize( - result: DownloadFile200Response + result: PathUncheckedResponse ): Promise<{ name: string; file: Uint8Array[] }> { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { name: result.body["name"], - file: result.body["file"].map((p) => + file: result.body["file"].map((p: any) => typeof p === "string" ? stringToUint8Array(p, "base64") : p, ), }; @@ -472,26 +488,28 @@ describe("api operations in Modular", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _testSend( context: Client, options: TestOptionalParams = { requestOptions: {} }, - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _testDeserialize( - result: Test200Response, + result: PathUncheckedResponse, ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -513,15 +531,14 @@ describe("api operations in Modular", () => { await assertEqualContent( clientContext?.getFullText()!, ` - import { ClientOptions } from "@azure-rest/core-client"; - import { TestingContext } from "../rest/index.js"; - import getClient from "../rest/index.js"; + import { ClientOptions, Client, getClient } from "@azure-rest/core-client"; + import { logger } from "../logger.js"; + + export interface TestingContext extends Client {} /** Optional parameters for the client. */ export interface TestingClientOptionalParams extends ClientOptions {} - export { TestingContext } from "../rest/index.js"; - export function createTesting( endpoint: string, apiVersion: string, @@ -531,10 +548,31 @@ describe("api operations in Modular", () => { const userAgentPrefix = prefixFromOptions ? \`\${prefixFromOptions} azsdk-js-api\` : "azsdk-js-api"; - - const clientContext = getClient(endpoint, apiVersion, { + const updatedOptions = { ...options, userAgentOptions: { userAgentPrefix }, + loggingOptions: { logger: options.loggingOptions?.logger ?? logger.info } + }; + const clientContext = getClient( + options.endpoint ?? options.baseUrl ?? endpoint, + undefined, + updatedOptions, + ); + clientContext.pipeline.removePolicy({ name: "ApiVersionPolicy" }); + clientContext.pipeline.addPolicy({ + name: "ClientApiVersionPolicy", + sendRequest: (req, next) => { + // Use the apiVersion defined in request url directly + // Append one if there is no apiVersion and we have one at client options + const url = new URL(req.url); + if (!url.searchParams.get("api-version")) { + req.url = \`\${req.url}\${ + Array.from(url.searchParams.keys()).length > 0 ? "&" : "?" + }api-version=\$\{apiVersion}\`; + } + + return next(req); + }, }); return clientContext; } @@ -563,7 +601,6 @@ describe("api operations in Modular", () => { const userAgentPrefix = prefixFromOptions ? \`\${prefixFromOptions} azsdk-js-client\` : "azsdk-js-client"; - this._client = createTesting(endpoint, apiVersion, { ...options, userAgentOptions: { userAgentPrefix }, @@ -600,26 +637,28 @@ describe("api operations in Modular", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _testSend( context: Client, options: TestOptionalParams = { requestOptions: {} }, - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _testDeserialize( - result: Test200Response, + result: PathUncheckedResponse, ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -644,17 +683,16 @@ describe("api operations in Modular", () => { await assertEqualContent( clientContext?.getFullText()!, ` - import { ClientOptions } from "@azure-rest/core-client"; - import { TestingContext } from "../rest/index.js"; - import getClient from "../rest/index.js"; + import { ClientOptions, Client, getClient } from "@azure-rest/core-client"; + import { logger } from "../logger.js"; + + export interface TestingContext extends Client {} /** Optional parameters for the client. */ export interface TestingClientOptionalParams extends ClientOptions { apiVersion?: string; } - export { TestingContext } from "../rest/index.js"; - export function createTesting( endpoint: string, options: TestingClientOptionalParams = {}, @@ -663,13 +701,35 @@ describe("api operations in Modular", () => { const userAgentPrefix = prefixFromOptions ? \`\${prefixFromOptions} azsdk-js-api\` : "azsdk-js-api"; - - const clientContext = getClient(endpoint, { + const updatedOptions = { ...options, userAgentOptions: { userAgentPrefix }, + loggingOptions: { logger: options.loggingOptions?.logger ?? logger.info }, + }; + const clientContext = getClient( + options.endpoint ?? options.baseUrl ?? endpoint, + undefined, + updatedOptions, + ); + clientContext.pipeline.removePolicy({ name: "ApiVersionPolicy" }); + const apiVersion = options.apiVersion ?? "2022-05-15-preview"; + clientContext.pipeline.addPolicy({ + name: "ClientApiVersionPolicy", + sendRequest: (req, next) => { + // Use the apiVersion defined in request url directly + // Append one if there is no apiVersion and we have one at client options + const url = new URL(req.url); + if (!url.searchParams.get("api-version")) { + req.url = \`\${req.url}\${ + Array.from(url.searchParams.keys()).length > 0 ? "&" : "?" + }api-version=\${apiVersion}\`; + } + + return next(req); + }, }); return clientContext; - } + } ` ); const classicClient = await emitModularClientFromTypeSpec( @@ -698,7 +758,6 @@ describe("api operations in Modular", () => { const userAgentPrefix = prefixFromOptions ? \`\${prefixFromOptions} azsdk-js-client\` : "azsdk-js-client"; - this._client = createTesting(endpoint, { ...options, userAgentOptions: { userAgentPrefix }, @@ -735,10 +794,11 @@ describe("api operations in Modular", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; @@ -746,7 +806,7 @@ describe("api operations in Modular", () => { context: Client, apiVersion: string, options: TestOptionalParams = { requestOptions: {} }, - ): StreamableMethod { + ): StreamableMethod { return context .path("/test") .get({ @@ -756,9 +816,10 @@ describe("api operations in Modular", () => { } export async function _testDeserialize( - result: Test200Response, + result: PathUncheckedResponse, ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return result.body; @@ -776,16 +837,17 @@ describe("api operations in Modular", () => { export function _test1Send( context: Client, options: Test1OptionalParams = { requestOptions: {} }, - ): StreamableMethod { + ): StreamableMethod { return context .path("/test1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _test1Deserialize( - result: Test1200Response, + result: PathUncheckedResponse, ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return result.body; @@ -807,28 +869,23 @@ describe("api operations in Modular", () => { await assertEqualContent( clientContext?.getFullText()!, ` - import { ClientOptions } from "@azure-rest/core-client"; - import { TestingContext } from "../rest/index.js"; - import getClient from "../rest/index.js"; - + import { ClientOptions, Client, getClient } from "@azure-rest/core-client"; + import { logger } from "../logger.js"; + + export interface TestingContext extends Client {} + /** Optional parameters for the client. */ - export interface TestingClientOptionalParams extends ClientOptions {} - - export { TestingContext } from "../rest/index.js"; - - export function createTesting( - endpoint: string, - options: TestingClientOptionalParams = {}, - ): TestingContext { + export interface TestingClientOptionalParams extends ClientOptions {} + + export function createTesting(endpoint: string, options: TestingClientOptionalParams = {}): TestingContext { const prefixFromOptions = options?.userAgentOptions?.userAgentPrefix; - const userAgentPrefix = prefixFromOptions - ? \`\${prefixFromOptions} azsdk-js-api\` - : "azsdk-js-api"; - - const clientContext = getClient(endpoint, { - ...options, - userAgentOptions: { userAgentPrefix }, - }); + const userAgentPrefix = prefixFromOptions ? \`\${prefixFromOptions} azsdk-js-api\` : "azsdk-js-api"; + const updatedOptions = { ...options,userAgentOptions: { userAgentPrefix },loggingOptions: { logger: options.loggingOptions?.logger ?? logger.info },} + const clientContext = getClient(options.endpoint ?? options.baseUrl ?? endpoint, undefined, updatedOptions); + clientContext.pipeline.removePolicy({ name: "ApiVersionPolicy" }); + if (options.apiVersion) { + logger.warning("This client does not support client api-version, please change it at the operation level"); + } return clientContext; } ` @@ -855,7 +912,6 @@ describe("api operations in Modular", () => { const userAgentPrefix = prefixFromOptions ? \`\${prefixFromOptions} azsdk-js-client\` : "azsdk-js-client"; - this._client = createTesting(endpoint, { ...options, userAgentOptions: { userAgentPrefix }, diff --git a/packages/typespec-ts/test/modularUnit/clientContext.spec.ts b/packages/typespec-ts/test/modularUnit/clientContext.spec.ts index 4eb1dd3749..2174119aec 100644 --- a/packages/typespec-ts/test/modularUnit/clientContext.spec.ts +++ b/packages/typespec-ts/test/modularUnit/clientContext.spec.ts @@ -58,29 +58,40 @@ describe("modular client context type", () => { await assertEqualContent( clientContext?.getFullText()!, ` - import { ClientOptions } from "@azure-rest/core-client"; - import { ServiceContext } from "../rest/index.js"; - import getClient from "../rest/index.js"; + import { ClientOptions, Client, getClient } from "@azure-rest/core-client"; + import { logger } from "../logger.js"; + + export interface ServiceContext extends Client {} /** Optional parameters for the client. */ export interface ServiceClientOptionalParams extends ClientOptions {} - export { ServiceContext } from "../rest/index.js"; - export function createService( endpointParam: string, clientParam: ClientType, options: ServiceClientOptionalParams = {} ): ServiceContext { + const endpointUrl = + options.endpoint ?? + options.baseUrl ?? + \`\${endpointParam}/client/structure/\${clientParam}\`; + const prefixFromOptions = options?.userAgentOptions?.userAgentPrefix; const userAgentPrefix = prefixFromOptions ? \`\$\{prefixFromOptions\} azsdk-js-api\` : "azsdk-js-api"; - - const clientContext = getClient(endpointParam, clientParam, { + const updatedOptions = { ...options, userAgentOptions: { userAgentPrefix }, - }); + loggingOptions: { logger: options.loggingOptions?.logger ?? logger.info } + }; + const clientContext = getClient(endpointUrl, undefined, updatedOptions); + clientContext.pipeline.removePolicy({ name: "ApiVersionPolicy" }); + if (options.apiVersion) { + logger.warning( + "This client does not support client api-version, please change it at the operation level", + ); + } return clientContext; }` ); @@ -140,29 +151,40 @@ describe("modular client context type", () => { await assertEqualContent( clientContext?.getFullText()!, ` - import { ClientOptions } from "@azure-rest/core-client"; - import { ServiceContext } from "../rest/index.js"; - import getClient from "../rest/index.js"; + import { ClientOptions, Client, getClient } from "@azure-rest/core-client"; + import { logger } from "../logger.js"; + + export interface ServiceContext extends Client {} /** Optional parameters for the client. */ export interface ServiceClientOptionalParams extends ClientOptions {} - export { ServiceContext } from "../rest/index.js"; - export function createService( endpointParam: string, clientParam: ClientType, options: ServiceClientOptionalParams = {} ): ServiceContext { + const endpointUrl = + options.endpoint ?? + options.baseUrl ?? + \`\${endpointParam}/client/structure/\${clientParam}\`; + const prefixFromOptions = options?.userAgentOptions?.userAgentPrefix; const userAgentPrefix = prefixFromOptions ? \`\$\{prefixFromOptions\} azsdk-js-api\` : "azsdk-js-api"; - - const clientContext = getClient(endpointParam, clientParam, { + const updatedOptions = { ...options, userAgentOptions: { userAgentPrefix }, - }); + loggingOptions: { logger: options.loggingOptions?.logger ?? logger.info }, + }; + const clientContext = getClient(endpointUrl, undefined, updatedOptions); + clientContext.pipeline.removePolicy({ name: "ApiVersionPolicy" }); + if (options.apiVersion) { + logger.warning( + "This client does not support client api-version, please change it at the operation level", + ); + } return clientContext; }` ); diff --git a/packages/typespec-ts/test/modularUnit/enumUnion.spec.ts b/packages/typespec-ts/test/modularUnit/enumUnion.spec.ts index 7b19c47e2d..29d25dd214 100644 --- a/packages/typespec-ts/test/modularUnit/enumUnion.spec.ts +++ b/packages/typespec-ts/test/modularUnit/enumUnion.spec.ts @@ -62,10 +62,11 @@ describe("header parameters", () => { await assertEqualContent( paramOutput?.[0]?.getFullText()!, ` - import { DemoServiceContext as Client } from "../rest/index.js"; + import { DemoServiceContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; @@ -74,7 +75,7 @@ describe("header parameters", () => { contentType: SchemaContentTypeValues, body: string, options: GetOptionalParams = { requestOptions: {} }, - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -84,8 +85,9 @@ describe("header parameters", () => { }); } - export async function _getDeserialize(result: Get204Response): Promise { - if (result.status !== "204") { + export async function _getDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -463,10 +465,11 @@ describe("header parameters", () => { await assertEqualContent( operationContent, ` - import { DemoServiceContext as Client } from "../rest/index.js"; + import { DemoServiceContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _getSend( @@ -474,7 +477,7 @@ describe("header parameters", () => { testHeader: "A" | "B", body: string, options: GetOptionalParams = { requestOptions: {} }, - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -483,8 +486,9 @@ describe("header parameters", () => { body: body }); } - export async function _getDeserialize(result: Get204Response): Promise { - if (result.status !== "204") { + export async function _getDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -542,10 +546,11 @@ describe("header parameters", () => { await assertEqualContent( operationContent, ` - import { DemoServiceContext as Client } from "../rest/index.js"; + import { DemoServiceContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _getSend( @@ -553,7 +558,7 @@ describe("header parameters", () => { testHeader: string | "A" | "B", body: string, options: GetOptionalParams = { requestOptions: {} }, - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -562,8 +567,9 @@ describe("header parameters", () => { body: body }); } - export async function _getDeserialize(result: Get204Response): Promise { - if (result.status !== "204") { + export async function _getDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -803,7 +809,7 @@ describe("model type", () => { await assertEqualContent( serializer!, ` - export function testSerializer(item: Test): TestRest { + export function testSerializer(item: Test): Record { return { color: item["color"], } @@ -861,7 +867,7 @@ describe("model type", () => { await assertEqualContent( serializer!, ` - export function testSerializer(item: Test): TestRest { + export function testSerializer(item: Test): Record { return { content: item["content"], } @@ -889,7 +895,7 @@ describe("model type", () => { await assertEqualContent( serializer!, ` - export function testSerializer(item: Test): TestRest { + export function testSerializer(item: Test): Record { return { content: item["content"], } @@ -919,7 +925,7 @@ describe("model type", () => { await assertEqualContent( serializer!, ` - export function testSerializer(item: Test): TestRest { + export function testSerializer(item: Test): Record { return { color: item["color"], } @@ -1115,7 +1121,7 @@ describe("model type", () => { await assertEqualContent( serializer!, ` - export function testSerializer(item: Test): TestRest { + export function testSerializer(item: Test): Record { return { content: item["content"], } @@ -1143,7 +1149,7 @@ describe("model type", () => { await assertEqualContent( serializer!, ` - export function testSerializer(item: Test): TestRest { + export function testSerializer(item: Test): Record { return { content: item["content"], } diff --git a/packages/typespec-ts/test/modularUnit/modelsGenerator.spec.ts b/packages/typespec-ts/test/modularUnit/modelsGenerator.spec.ts index a53c569828..c4b31a01be 100644 --- a/packages/typespec-ts/test/modularUnit/modelsGenerator.spec.ts +++ b/packages/typespec-ts/test/modularUnit/modelsGenerator.spec.ts @@ -42,14 +42,13 @@ async function verifyModularPropertyType( await assertEqualContent( modelsFile?.getFullText()!, ` - import { InputOutputModel as InputOutputModelRest } from "../rest/index.js" ${additionalImports} export interface InputOutputModel { prop: ${inputType}; } - export function inputOutputModelSerializer(item: InputOutputModel): InputOutputModelRest { + export function inputOutputModelSerializer(item: InputOutputModel): Record { return { prop: item["prop"] } @@ -137,7 +136,7 @@ describe("modular encode test for property type datetime", () => { await assertEqualContent( serializer!, ` - export function fooSerializer(item: Foo): FooRest { + export function fooSerializer(item: Foo): Record { return { prop1: item["prop1"].toDateString(), prop2: item["prop2"].toTimeString(), @@ -153,10 +152,11 @@ describe("modular encode test for property type datetime", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -164,7 +164,7 @@ describe("modular encode test for property type datetime", () => { context: Client, body: Foo, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -178,8 +178,9 @@ describe("modular encode test for property type datetime", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -212,10 +213,11 @@ describe("modular encode test for property type datetime", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -223,7 +225,7 @@ describe("modular encode test for property type datetime", () => { context: Client, prop: Date, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ @@ -234,8 +236,9 @@ describe("modular encode test for property type datetime", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -279,7 +282,7 @@ describe("modular encode test for property type datetime", () => { await assertEqualContent( serializer!, ` - export function fooSerializer(item: Foo): FooRest { + export function fooSerializer(item: Foo): Record { return { prop1: item["prop1"].toISOString(), prop2: item["prop2"], @@ -293,10 +296,11 @@ describe("modular encode test for property type datetime", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -304,7 +308,7 @@ describe("modular encode test for property type datetime", () => { context: Client, body: Foo, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -316,8 +320,9 @@ describe("modular encode test for property type datetime", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -363,7 +368,7 @@ describe("modular encode test for property type datetime", () => { await assertEqualContent( serializer!, ` - export function fooSerializer(item: Foo): FooRest { + export function fooSerializer(item: Foo): Record { return { prop1: item["prop1"].toUTCString(), prop2: item["prop2"], @@ -377,10 +382,11 @@ describe("modular encode test for property type datetime", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -388,7 +394,7 @@ describe("modular encode test for property type datetime", () => { context: Client, body: Foo, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -400,8 +406,9 @@ describe("modular encode test for property type datetime", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -444,7 +451,7 @@ describe("modular encode test for property type datetime", () => { await assertEqualContent( serializer!, ` - export function fooSerializer(item: Foo): FooRest { + export function fooSerializer(item: Foo): Record { return { prop1: item["prop1"].getTime(), }; @@ -457,10 +464,11 @@ describe("modular encode test for property type datetime", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -468,7 +476,7 @@ describe("modular encode test for property type datetime", () => { context: Client, body: Foo, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -479,8 +487,9 @@ describe("modular encode test for property type datetime", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -524,10 +533,11 @@ describe("modular encode test for property type duration", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -535,7 +545,7 @@ describe("modular encode test for property type duration", () => { context: Client, body: Foo, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -546,8 +556,9 @@ describe("modular encode test for property type duration", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -590,10 +601,11 @@ describe("modular encode test for property type duration", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -601,7 +613,7 @@ describe("modular encode test for property type duration", () => { context: Client, body: Foo, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -612,8 +624,9 @@ describe("modular encode test for property type duration", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -659,10 +672,11 @@ describe("modular encode test for property type duration", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -670,7 +684,7 @@ describe("modular encode test for property type duration", () => { context: Client, body: Foo, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -682,8 +696,9 @@ describe("modular encode test for property type duration", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -727,7 +742,7 @@ describe("modular encode test for property type bytes", () => { await assertEqualContent( serializer!, ` - export function fooSerializer(item: Foo): FooRest { + export function fooSerializer(item: Foo): Record { return { prop1: uint8ArrayToString(item["prop1"], "base64"), } @@ -740,10 +755,11 @@ describe("modular encode test for property type bytes", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; import { uint8ArrayToString, stringToUint8Array } from "@azure/core-util"; @@ -752,7 +768,7 @@ describe("modular encode test for property type bytes", () => { context: Client, body: Foo, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -763,8 +779,9 @@ describe("modular encode test for property type bytes", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -810,10 +827,11 @@ describe("modular encode test for property type bytes", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; import { uint8ArrayToString, stringToUint8Array } from "@azure/core-util"; @@ -822,7 +840,7 @@ describe("modular encode test for property type bytes", () => { context: Client, body: Foo, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -833,8 +851,9 @@ describe("modular encode test for property type bytes", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -880,10 +899,11 @@ describe("modular encode test for property type bytes", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; import { uint8ArrayToString, stringToUint8Array } from "@azure/core-util"; @@ -892,7 +912,7 @@ describe("modular encode test for property type bytes", () => { context: Client, body: Foo, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -903,8 +923,9 @@ describe("modular encode test for property type bytes", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -1003,24 +1024,26 @@ describe("inheritance & polymorphism", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( context: Client, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ ...operationOptionsToRequestParameters(options) }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -1082,24 +1105,26 @@ describe("inheritance & polymorphism", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( context: Client, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ ...operationOptionsToRequestParameters(options) }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -1171,24 +1196,26 @@ describe("inheritance & polymorphism", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( context: Client, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ ...operationOptionsToRequestParameters(options) }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -1260,24 +1287,26 @@ describe("inheritance & polymorphism", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( context: Client, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ ...operationOptionsToRequestParameters(options) }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -1360,24 +1389,26 @@ describe("inheritance & polymorphism", () => { assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( context: Client, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ ...operationOptionsToRequestParameters(options) }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -1429,24 +1460,26 @@ describe("inheritance & polymorphism", () => { assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _readSend( context: Client, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ ...operationOptionsToRequestParameters(options) }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -1516,24 +1549,26 @@ describe("inheritance & polymorphism", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( context: Client, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ ...operationOptionsToRequestParameters(options) }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -1612,10 +1647,11 @@ describe("inheritance & polymorphism", () => { await assertEqualContent( paramOutput?.[0]?.getFullText()!, ` - import { DemoServiceContext as Client } from "../rest/index.js"; + import { DemoServiceContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; @@ -1624,7 +1660,7 @@ describe("inheritance & polymorphism", () => { contentType: SchemaContentTypeValues, body: string, options: GetOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -1634,8 +1670,9 @@ describe("inheritance & polymorphism", () => { }); } - export async function _getDeserialize(result: Get204Response): Promise { - if (result.status !== "204") { + export async function _getDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -1738,10 +1775,11 @@ describe("inheritance & polymorphism", () => { await assertEqualContent( operationContent, ` - import { DemoServiceContext as Client } from "../rest/index.js"; + import { DemoServiceContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _getSend( @@ -1749,7 +1787,7 @@ describe("inheritance & polymorphism", () => { testHeader: "A" | "B", body: string, options: GetOptionalParams = { requestOptions: {} }, - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -1758,8 +1796,9 @@ describe("inheritance & polymorphism", () => { body: body }); } - export async function _getDeserialize(result: Get204Response): Promise { - if (result.status !== "204") { + export async function _getDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -1807,7 +1846,7 @@ describe("`is`", () => { await assertEqualContent( serializer!, ` - export function aSerializer(item: A): ARest { + export function aSerializer(item: A): Record { return { prop1: item["prop1"], prop2: item["prop2"], @@ -1845,7 +1884,7 @@ describe("`extends`", () => { await assertEqualContent( serializerB!, ` - export function bSerializer(item: B): BRest { + export function bSerializer(item: B): Record { return { prop1: item["prop1"], prop2: item["prop2"], @@ -1863,7 +1902,7 @@ describe("`extends`", () => { await assertEqualContent( serializerA!, ` - export function aSerializer(item: A): ARest { + export function aSerializer(item: A): Record { return { prop1: item["prop1"], prop2: item["prop2"], @@ -1918,7 +1957,7 @@ describe("visibility", () => { await assertEqualContent( serializer!, ` - export function aSerializer(item: A): ARest { + export function aSerializer(item: A): Record { return { exactVersion: item["exactVersion"], }; @@ -1962,7 +2001,7 @@ describe("spread record", () => { await assertEqualContent( serializer!, ` - export function vegetablesSerializer(item: Vegetables): VegetablesRest { + export function vegetablesSerializer(item: Vegetables): Record { return { ...item, carrots: item["carrots"], @@ -2028,7 +2067,7 @@ describe("spread record", () => { await assertEqualContent( serializerA!, ` - export function aSerializer(item: A): ARest { + export function aSerializer(item: A): Record { return { ...item, foo: item["foo"], @@ -2050,7 +2089,7 @@ describe("spread record", () => { await assertEqualContent( serializerBase!, ` - export function baseSerializer(item: Base): BaseRest { + export function baseSerializer(item: Base): Record { return { foo: item["foo"], }; diff --git a/packages/typespec-ts/test/modularUnit/operations.spec.ts b/packages/typespec-ts/test/modularUnit/operations.spec.ts index cb8f31d9bf..115c0d30d6 100644 --- a/packages/typespec-ts/test/modularUnit/operations.spec.ts +++ b/packages/typespec-ts/test/modularUnit/operations.spec.ts @@ -17,15 +17,16 @@ describe("operations", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; - import { StreamableMethod, operationOptionsToRequestParameters, createRestError } from "@azure-rest/core-client"; + import { TestingContext as Client } from "./index.js"; + import { StreamableMethod, operationOptionsToRequestParameters, PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; - export function _readSend(context: Client, options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { + export function _readSend(context: Client, options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { return context.path("/", ).post({...operationOptionsToRequestParameters(options)}) ; } - export async function _readDeserialize(result: Read204Response): Promise { - if(result.status !== "204"){ + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)){ throw createRestError(result); } @@ -51,15 +52,16 @@ describe("operations", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; - import { StreamableMethod, operationOptionsToRequestParameters, createRestError } from "@azure-rest/core-client"; + import { TestingContext as Client } from "./index.js"; + import { StreamableMethod, operationOptionsToRequestParameters, PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; - export function _readSend(context: Client, options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { + export function _readSend(context: Client, options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { return context.path("/", ).get({...operationOptionsToRequestParameters(options)}) ; } - export async function _readDeserialize(result: Read200Response): Promise { - if(result.status !== "200"){ + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if(!expectedStatuses.includes(result.status)){ throw createRestError(result); } @@ -126,8 +128,8 @@ describe("operations", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; - import { StreamableMethod, operationOptionsToRequestParameters, createRestError } from "@azure-rest/core-client"; + import { TestingContext as Client } from "./index.js"; + import { StreamableMethod, operationOptionsToRequestParameters, PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; import { uint8ArrayToString } from "@azure/core-util"; export function _readSend( @@ -139,7 +141,7 @@ describe("operations", () => { utcDateHeader: Date, prop1: string, prop2: number, - options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { + options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { return context.path("/", ).post({...operationOptionsToRequestParameters(options), headers: { "required-header": requiredHeader, @@ -172,8 +174,9 @@ describe("operations", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if(result.status !== "200"){ + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if(!expectedStatuses.includes(result.status)){ throw createRestError(result); } @@ -229,16 +232,17 @@ describe("operations", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; - import { StreamableMethod, operationOptionsToRequestParameters, createRestError } from "@azure-rest/core-client"; + import { TestingContext as Client } from "./index.js"; + import { StreamableMethod, operationOptionsToRequestParameters, PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; - export function _readSend(context: Client, nullableRequiredHeader: (string | null), options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { + export function _readSend(context: Client, nullableRequiredHeader: (string | null), options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { return context.path("/", ).get({...operationOptionsToRequestParameters(options), headers: {"nullable-required-header": nullableRequiredHeader},}); } - export async function _readDeserialize(result: Read200Response): Promise { - if(result.status !== "200"){ + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if(!expectedStatuses.includes(result.status)){ throw createRestError(result); } @@ -272,10 +276,10 @@ describe("operations", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; - import { StreamableMethod, operationOptionsToRequestParameters, createRestError } from "@azure-rest/core-client"; + import { TestingContext as Client } from "./index.js"; + import { StreamableMethod, operationOptionsToRequestParameters, PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; - export function _readSend(context: Client, bars?: Bar[], options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { + export function _readSend(context: Client, bars?: Bar[], options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { return context.path("/").post({ ...operationOptionsToRequestParameters(options), body: (bars ?? []).map((p) => { @@ -284,8 +288,9 @@ describe("operations", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if(result.status !== "200"){ + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if(!expectedStatuses.includes(result.status)){ throw createRestError(result); } @@ -314,13 +319,13 @@ describe("operations", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, createRestError } from "@azure-rest/core-client"; - export function _readSend(context: Client, bars: Bar[], options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { + export function _readSend(context: Client, bars: Bar[], options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { return context.path("/").post({ ...operationOptionsToRequestParameters(options), - body: bars.map((p) => { + body: bars.map((p: any) => { return { prop1: p["prop1"], prop2: p["prop2"], @@ -329,8 +334,9 @@ describe("operations", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if(result.status !== "200"){ + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if(!expectedStatuses.includes(result.status)){ throw createRestError(result); } @@ -359,13 +365,13 @@ describe("operations", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, createRestError } from "@azure-rest/core-client"; - export function _readSend(context: Client, bars: Bar[], options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { + export function _readSend(context: Client, bars: Bar[], options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { return context.path("/").post({ ...operationOptionsToRequestParameters(options), - body: bars.map((p) => { + body: bars.map((p: any) => { return { prop1: p["prop1"], prop2: p["prop2"], @@ -374,8 +380,9 @@ describe("operations", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if(result.status !== "200"){ + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if(!expectedStatuses.includes(result.status)){ throw createRestError(result); } @@ -404,13 +411,13 @@ describe("operations", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, createRestError } from "@azure-rest/core-client"; - export function _readSend(context: Client, bars: Bar[], options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { + export function _readSend(context: Client, bars: Bar[], options: ReadOptionalParams = { requestOptions: {} }): StreamableMethod { return context.path("/").post({ ...operationOptionsToRequestParameters(options), - body: bars.map((p) => { + body: bars.map((p: any) => { return { prop1: p["prop1"], prop2: p["prop2"], @@ -419,8 +426,9 @@ describe("operations", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if(result.status !== "200"){ + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if(!expectedStatuses.includes(result.status)){ throw createRestError(result); } @@ -458,10 +466,11 @@ describe("operations", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -469,7 +478,7 @@ describe("operations", () => { context: Client, body: Foo, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .post({ @@ -492,8 +501,9 @@ describe("operations", () => { }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -533,47 +543,49 @@ describe("operations", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _readSend( context: Client, options: ReadOptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/") .get({ ...operationOptionsToRequestParameters(options) }); } - export async function _readDeserialize(result: Read200Response): Promise { - if (result.status !== "200") { + export async function _readDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { optionalBars: result.body["optionalBars"] === undefined ? result.body["optionalBars"] - : result.body["optionalBars"].map((p) => { + : result.body["optionalBars"].map((p: any) => { return { prop1: p["prop1"], prop2: p["prop2"] }; }), - requiredBars: result.body["requiredBars"].map((p) => { + requiredBars: result.body["requiredBars"].map((p: any) => { return { prop1: p["prop1"], prop2: p["prop2"] }; }), nullableBars: result.body["nullableBars"] === undefined || result.body["nullableBars"] === null ? result.body["nullableBars"] - : result.body["nullableBars"].map((p) => { + : result.body["nullableBars"].map((p: any) => { return { prop1: p["prop1"], prop2: p["prop2"] }; }), nullableRequiredBars: result.body["nullableRequiredBars"] === null ? result.body["nullableRequiredBars"] - : result.body["nullableRequiredBars"].map((p) => { + : result.body["nullableRequiredBars"].map((p: any) => { return { prop1: p["prop1"], prop2: p["prop2"] }; }), }; @@ -620,15 +632,16 @@ describe("operations", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; - import { StreamableMethod, operationOptionsToRequestParameters, createRestError } from "@azure-rest/core-client"; + import { TestingContext as Client } from "./index.js"; + import { StreamableMethod, operationOptionsToRequestParameters, PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; - export function _testSend(context: Client, options: TestOptionalParams = { requestOptions: {} }): StreamableMethod { + export function _testSend(context: Client, options: TestOptionalParams = { requestOptions: {} }): StreamableMethod { return context.path("/", ).post({...operationOptionsToRequestParameters(options), }) ; } - export async function _testDeserialize(result: Test200Response | TestDefaultResponse): Promise<_Bar> { - if(result.status !== "200"){ + export async function _testDeserialize(result: PathUncheckedResponse): Promise<_Bar> { + const expectedStatuses = ["200"]; + if(!expectedStatuses.includes(result.status)){ throw createRestError(result); } return { @@ -687,15 +700,16 @@ describe("operations", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; - import { StreamableMethod, operationOptionsToRequestParameters, createRestError } from "@azure-rest/core-client"; + import { TestingContext as Client } from "./index.js"; + import { StreamableMethod, operationOptionsToRequestParameters, PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; - export function _testSend(context: Client, options: TestOptionalParams = { requestOptions: {} }): StreamableMethod { + export function _testSend(context: Client, options: TestOptionalParams = { requestOptions: {} }): StreamableMethod { return context.path("/", ).post({...operationOptionsToRequestParameters(options), }) ; } - export async function _testDeserialize(result: Test200Response | TestDefaultResponse): Promise { - if(result.status !== "200"){ + export async function _testDeserialize(result: PathUncheckedResponse): Promise { + const expectedStatuses = ["200"]; + if(!expectedStatuses.includes(result.status)){ throw createRestError(result); } return { diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil.spec.ts b/packages/typespec-ts/test/modularUnit/serializeUtil.spec.ts index bd00b349b5..dbc1bc512b 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil.spec.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil.spec.ts @@ -41,10 +41,11 @@ describe("modular special union serialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; @@ -52,7 +53,7 @@ describe("modular special union serialization", () => { context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ @@ -67,9 +68,10 @@ describe("modular special union serialization", () => { } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -128,10 +130,11 @@ describe("modular special union serialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; @@ -139,7 +142,7 @@ describe("modular special union serialization", () => { context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ @@ -154,9 +157,10 @@ describe("modular special union serialization", () => { } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -207,10 +211,11 @@ describe("modular special union serialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; @@ -218,7 +223,7 @@ describe("modular special union serialization", () => { context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ @@ -233,9 +238,10 @@ describe("modular special union serialization", () => { } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -286,10 +292,11 @@ describe("modular special union serialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; @@ -297,7 +304,7 @@ describe("modular special union serialization", () => { context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ @@ -312,9 +319,10 @@ describe("modular special union serialization", () => { } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -370,10 +378,11 @@ describe("modular special union serialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; @@ -381,7 +390,7 @@ describe("modular special union serialization", () => { context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ @@ -396,9 +405,10 @@ describe("modular special union serialization", () => { } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -454,10 +464,11 @@ describe("modular special union serialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; @@ -465,7 +476,7 @@ describe("modular special union serialization", () => { context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ @@ -480,9 +491,10 @@ describe("modular special union serialization", () => { } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -545,7 +557,7 @@ describe("modular special union serialization", () => { await assertEqualContent( serializeWidgetData1?.getFullText()!, ` - export function widgetData1Serializer(item: WidgetData1): WidgetData1Rest { + export function widgetData1Serializer(item: WidgetData1): Record { return { kind: item["kind"], start: item["start"].toISOString(), @@ -561,7 +573,7 @@ describe("modular special union serialization", () => { await assertEqualContent( serializeWidgetData0?.getFullText()!, ` - export function widgetData0Serializer(item: WidgetData0): WidgetData0Rest { + export function widgetData0Serializer(item: WidgetData0): Record { return { kind: item["kind"], fooProp: item["fooProp"], @@ -594,17 +606,18 @@ describe("modular special union serialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ @@ -618,9 +631,10 @@ describe("modular special union serialization", () => { }); } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -677,7 +691,7 @@ describe("modular special union serialization", () => { await assertEqualContent( modelsFile?.getFunction("widgetData1Serializer")?.getFullText()!, ` - export function widgetData1Serializer(item: WidgetData1): WidgetData1Rest { + export function widgetData1Serializer(item: WidgetData1): Record { return { kind: item["kind"], data: uint8ArrayToString(item["data"], "base64") @@ -710,10 +724,11 @@ describe("modular special union serialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; @@ -721,7 +736,7 @@ describe("modular special union serialization", () => { context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ @@ -736,9 +751,10 @@ describe("modular special union serialization", () => { } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } @@ -798,7 +814,7 @@ describe("modular special union serialization", () => { await assertEqualContent( modelsFile?.getFunction("widgetData0Serializer")?.getFullText()!, ` - export function widgetData0Serializer(item: WidgetData0): WidgetData0Rest { + export function widgetData0Serializer(item: WidgetData0): Record { return { kind: item["kind"], fooProp: uint8ArrayToString(item["fooProp"], "base64"), @@ -810,7 +826,7 @@ describe("modular special union serialization", () => { await assertEqualContent( modelsFile?.getFunction("widgetData1Serializer")?.getFullText()!, ` - export function widgetData1Serializer(item: WidgetData1): WidgetData1Rest { + export function widgetData1Serializer(item: WidgetData1): Record { return { kind: item["kind"], data: item["data"].toISOString() @@ -843,17 +859,18 @@ describe("modular special union serialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} }, - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ @@ -867,9 +884,10 @@ describe("modular special union serialization", () => { }); } export async function _customGet1Deserialize( - result: CustomGet1204Response, + result: PathUncheckedResponse, ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -926,7 +944,7 @@ describe("modular special union serialization", () => { await assertEqualContent( modelsFile?.getFunction("widgetData0Serializer")?.getFullText()!, ` - export function widgetData0Serializer(item: WidgetData0): WidgetData0Rest { + export function widgetData0Serializer(item: WidgetData0): Record { return { kind: item["kind"], fooProp: uint8ArrayToString(item["fooProp"], "base64"), @@ -938,7 +956,7 @@ describe("modular special union serialization", () => { await assertEqualContent( modelsFile?.getFunction("widgetData1Serializer")?.getFullText()!, ` - export function widgetData1Serializer(item: WidgetData1): WidgetData1Rest { + export function widgetData1Serializer(item: WidgetData1): Record { return { kind: item["kind"], data: uint8ArrayToString(item["data"], "base64") @@ -971,17 +989,18 @@ describe("modular special union serialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} }, - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ @@ -995,9 +1014,10 @@ describe("modular special union serialization", () => { }); } export async function _customGet1Deserialize( - result: CustomGet1204Response, + result: PathUncheckedResponse, ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if(!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; @@ -1050,24 +1070,26 @@ describe("modular special union deserialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -1129,24 +1151,26 @@ describe("modular special union deserialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -1200,24 +1224,26 @@ describe("modular special union deserialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -1271,24 +1297,26 @@ describe("modular special union deserialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -1347,24 +1375,26 @@ describe("modular special union deserialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -1422,24 +1452,26 @@ describe("modular special union deserialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -1531,24 +1563,26 @@ describe("modular special union deserialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -1642,24 +1676,26 @@ describe("modular special union deserialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -1765,24 +1801,26 @@ describe("modular special union deserialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} }, - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response, + result: PathUncheckedResponse, ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -1894,24 +1932,26 @@ describe("modular special union deserialization", () => { await assertEqualContent( operationFiles?.[0]?.getFullText()!, ` - import { TestingContext as Client } from "../rest/index.js"; + import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError, } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} }, - ): StreamableMethod { + ): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response, + result: PathUncheckedResponse, ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { @@ -2014,7 +2054,7 @@ describe("modular special union deserialization", () => { bark: obj["bark"], name: obj["name"], weight: obj["weight"], - friends: obj["friends"].map((p) => deserializePetUnion(p)), + friends: obj["friends"].map((p: any) => deserializePetUnion(p)), birthDay: new Date(obj["birthDay"]), }; } diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_deserialize_util_even_if_circular_in_model_properties_but_no_other_special_variants/serializeUtil.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_deserialize_util_even_if_circular_in_model_properties_but_no_other_special_variants/serializeUtil.ts index ce959f8483..31b8639d44 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_deserialize_util_even_if_circular_in_model_properties_but_no_other_special_variants/serializeUtil.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_deserialize_util_even_if_circular_in_model_properties_but_no_other_special_variants/serializeUtil.ts @@ -19,7 +19,7 @@ function deserializeGold(obj: GoldOutput): Gold { bark: obj["bark"], name: obj["name"], weight: obj["weight"], - friends: obj["friends"].map((p) => deserializePetUnion(p)), + friends: obj["friends"].map((p: any) => deserializePetUnion(p)), birthDay: new Date(obj["birthDay"]) }; } diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_deserialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_bytes_property/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_deserialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_bytes_property/operations.ts index 1a3a1ba445..0a9f0c7ac4 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_deserialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_bytes_property/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_deserialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_bytes_property/operations.ts @@ -1,21 +1,23 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_deserialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_datatime_property/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_deserialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_datatime_property/operations.ts index 1a3a1ba445..0a9f0c7ac4 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_deserialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_datatime_property/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_deserialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_datatime_property/operations.ts @@ -1,21 +1,23 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_bytes_property/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_bytes_property/operations.ts index 1a3a1ba445..0a9f0c7ac4 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_bytes_property/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_bytes_property/operations.ts @@ -1,21 +1,23 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_datetime_property/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_datetime_property/operations.ts index 1a3a1ba445..0a9f0c7ac4 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_datetime_property/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_datetime_property/operations.ts @@ -1,21 +1,23 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_bytes_without_discriminator/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_bytes_without_discriminator/operations.ts index 0268793817..4fb3fcde51 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_bytes_without_discriminator/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_bytes_without_discriminator/operations.ts @@ -1,21 +1,23 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_datatime_without_discriminator/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_datatime_without_discriminator/operations.ts index 0268793817..4fb3fcde51 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_datatime_without_discriminator/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_datatime_without_discriminator/operations.ts @@ -1,21 +1,23 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_bytes_property_without_discriminator/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_bytes_property_without_discriminator/operations.ts index 0268793817..4fb3fcde51 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_bytes_property_without_discriminator/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_bytes_property_without_discriminator/operations.ts @@ -1,21 +1,23 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_datatime_property_without_discriminator/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_datatime_property_without_discriminator/operations.ts index 0268793817..4fb3fcde51 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_datatime_property_without_discriminator/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/should_not_generate_deserialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_datatime_property_without_discriminator/operations.ts @@ -1,21 +1,23 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/shouldn't_generate_deserialize_util_or_as_any_if_there's_no_special_union_variant_with_discriminator/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/shouldn't_generate_deserialize_util_or_as_any_if_there's_no_special_union_variant_with_discriminator/operations.ts index 707b969e4f..b90d12fc56 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/shouldn't_generate_deserialize_util_or_as_any_if_there's_no_special_union_variant_with_discriminator/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/shouldn't_generate_deserialize_util_or_as_any_if_there's_no_special_union_variant_with_discriminator/operations.ts @@ -1,21 +1,23 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/shouldn't_generate_deserialize_util_or_as_any_if_there's_no_special_union_variant_without_discriminator/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/shouldn't_generate_deserialize_util_or_as_any_if_there's_no_special_union_variant_without_discriminator/operations.ts index 707b969e4f..b90d12fc56 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/shouldn't_generate_deserialize_util_or_as_any_if_there's_no_special_union_variant_without_discriminator/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_deserialization/shouldn't_generate_deserialize_util_or_as_any_if_there's_no_special_union_variant_without_discriminator/operations.ts @@ -1,21 +1,23 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context .path("/customGet1") .get({ ...operationOptionsToRequestParameters(options) }); } export async function _customGet1Deserialize( - result: CustomGet1200Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "200") { + const expectedStatuses = ["200"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return { diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_bytes_property/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_bytes_property/operations.ts index f0624261cc..7d34241e81 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_bytes_property/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_bytes_property/operations.ts @@ -1,14 +1,15 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context.path("/customGet1").get({ ...operationOptionsToRequestParameters(options), body: { @@ -20,9 +21,10 @@ export function _customGet1Send( }); } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_datetime_property/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_datetime_property/operations.ts index f0624261cc..7d34241e81 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_datetime_property/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there're_special_discriminated_union_variants_of_model_with_bytes_and_datetime_property/operations.ts @@ -1,14 +1,15 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context.path("/customGet1").get({ ...operationOptionsToRequestParameters(options), body: { @@ -20,9 +21,10 @@ export function _customGet1Send( }); } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_bytes_property/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_bytes_property/operations.ts index 8f81dae5fc..cc698c45e7 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_bytes_property/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_bytes_property/operations.ts @@ -1,7 +1,8 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -9,7 +10,7 @@ export function _customGet1Send( context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context.path("/customGet1").get({ ...operationOptionsToRequestParameters(options), body: { @@ -22,9 +23,10 @@ export function _customGet1Send( } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_datatime_property/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_datatime_property/operations.ts index f0624261cc..7d34241e81 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_datatime_property/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_generate_serialize_util_if_there's_a_special_discriminated_union_variant_of_model_with_datatime_property/operations.ts @@ -1,14 +1,15 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; export function _customGet1Send( context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context.path("/customGet1").get({ ...operationOptionsToRequestParameters(options), body: { @@ -20,9 +21,10 @@ export function _customGet1Send( }); } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } return; diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_bytes_without_discriminator/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_bytes_without_discriminator/operations.ts index 6c258b997a..f1833077d2 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_bytes_without_discriminator/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_bytes_without_discriminator/operations.ts @@ -1,7 +1,8 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -9,7 +10,7 @@ export function _customGet1Send( context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context.path("/customGet1").get({ ...operationOptionsToRequestParameters(options), body: { @@ -22,9 +23,10 @@ export function _customGet1Send( } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_datatime_without_discriminator/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_datatime_without_discriminator/operations.ts index 6c258b997a..f1833077d2 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_datatime_without_discriminator/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_datatime_without_discriminator/operations.ts @@ -1,7 +1,8 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -9,7 +10,7 @@ export function _customGet1Send( context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context.path("/customGet1").get({ ...operationOptionsToRequestParameters(options), body: { @@ -22,9 +23,10 @@ export function _customGet1Send( } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_bytes_property_without_discriminator/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_bytes_property_without_discriminator/operations.ts index 6c258b997a..f1833077d2 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_bytes_property_without_discriminator/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_bytes_property_without_discriminator/operations.ts @@ -1,7 +1,8 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -9,7 +10,7 @@ export function _customGet1Send( context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context.path("/customGet1").get({ ...operationOptionsToRequestParameters(options), body: { @@ -22,9 +23,10 @@ export function _customGet1Send( } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_datatime_property_without_discriminator/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_datatime_property_without_discriminator/operations.ts index 6c258b997a..f1833077d2 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_datatime_property_without_discriminator/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/should_not_generate_serialize_util_but_generate_as_any_if_there's_a_special_union_variant_of_model_with_datatime_property_without_discriminator/operations.ts @@ -1,7 +1,8 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -9,7 +10,7 @@ export function _customGet1Send( context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context.path("/customGet1").get({ ...operationOptionsToRequestParameters(options), body: { @@ -22,9 +23,10 @@ export function _customGet1Send( } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/shouldn't_generate_serialize_util_or_as_any_if_there's_no_special_union_variant_even_with_discriminator/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/shouldn't_generate_serialize_util_or_as_any_if_there's_no_special_union_variant_even_with_discriminator/operations.ts index 6914956a8e..a07e128d9e 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/shouldn't_generate_serialize_util_or_as_any_if_there's_no_special_union_variant_even_with_discriminator/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/shouldn't_generate_serialize_util_or_as_any_if_there's_no_special_union_variant_even_with_discriminator/operations.ts @@ -1,7 +1,8 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -9,7 +10,7 @@ export function _customGet1Send( context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context.path("/customGet1").get({ ...operationOptionsToRequestParameters(options), body: { @@ -22,9 +23,10 @@ export function _customGet1Send( } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } diff --git a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/shouldn't_generate_serialize_util_or_as_any_if_there's_no_special_union_variant_without_discriminator/operations.ts b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/shouldn't_generate_serialize_util_or_as_any_if_there's_no_special_union_variant_without_discriminator/operations.ts index 6914956a8e..a07e128d9e 100644 --- a/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/shouldn't_generate_serialize_util_or_as_any_if_there's_no_special_union_variant_without_discriminator/operations.ts +++ b/packages/typespec-ts/test/modularUnit/serializeUtil/modular_special_union_serialization/shouldn't_generate_serialize_util_or_as_any_if_there's_no_special_union_variant_without_discriminator/operations.ts @@ -1,7 +1,8 @@ -import { TestingContext as Client } from "../rest/index.js"; +import { TestingContext as Client } from "./index.js"; import { StreamableMethod, operationOptionsToRequestParameters, + PathUncheckedResponse, createRestError } from "@azure-rest/core-client"; @@ -9,7 +10,7 @@ export function _customGet1Send( context: Client, body: Widget1, options: CustomGet1OptionalParams = { requestOptions: {} } -): StreamableMethod { +): StreamableMethod { return context.path("/customGet1").get({ ...operationOptionsToRequestParameters(options), body: { @@ -22,9 +23,10 @@ export function _customGet1Send( } export async function _customGet1Deserialize( - result: CustomGet1204Response + result: PathUncheckedResponse ): Promise { - if (result.status !== "204") { + const expectedStatuses = ["204"]; + if (!expectedStatuses.includes(result.status)) { throw createRestError(result); } diff --git a/packages/typespec-ts/test/util/emitUtil.ts b/packages/typespec-ts/test/util/emitUtil.ts index 4ad612f1b9..14b716c866 100644 --- a/packages/typespec-ts/test/util/emitUtil.ts +++ b/packages/typespec-ts/test/util/emitUtil.ts @@ -442,8 +442,7 @@ export async function emitModularOperationsFromTypeSpec( const res = buildOperationFiles( modularCodeModel.clients[0], dpgContext, - modularCodeModel, - false + modularCodeModel ); if (mustEmptyDiagnostic && dpgContext.program.diagnostics.length > 0) { throw dpgContext.program.diagnostics;