diff --git a/.changeset/shaggy-wombats-hammer.md b/.changeset/shaggy-wombats-hammer.md new file mode 100644 index 000000000..91d7a7a7d --- /dev/null +++ b/.changeset/shaggy-wombats-hammer.md @@ -0,0 +1,5 @@ +--- +"@azure-tools/cadl-ranch-specs": patch +--- + +Tests ARM, test case for CheckNameAvailability operations diff --git a/packages/cadl-ranch-specs/cadl-ranch-summary.md b/packages/cadl-ranch-specs/cadl-ranch-summary.md index 5684ee236..1b7df8694 100644 --- a/packages/cadl-ranch-specs/cadl-ranch-summary.md +++ b/packages/cadl-ranch-specs/cadl-ranch-summary.md @@ -907,6 +907,58 @@ Expected response body: } ``` +### Azure_ResourceManager_OperationTemplates_CheckNameAvailability_checkGlobal + +- Endpoint: `post https://management.azure.com` + + Resource POST operation. + Expected path: /subscriptions/00000000-0000-0000-0000-000000000000/providers/Azure.ResourceManager.OperationTemplates/checkNameAvailability + Expected query parameter: api-version=2023-12-01-preview + Expected request body: + + ```json + { + "name": "checkName", + "type": "Microsoft.Web/site" + } + ``` + + Expected response body: + + ```json + { + "nameAvailable": false, + "reason": "AlreadyExists", + "message": "Hostname 'checkName' already exists. Please select a different name." + } + ``` + +### Azure_ResourceManager_OperationTemplates_CheckNameAvailability_checkLocal + +- Endpoint: `post https://management.azure.com` + + Resource POST operation. + Expected path: /subscriptions/00000000-0000-0000-0000-000000000000/providers/Azure.ResourceManager.OperationTemplates/locations/westus/checkNameAvailability + Expected query parameter: api-version=2023-12-01-preview + Expected request body: + + ```json + { + "name": "checkName", + "type": "Microsoft.Web/site" + } + ``` + + Expected response body: + + ```json + { + "nameAvailable": false, + "reason": "AlreadyExists", + "message": "Hostname 'checkName' already exists. Please select a different name." + } + ``` + ### Azure_ResourceManager_Resources_Nested_createOrReplace - Endpoint: `put https://management.azure.com` diff --git a/packages/cadl-ranch-specs/http/azure/resource-manager/operation-templates/check-name-availability.tsp b/packages/cadl-ranch-specs/http/azure/resource-manager/operation-templates/check-name-availability.tsp new file mode 100644 index 000000000..9dd5a8e0a --- /dev/null +++ b/packages/cadl-ranch-specs/http/azure/resource-manager/operation-templates/check-name-availability.tsp @@ -0,0 +1,60 @@ +import "@typespec/http"; +import "@typespec/rest"; +import "@azure-tools/typespec-azure-core"; +import "@azure-tools/typespec-azure-resource-manager"; + +using TypeSpec.Http; +using TypeSpec.Rest; +using Azure.Core; +using Azure.ResourceManager; +using TypeSpec.OpenAPI; + +namespace Azure.ResourceManager.OperationTemplates; + +interface CheckNameAvailability { + @scenario + @scenarioDoc(""" + Resource POST operation. + Expected path: /subscriptions/00000000-0000-0000-0000-000000000000/providers/Azure.ResourceManager.OperationTemplates/checkNameAvailability + Expected query parameter: api-version=2023-12-01-preview + Expected request body: + ```json + { + "name": "checkName", + "type": "Microsoft.Web/site" + } + ``` + Expected response body: + ```json + { + "nameAvailable": false, + "reason": "AlreadyExists", + "message": "Hostname 'checkName' already exists. Please select a different name." + } + ``` + """) + checkGlobal is checkGlobalNameAvailability; + + @scenario + @scenarioDoc(""" + Resource POST operation. + Expected path: /subscriptions/00000000-0000-0000-0000-000000000000/providers/Azure.ResourceManager.OperationTemplates/locations/westus/checkNameAvailability + Expected query parameter: api-version=2023-12-01-preview + Expected request body: + ```json + { + "name": "checkName", + "type": "Microsoft.Web/site", + } + ``` + Expected response body: + ```json + { + "nameAvailable": false, + "reason": "AlreadyExists", + "message": "Hostname 'checkName' already exists. Please select a different name." + } + ``` + """) + checkLocal is checkLocalNameAvailability; +} diff --git a/packages/cadl-ranch-specs/http/azure/resource-manager/operation-templates/main.tsp b/packages/cadl-ranch-specs/http/azure/resource-manager/operation-templates/main.tsp new file mode 100644 index 000000000..66d3e7b27 --- /dev/null +++ b/packages/cadl-ranch-specs/http/azure/resource-manager/operation-templates/main.tsp @@ -0,0 +1,30 @@ +import "@azure-tools/cadl-ranch-expect"; +import "@typespec/http"; +import "@typespec/rest"; +import "@typespec/versioning"; +import "@azure-tools/typespec-azure-core"; +import "@azure-tools/typespec-azure-resource-manager"; +import "@azure-tools/typespec-client-generator-core"; +import "./check-name-availability.tsp"; + +using TypeSpec.Http; +using TypeSpec.Rest; +using TypeSpec.Versioning; +using Azure.Core; +using Azure.ResourceManager; +using TypeSpec.OpenAPI; + +@armProviderNamespace +@service +@versioned(Versions) +@doc("Arm Resource Provider management API.") +namespace Azure.ResourceManager.OperationTemplates; + +@doc("Azure API versions.") +enum Versions { + @armCommonTypesVersion(CommonTypes.Versions.v5) + @useDependency(Azure.Core.Versions.v1_0_Preview_2) + @useDependency(Azure.ResourceManager.Versions.v1_0_Preview_1) + @doc("Preview API version 2023-12-01-preview.") + v2023_12_01_preview: "2023-12-01-preview", +} diff --git a/packages/cadl-ranch-specs/http/azure/resource-manager/operation-templates/mockapi.ts b/packages/cadl-ranch-specs/http/azure/resource-manager/operation-templates/mockapi.ts new file mode 100644 index 000000000..166efba15 --- /dev/null +++ b/packages/cadl-ranch-specs/http/azure/resource-manager/operation-templates/mockapi.ts @@ -0,0 +1,60 @@ +import { passOnSuccess, json } from "@azure-tools/cadl-ranch-api"; +import { ScenarioMockApi } from "@azure-tools/cadl-ranch-api"; + +export const Scenarios: Record = {}; + +const SUBSCRIPTION_ID_EXPECTED = "00000000-0000-0000-0000-000000000000"; +const validCheckNameAvailability = { + nameAvailable: true, + reason: "AlreadyExists", + message: "", +}; + +// Check Global Name Availability +Scenarios.Azure_ResourceManager_OperationTemplates_CheckNameAvailability_checkGlobal = passOnSuccess({ + uri: "/subscriptions/:subscriptionId/providers/Azure.ResourceManager.OperationTemplates/checkNameAvailability", + method: "post", + request: { + params: { + "subscriptionId": SUBSCRIPTION_ID_EXPECTED, + "api-version": "2023-12-01-preview", + }, + body: { + name: "checkName", + type: "Microsoft.Web/site", + }, + }, + response: { + status: 200, + body: json({ + ...validCheckNameAvailability, + message: "This is a global name availability check message.", + }), + }, + kind: "MockApiDefinition", +}); + +// Check Local Name Availability +Scenarios.Azure_ResourceManager_OperationTemplates_CheckNameAvailability_checkLocal = passOnSuccess({ + uri: "/subscriptions/:subscriptionId/providers/Azure.ResourceManager.OperationTemplates/locations/:location/checkNameAvailability", + method: "post", + request: { + params: { + "subscriptionId": SUBSCRIPTION_ID_EXPECTED, + "location": "westus", + "api-version": "2023-12-01-preview", + }, + body: { + name: "checkName", + type: "Microsoft.Web/site", + }, + }, + response: { + status: 200, + body: json({ + ...validCheckNameAvailability, + message: "This is a local name availability check message.", + }), + }, + kind: "MockApiDefinition", +});