From e24823661f5fb0839b1c1142e7515afd6a0caa70 Mon Sep 17 00:00:00 2001 From: ray chen Date: Fri, 30 May 2025 17:13:31 +0000 Subject: [PATCH 1/2] enabled required for go and python data plane cases --- .../src/command-helpers.ts | 24 ++- eng/tools/spec-gen-sdk-runner/src/types.ts | 44 ++++- .../__snapshots__/commands.test.ts.snap | 0 .../test/{src => }/command-helpers.test.ts | 170 ++++++++++++------ .../test/{src => }/commands.test.ts | 16 +- .../test/{src => }/log.test.ts | 2 +- .../test/{src => }/spec-helpers.test.ts | 12 +- 7 files changed, 193 insertions(+), 75 deletions(-) rename eng/tools/spec-gen-sdk-runner/test/{src => }/__snapshots__/commands.test.ts.snap (100%) rename eng/tools/spec-gen-sdk-runner/test/{src => }/command-helpers.test.ts (81%) rename eng/tools/spec-gen-sdk-runner/test/{src => }/commands.test.ts (98%) rename eng/tools/spec-gen-sdk-runner/test/{src => }/log.test.ts (99%) rename eng/tools/spec-gen-sdk-runner/test/{src => }/spec-helpers.test.ts (98%) diff --git a/eng/tools/spec-gen-sdk-runner/src/command-helpers.ts b/eng/tools/spec-gen-sdk-runner/src/command-helpers.ts index 4b924ce3fc02..16cf7f94694b 100644 --- a/eng/tools/spec-gen-sdk-runner/src/command-helpers.ts +++ b/eng/tools/spec-gen-sdk-runner/src/command-helpers.ts @@ -305,13 +305,16 @@ export function generateArtifact( if (!fs.existsSync(specGenSdkArtifactAbsoluteFolder)) { fs.mkdirSync(specGenSdkArtifactAbsoluteFolder, { recursive: true }); } + const isSpecGenSdkCheckRequired = getRequiredSettingValue( + hasManagementPlaneSpecs, + commandInput.sdkLanguage as SdkName, + ); // Write artifact const artifactInfo: SpecGenSdkArtifactInfo = { language: commandInput.sdkLanguage, result, labelAction: hasBreakingChange, - isSpecGenSdkCheckRequired: - hasManagementPlaneSpecs && SpecGenSdkRequiredSettings[commandInput.sdkLanguage as SdkName], + isSpecGenSdkCheckRequired, apiViewRequestData: apiViewRequestData, }; fs.writeFileSync( @@ -348,3 +351,20 @@ export function getServiceFolderPath(specConfigPath: string): string { } return specConfigPath; } + +/** + * Get the required setting value for the SDK check based on the spec PR types. + * @param hasManagementPlaneSpecs - A flag indicating whether there are management plane specs. + * @param sdkName - The SDK name. + * @returns boolean indicating whether the SDK check is required. + */ +export function getRequiredSettingValue( + hasManagementPlaneSpecs: boolean, + sdkName: SdkName, +): boolean { + if (hasManagementPlaneSpecs) { + return SpecGenSdkRequiredSettings[sdkName].managementPlane; + } else { + return SpecGenSdkRequiredSettings[sdkName].dataPlane; + } +} diff --git a/eng/tools/spec-gen-sdk-runner/src/types.ts b/eng/tools/spec-gen-sdk-runner/src/types.ts index dc8841e8596f..9d1689a9a101 100644 --- a/eng/tools/spec-gen-sdk-runner/src/types.ts +++ b/eng/tools/spec-gen-sdk-runner/src/types.ts @@ -46,7 +46,7 @@ export interface SpecGenSdkArtifactInfo { result: string; labelAction?: boolean; isSpecGenSdkCheckRequired: boolean; - apiViewRequestData: APIViewRequestData []; + apiViewRequestData: APIViewRequestData[]; } /** @@ -59,13 +59,43 @@ export type SdkName = | "azure-sdk-for-net" | "azure-sdk-for-python"; +/** + * Represents the plane types for SDK generation settings + */ +export interface PlaneTypeSettings { + /** + * Whether spec-gen-sdk check is required for data plane + */ + dataPlane: boolean; + + /** + * Whether spec-gen-sdk check is required for management plane + */ + managementPlane: boolean; +} + /** * Required check settings for all languages. */ -export const SpecGenSdkRequiredSettings: Record = { - "azure-sdk-for-go": true, - "azure-sdk-for-java": true, - "azure-sdk-for-js": false, - "azure-sdk-for-net": false, - "azure-sdk-for-python": true, +export const SpecGenSdkRequiredSettings: Record = { + "azure-sdk-for-go": { + dataPlane: true, + managementPlane: true, + }, + "azure-sdk-for-java": { + dataPlane: false, + managementPlane: true, + }, + "azure-sdk-for-js": { + dataPlane: false, + managementPlane: false, + }, + "azure-sdk-for-net": { + dataPlane: false, + managementPlane: false, + }, + "azure-sdk-for-python": { + dataPlane: true, + managementPlane: true, + }, }; diff --git a/eng/tools/spec-gen-sdk-runner/test/src/__snapshots__/commands.test.ts.snap b/eng/tools/spec-gen-sdk-runner/test/__snapshots__/commands.test.ts.snap similarity index 100% rename from eng/tools/spec-gen-sdk-runner/test/src/__snapshots__/commands.test.ts.snap rename to eng/tools/spec-gen-sdk-runner/test/__snapshots__/commands.test.ts.snap diff --git a/eng/tools/spec-gen-sdk-runner/test/src/command-helpers.test.ts b/eng/tools/spec-gen-sdk-runner/test/command-helpers.test.ts similarity index 81% rename from eng/tools/spec-gen-sdk-runner/test/src/command-helpers.test.ts rename to eng/tools/spec-gen-sdk-runner/test/command-helpers.test.ts index e95b6e8bf534..15a44a8eb6b8 100644 --- a/eng/tools/spec-gen-sdk-runner/test/src/command-helpers.test.ts +++ b/eng/tools/spec-gen-sdk-runner/test/command-helpers.test.ts @@ -1,21 +1,22 @@ import { describe, test, expect, vi, beforeEach } from "vitest"; -import * as log from "../../src/log.js"; -import * as utils from "../../src/utils.js"; -import * as specHelpers from "../../src/spec-helpers.js"; +import * as log from "../src/log.js"; +import * as utils from "../src/utils.js"; +import * as specHelpers from "../src/spec-helpers.js"; import { fileURLToPath } from "node:url"; import fs from "node:fs"; import path from "node:path"; import { getBreakingChangeInfo, + getRequiredSettingValue, getSpecPaths, logIssuesToPipeline, parseArguments, prepareSpecGenSdkCommand, generateArtifact, setPipelineVariables, -} from "../../src/command-helpers.js"; -import { LogLevel } from "../../src/log.js"; -import { APIViewRequestData } from "../../src/types.js"; +} from "../src/command-helpers.js"; +import { LogLevel } from "../src/log.js"; +import { APIViewRequestData } from "../src/types.js"; // Get the absolute path to the repo root const currentFilePath = fileURLToPath(import.meta.url); @@ -39,10 +40,7 @@ describe("commands.ts", () => { "Configurations: 'specification/contosowidgetmanager/resource-manager/readme.md', and CommitSHA: 'commitsha', in SpecRepo: 'https://github.com/Azure/azure-rest-api-specs'", ); - expect(log.setVsoVariable).toHaveBeenCalledWith( - "StagedArtifactsFolder", - "path-to-artifact", - ); + expect(log.setVsoVariable).toHaveBeenCalledWith("StagedArtifactsFolder", "path-to-artifact"); expect(log.setVsoVariable).toHaveBeenCalledWith( "PrBranch", "sdkauto/sdk-security/keyvault/azcertificates", @@ -61,15 +59,10 @@ describe("commands.ts", () => { // mock implementation intentionally left blank }); - setPipelineVariables( - "path-to-artifact" - ); + setPipelineVariables("path-to-artifact"); expect(log.setVsoVariable).toHaveBeenCalledOnce(); - expect(log.setVsoVariable).toHaveBeenCalledWith( - "StagedArtifactsFolder", - "path-to-artifact", - ); + expect(log.setVsoVariable).toHaveBeenCalledWith("StagedArtifactsFolder", "path-to-artifact"); }); }); @@ -180,14 +173,18 @@ describe("commands.ts", () => { { tspconfigPath: "typespec1", readmePath: undefined }, { tspconfigPath: "typespec2", readmePath: undefined }, { tspconfigPath: undefined, readmePath: "readme1" }, - { tspconfigPath: undefined, readmePath: "readme2" } + { tspconfigPath: undefined, readmePath: "readme2" }, ]); const result = getSpecPaths("all-specs", "/spec/path"); - + expect(utils.getAllTypeSpecPaths).toHaveBeenCalledWith("/spec/path"); expect(utils.findReadmeFiles).toHaveBeenCalledWith(path.join("/spec/path", "specification")); - expect(specHelpers.groupSpecConfigPaths).toHaveBeenCalledWith(["typespec1", "typespec2"], ["readme1", "readme2"], false); + expect(specHelpers.groupSpecConfigPaths).toHaveBeenCalledWith( + ["typespec1", "typespec2"], + ["readme1", "readme2"], + false, + ); expect(result).toHaveLength(4); }); @@ -195,13 +192,17 @@ describe("commands.ts", () => { vi.spyOn(utils, "findReadmeFiles").mockReturnValue(["readme1", "readme2"]); vi.spyOn(specHelpers, "groupSpecConfigPaths").mockReturnValue([ { tspconfigPath: undefined, readmePath: "readme1" }, - { tspconfigPath: undefined, readmePath: "readme2" } + { tspconfigPath: undefined, readmePath: "readme2" }, ]); const result = getSpecPaths("all-openapis", "/spec/path"); - + expect(utils.findReadmeFiles).toHaveBeenCalledWith(path.join("/spec/path", "specification")); - expect(specHelpers.groupSpecConfigPaths).toHaveBeenCalledWith([], ["readme1", "readme2"], false); + expect(specHelpers.groupSpecConfigPaths).toHaveBeenCalledWith( + [], + ["readme1", "readme2"], + false, + ); expect(result).toHaveLength(2); }); @@ -212,70 +213,108 @@ describe("commands.ts", () => { { tspconfigPath: "typespec1", readmePath: undefined }, { tspconfigPath: "typespec2", readmePath: undefined }, { tspconfigPath: undefined, readmePath: "readme1" }, - { tspconfigPath: undefined, readmePath: "readme2" } + { tspconfigPath: undefined, readmePath: "readme2" }, ]); const result = getSpecPaths("all-typespecs", "/spec/path"); - + expect(utils.getAllTypeSpecPaths).toHaveBeenCalledWith("/spec/path"); expect(utils.findReadmeFiles).toHaveBeenCalledWith(path.join("/spec/path", "specification")); - expect(specHelpers.groupSpecConfigPaths).toHaveBeenCalledWith(["typespec1", "typespec2"], ["readme1", "readme2"], true); + expect(specHelpers.groupSpecConfigPaths).toHaveBeenCalledWith( + ["typespec1", "typespec2"], + ["readme1", "readme2"], + true, + ); expect(result).toHaveLength(4); }); test("should return sample TypeSpec paths for 'sample-typespecs' batch type", () => { vi.spyOn(utils, "getAllTypeSpecPaths").mockReturnValue(["typespec1", "typespec2"]); vi.spyOn(specHelpers, "groupSpecConfigPaths").mockReturnValue([ - { tspconfigPath: "specification/contosowidgetmanager/Contoso.Management/tspconfig.yaml", readmePath: undefined }, - { tspconfigPath: "specification/contosowidgetmanager/Contoso.WidgetManager/tspconfig.yaml", readmePath: undefined } + { + tspconfigPath: "specification/contosowidgetmanager/Contoso.Management/tspconfig.yaml", + readmePath: undefined, + }, + { + tspconfigPath: "specification/contosowidgetmanager/Contoso.WidgetManager/tspconfig.yaml", + readmePath: undefined, + }, ]); const result = getSpecPaths("sample-typespecs", "/spec/path"); - - expect(specHelpers.groupSpecConfigPaths).toHaveBeenCalledWith([ - "specification/contosowidgetmanager/Contoso.Management/tspconfig.yaml", - "specification/contosowidgetmanager/Contoso.WidgetManager/tspconfig.yaml" - ], [], false); + + expect(specHelpers.groupSpecConfigPaths).toHaveBeenCalledWith( + [ + "specification/contosowidgetmanager/Contoso.Management/tspconfig.yaml", + "specification/contosowidgetmanager/Contoso.WidgetManager/tspconfig.yaml", + ], + [], + false, + ); expect(result).toHaveLength(2); }); - + test("should return management plane TypeSpec and resource-manager readme paths for 'all-mgmtplane-typespecs'", () => { const managementTypespecs = ["typespec1.Management", "typespec2.Management"]; const resourceManagerReadmes = ["resource-manager/readme-rm1", "resource-manager/readme-rm2"]; - - vi.spyOn(utils, "getAllTypeSpecPaths").mockReturnValue([...managementTypespecs, "typespec3", "typespec4"]); - vi.spyOn(utils, "findReadmeFiles").mockReturnValue([...resourceManagerReadmes, "readme-dp1", "readme-dp2"]); + + vi.spyOn(utils, "getAllTypeSpecPaths").mockReturnValue([ + ...managementTypespecs, + "typespec3", + "typespec4", + ]); + vi.spyOn(utils, "findReadmeFiles").mockReturnValue([ + ...resourceManagerReadmes, + "readme-dp1", + "readme-dp2", + ]); vi.spyOn(specHelpers, "groupSpecConfigPaths").mockReturnValue([ { tspconfigPath: "typespec1.Management", readmePath: "resource-manager/readme-rm1" }, { tspconfigPath: "typespec2.Management", readmePath: "resource-manager/readme-rm2" }, ]); const result = getSpecPaths("all-mgmtplane-typespecs", "/spec/path"); - + expect(utils.getAllTypeSpecPaths).toHaveBeenCalledWith("/spec/path"); expect(utils.findReadmeFiles).toHaveBeenCalledWith(path.join("/spec/path", "specification")); - expect(specHelpers.groupSpecConfigPaths).toHaveBeenCalledWith(managementTypespecs, resourceManagerReadmes, true); + expect(specHelpers.groupSpecConfigPaths).toHaveBeenCalledWith( + managementTypespecs, + resourceManagerReadmes, + true, + ); expect(result).toHaveLength(2); }); - + test("should return data plane TypeSpec and data-plane readme paths for 'all-dataplane-typespecs'", () => { const dataPlaneTypespecs = ["typespec3", "typespec4"]; const dataPlaneReadmes = ["data-plane/readme-dp1", "data-plane/readme-dp2"]; - - vi.spyOn(utils, "getAllTypeSpecPaths").mockReturnValue([...dataPlaneTypespecs, "typespec1.Management", "typespec2.Management"]); - vi.spyOn(utils, "findReadmeFiles").mockReturnValue([...dataPlaneReadmes, "readme-rm1", "readme-rm2"]); + + vi.spyOn(utils, "getAllTypeSpecPaths").mockReturnValue([ + ...dataPlaneTypespecs, + "typespec1.Management", + "typespec2.Management", + ]); + vi.spyOn(utils, "findReadmeFiles").mockReturnValue([ + ...dataPlaneReadmes, + "readme-rm1", + "readme-rm2", + ]); vi.spyOn(specHelpers, "groupSpecConfigPaths").mockReturnValue([ { tspconfigPath: "typespec3", readmePath: undefined }, { tspconfigPath: "typespec4", readmePath: undefined }, { tspconfigPath: undefined, readmePath: "data-plane/readme-dp1" }, - { tspconfigPath: undefined, readmePath: "data-plane/readme-dp2" } + { tspconfigPath: undefined, readmePath: "data-plane/readme-dp2" }, ]); const result = getSpecPaths("all-dataplane-typespecs", "/spec/path"); - + expect(utils.getAllTypeSpecPaths).toHaveBeenCalledWith("/spec/path"); expect(utils.findReadmeFiles).toHaveBeenCalledWith(path.join("/spec/path", "specification")); - expect(specHelpers.groupSpecConfigPaths).toHaveBeenCalledWith(dataPlaneTypespecs, dataPlaneReadmes, true); + expect(specHelpers.groupSpecConfigPaths).toHaveBeenCalledWith( + dataPlaneTypespecs, + dataPlaneReadmes, + true, + ); expect(result).toHaveLength(4); }); }); @@ -373,9 +412,12 @@ describe("commands.ts", () => { // mock implementation intentionally left blank }); + // No need to mock getRequiredSettingValue for this test + // We'll just verify the output structure instead + const mockCommandInput = { workingFolder: "/working/folder", - sdkLanguage: "javascript", + sdkLanguage: "azure-sdk-for-js", runMode: "", localSpecRepoPath: "", localSdkRepoPath: "", @@ -388,7 +430,7 @@ describe("commands.ts", () => { const mockhasBreakingChange = false; const mockhasManagementPlaneSpecs = false; const mockStagedArtifactsFolder = "mockStagedArtifactsFolder"; - const mockApiViewRequestData: APIViewRequestData [] = []; + const mockApiViewRequestData: APIViewRequestData[] = []; const result = generateArtifact( mockCommandInput, mockResult, @@ -396,7 +438,7 @@ describe("commands.ts", () => { mockhasBreakingChange, mockhasManagementPlaneSpecs, mockStagedArtifactsFolder, - mockApiViewRequestData + mockApiViewRequestData, ); const breakingChangeLabelArtifactPath = path.normalize( @@ -407,15 +449,17 @@ describe("commands.ts", () => { expect(fs.mkdirSync).toHaveBeenCalledWith(breakingChangeLabelArtifactPath, { recursive: true, }); + // Since we're not mocking getRequiredSettingValue properly in this test, + // we'll just verify the output contains the expected isSpecGenSdkCheckRequired value expect(fs.writeFileSync).toHaveBeenCalledWith( path.join(breakingChangeLabelArtifactPath, "spec-gen-sdk-artifact.json"), JSON.stringify( { - language: "javascript", + language: "azure-sdk-for-js", result: "succeeded", labelAction: false, isSpecGenSdkCheckRequired: false, - apiViewRequestData: [] + apiViewRequestData: [], }, undefined, 2, @@ -466,7 +510,7 @@ describe("commands.ts", () => { const mockhasBreakingChange = false; const mockhasManagementPlaneSpecs = false; const mockStagedArtifactsFolder = ""; - const mockApiViewRequestData: APIViewRequestData [] = []; + const mockApiViewRequestData: APIViewRequestData[] = []; const result = generateArtifact( mockCommandInput, mockResult, @@ -481,4 +525,26 @@ describe("commands.ts", () => { expect(log.logMessage).toHaveBeenCalledWith("ending group logging", LogLevel.EndGroup); }); }); + + describe("getRequiredSettingValue", () => { + test("should return managementPlane setting when hasManagementPlaneSpecs is true", () => { + const result = getRequiredSettingValue(true, "azure-sdk-for-go"); + // Based on the constants in types.ts, Go SDK requires check for management plane + expect(result).toBe(true); + + const result2 = getRequiredSettingValue(true, "azure-sdk-for-js"); + // Based on the constants in types.ts, JS SDK does not require check for management plane + expect(result2).toBe(false); + }); + + test("should return dataPlane setting when hasManagementPlaneSpecs is false", () => { + const result = getRequiredSettingValue(false, "azure-sdk-for-go"); + // Based on the constants in types.ts, Go SDK requires check for data plane + expect(result).toBe(true); + + const result2 = getRequiredSettingValue(false, "azure-sdk-for-js"); + // Based on the constants in types.ts, JS SDK does not require check for data plane + expect(result2).toBe(false); + }); + }); }); diff --git a/eng/tools/spec-gen-sdk-runner/test/src/commands.test.ts b/eng/tools/spec-gen-sdk-runner/test/commands.test.ts similarity index 98% rename from eng/tools/spec-gen-sdk-runner/test/src/commands.test.ts rename to eng/tools/spec-gen-sdk-runner/test/commands.test.ts index 1851cb890d32..2ccf14432398 100644 --- a/eng/tools/spec-gen-sdk-runner/test/src/commands.test.ts +++ b/eng/tools/spec-gen-sdk-runner/test/commands.test.ts @@ -1,16 +1,16 @@ import { describe, test, expect, vi, beforeEach, type Mock } from "vitest"; -import * as utils from "../../src/utils.js"; +import * as utils from "../src/utils.js"; import { generateSdkForBatchSpecs, generateSdkForSingleSpec, generateSdkForSpecPr, -} from "../../src/commands.js"; -import * as commandHelpers from "../../src/command-helpers.js"; -import * as log from "../../src/log.js"; -import * as changeFiles from "../../src/spec-helpers.js"; +} from "../src/commands.js"; +import * as commandHelpers from "../src/command-helpers.js"; +import * as log from "../src/log.js"; +import * as changeFiles from "../src/spec-helpers.js"; import fs from "node:fs"; import path from "node:path"; -import { LogLevel } from "../../src/log.js"; +import { LogLevel } from "../src/log.js"; function getNormalizedFsCalls(mockFn: Mock): unknown[][] { return mockFn.mock.calls.map((args: unknown[]) => { @@ -219,7 +219,9 @@ describe("generateSdkForSpecPr", () => { }); const statusCode = await generateSdkForSpecPr(); - const serviceFolderPath = commandHelpers.getServiceFolderPath(mockChangedSpecs[0].typespecProject); + const serviceFolderPath = commandHelpers.getServiceFolderPath( + mockChangedSpecs[0].typespecProject, + ); expect(statusCode).toBe(0); expect(log.logMessage).toHaveBeenCalledWith( `Generating SDK from ${serviceFolderPath}`, diff --git a/eng/tools/spec-gen-sdk-runner/test/src/log.test.ts b/eng/tools/spec-gen-sdk-runner/test/log.test.ts similarity index 99% rename from eng/tools/spec-gen-sdk-runner/test/src/log.test.ts rename to eng/tools/spec-gen-sdk-runner/test/log.test.ts index b26d2992756d..60c3fb569262 100644 --- a/eng/tools/spec-gen-sdk-runner/test/src/log.test.ts +++ b/eng/tools/spec-gen-sdk-runner/test/log.test.ts @@ -6,7 +6,7 @@ import { vsoAddAttachment, vsoLogIssue, setVsoVariable, -} from "../../src/log.js"; +} from "../src/log.js"; const logSpy = vi.spyOn(console, "log").mockImplementation(() => { // mock implementation intentionally left blank diff --git a/eng/tools/spec-gen-sdk-runner/test/src/spec-helpers.test.ts b/eng/tools/spec-gen-sdk-runner/test/spec-helpers.test.ts similarity index 98% rename from eng/tools/spec-gen-sdk-runner/test/src/spec-helpers.test.ts rename to eng/tools/spec-gen-sdk-runner/test/spec-helpers.test.ts index c2d3253b25fc..9a419aff3680 100644 --- a/eng/tools/spec-gen-sdk-runner/test/src/spec-helpers.test.ts +++ b/eng/tools/spec-gen-sdk-runner/test/spec-helpers.test.ts @@ -1,6 +1,6 @@ import { describe, test, expect, vi, beforeEach } from "vitest"; -import { detectChangedSpecConfigFiles, groupSpecConfigPaths } from "../../src/spec-helpers.js"; -import { SpecGenSdkCmdInput } from "../../src/types.js"; +import { detectChangedSpecConfigFiles, groupSpecConfigPaths } from "../src/spec-helpers.js"; +import { SpecGenSdkCmdInput } from "../src/types.js"; import { fileURLToPath } from "node:url"; import path from "node:path"; import { @@ -8,10 +8,10 @@ import { type SpecConfigs, normalizePath, getChangedFiles, -} from "../../src/utils.js"; +} from "../src/utils.js"; -vi.mock("../../src/utils.js", async () => { - const actual = await vi.importActual("../../src/utils.js"); +vi.mock("../src/utils.js", async () => { + const actual = await vi.importActual("../src/utils.js"); return { ...actual, @@ -43,7 +43,7 @@ function normalizeSpecConfigsArray(configsArray: SpecConfigs[]): SpecConfigs[] { describe("detectChangedSpecConfigFiles", () => { const currentFilePath = fileURLToPath(import.meta.url); - const repoRoot = path.resolve(path.dirname(currentFilePath), "../fixtures/"); + const repoRoot = path.resolve(path.dirname(currentFilePath), "fixtures/"); const mockCommandInput: SpecGenSdkCmdInput = { localSpecRepoPath: repoRoot, From fe25dcbbc86bd47e5cbfbdedf83f54e2b8bdfe4d Mon Sep 17 00:00:00 2001 From: Ray Chen Date: Fri, 30 May 2025 10:15:31 -0700 Subject: [PATCH 2/2] test data plane case --- .../contosowidgetmanager/Contoso.WidgetManager/main.tsp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/contosowidgetmanager/Contoso.WidgetManager/main.tsp b/specification/contosowidgetmanager/Contoso.WidgetManager/main.tsp index 3caf321e31e4..22654d8b9f2a 100644 --- a/specification/contosowidgetmanager/Contoso.WidgetManager/main.tsp +++ b/specification/contosowidgetmanager/Contoso.WidgetManager/main.tsp @@ -10,7 +10,7 @@ using TypeSpec.Versioning; using Azure.Core; @useAuth(AadOauth2Auth<["https://contoso.azure.com/.default"]>) -@service(#{ title: "Contoso Widget Manager" }) +@service(#{ title: "Contoso Widget Manager test" }) @versioned(Contoso.WidgetManager.Versions) namespace Azure.Contoso.WidgetManager;