diff --git a/packages/typespec-ts/test/azureModularIntegration/azureVersioningPreviewVersion.spec.ts b/packages/typespec-ts/test/azureModularIntegration/azureVersioningPreviewVersion.spec.ts new file mode 100644 index 0000000000..a93e91f363 --- /dev/null +++ b/packages/typespec-ts/test/azureModularIntegration/azureVersioningPreviewVersion.spec.ts @@ -0,0 +1,48 @@ +import { assert } from "chai"; +import { PreviewVersionClient } from "./generated/azure/versioning/previewVersion/src/index.js"; + +describe("PreviewVersionClient Rest Client", () => { + let client: PreviewVersionClient; + + beforeEach(() => { + client = new PreviewVersionClient({ + endpoint: "http://localhost:3002", + allowInsecureConnection: true + }); + }); + + it("should get widget with preview version - includes color property", async () => { + // Test @previewVersion with stable operations - should work across all versions + // Color is expected in the response because we are using preview version client + const result = await client.getWidget("widget-123"); + + assert.strictEqual(result?.id, "widget-123"); + assert.strictEqual(result?.name, "Sample Widget"); + assert.strictEqual(result?.color, "blue"); + }); + + it("should update widget color - preview-only operation", async () => { + // Test @previewVersion with preview-only operations - only available in preview version + // This operation can be called because the client uses preview api version + const result = await client.updateWidgetColor("widget-123", { + color: "red" + }); + + assert.strictEqual(result?.id, "widget-123"); + assert.strictEqual(result?.name, "Sample Widget"); + assert.strictEqual(result?.color, "red"); + }); + + it("should list widgets with color filtering", async () => { + // Test @previewVersion with preview-specific parameters + // color parameter is only available in preview version + const result = await client.listWidgets({ + name: "test", + color: "blue" + }); + + assert.strictEqual(result.widgets.length, 1); + assert.strictEqual(result.widgets[0]?.id, "widget-1"); + assert.strictEqual(result.widgets[0]?.name, "test"); + }); +}); diff --git a/packages/typespec-ts/test/azureModularIntegration/generated/azure/versioning/previewVersion/.gitignore b/packages/typespec-ts/test/azureModularIntegration/generated/azure/versioning/previewVersion/.gitignore new file mode 100644 index 0000000000..39220655cc --- /dev/null +++ b/packages/typespec-ts/test/azureModularIntegration/generated/azure/versioning/previewVersion/.gitignore @@ -0,0 +1,6 @@ +/** +!/src +/src/** +!/src/index.d.ts +!/.gitignore +!/tspconfig.yaml diff --git a/packages/typespec-ts/test/azureModularIntegration/generated/azure/versioning/previewVersion/src/index.d.ts b/packages/typespec-ts/test/azureModularIntegration/generated/azure/versioning/previewVersion/src/index.d.ts new file mode 100644 index 0000000000..d1098964c8 --- /dev/null +++ b/packages/typespec-ts/test/azureModularIntegration/generated/azure/versioning/previewVersion/src/index.d.ts @@ -0,0 +1,46 @@ +import { ClientOptions } from '@azure-rest/core-client'; +import { OperationOptions } from '@azure-rest/core-client'; +import { Pipeline } from '@azure/core-rest-pipeline'; + +export declare interface GetWidgetOptionalParams extends OperationOptions { +} + +export declare enum KnownApiVersions { + V20240101 = "2024-01-01", + V20240601 = "2024-06-01", + V20241201Preview = "2024-12-01-preview" +} + +export declare interface ListWidgetsOptionalParams extends OperationOptions { + name?: string; + color?: string; +} + +export declare class PreviewVersionClient { + private _client; + readonly pipeline: Pipeline; + constructor(options?: PreviewVersionClientOptionalParams); + listWidgets(options?: ListWidgetsOptionalParams): Promise<{ + widgets: Widget[]; + }>; + updateWidgetColor(id: string, colorUpdate: UpdateWidgetColorRequest, options?: UpdateWidgetColorOptionalParams): Promise; + getWidget(id: string, options?: GetWidgetOptionalParams): Promise; +} + +export declare interface PreviewVersionClientOptionalParams extends ClientOptions { +} + +export declare interface UpdateWidgetColorOptionalParams extends OperationOptions { +} + +export declare interface UpdateWidgetColorRequest { + color: string; +} + +export declare interface Widget { + id: string; + name: string; + color?: string; +} + +export { } diff --git a/packages/typespec-ts/test/azureModularIntegration/generated/azure/versioning/previewVersion/tspconfig.yaml b/packages/typespec-ts/test/azureModularIntegration/generated/azure/versioning/previewVersion/tspconfig.yaml new file mode 100644 index 0000000000..b19b6b2367 --- /dev/null +++ b/packages/typespec-ts/test/azureModularIntegration/generated/azure/versioning/previewVersion/tspconfig.yaml @@ -0,0 +1,11 @@ +emit: + - "@azure-tools/typespec-ts" +options: + "@azure-tools/typespec-ts": + emitter-output-dir: "{project-root}" + add-credentials: false + azure-sdk-for-js: false + is-modular-library: true + package-details: + name: "@azure/versioning-preview" + version: "1.0.0" diff --git a/packages/typespec-ts/test/commands/cadl-ranch-list.js b/packages/typespec-ts/test/commands/cadl-ranch-list.js index c07ec48dfe..22bdb9833d 100644 --- a/packages/typespec-ts/test/commands/cadl-ranch-list.js +++ b/packages/typespec-ts/test/commands/cadl-ranch-list.js @@ -863,6 +863,10 @@ export const azureModularTsps = [ { outputPath: "azure/client-generator-core/hierarchy-building", inputPath: "azure/client-generator-core/hierarchy-building" + }, + { + outputPath: "azure/versioning/previewVersion", + inputPath: "azure/versioning/previewVersion" } // skip due to issue https://github.com/Azure/autorest.typescript/issues/3494 // {