diff --git a/.chronus/changes/copilot-fix-3106-2025-5-25-11-41-49.md b/.chronus/changes/copilot-fix-3106-2025-5-25-11-41-49.md new file mode 100644 index 00000000000..6fb13bc6403 --- /dev/null +++ b/.chronus/changes/copilot-fix-3106-2025-5-25-11-41-49.md @@ -0,0 +1,7 @@ +--- +changeKind: internal +packages: + - "@azure-tools/typespec-python" +--- + +Add test cases \ No newline at end of file diff --git a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_arm_commonproperties_async.py b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_arm_commonproperties_async.py index f06fe71a19b..f5a62b6a868 100644 --- a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_arm_commonproperties_async.py +++ b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_arm_commonproperties_async.py @@ -6,6 +6,7 @@ import pytest from azure.resourcemanager.commonproperties.aio import CommonPropertiesClient from azure.resourcemanager.commonproperties import models +from azure.core import exceptions SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000" RESOURCE_GROUP_NAME = "test-rg" @@ -61,3 +62,33 @@ async def test_managed_identity_update_with_user_assigned_and_system_assigned(cl assert result.location == "eastus" assert result.identity.type == "SystemAssigned,UserAssigned" assert result.properties.provisioning_state == "Succeeded" + + +@pytest.mark.asyncio +async def test_error_get_for_predefined_error(client): + try: + await client.error.get_for_predefined_error( + resource_group_name=RESOURCE_GROUP_NAME, + confidential_resource_name="confidential", + ) + except exceptions.ResourceNotFoundError as e: + assert e.status_code == 404 + assert ( + e.error.message + == "The Resource 'Azure.ResourceManager.CommonProperties/confidentialResources/confidential' under resource group 'test-rg' was not found." + ) + + +@pytest.mark.asyncio +async def test_error_create_for_user_defined_error(client): + try: + await client.error.create_for_user_defined_error( + resource_group_name=RESOURCE_GROUP_NAME, + confidential_resource_name="confidential", + resource=models.ConfidentialResource( + location="eastus", properties=models.ConfidentialResourceProperties(username="00") + ), + ) + except exceptions.HttpResponseError as e: + assert e.status_code == 400 + assert e.error.message == "Username should not contain only numbers." diff --git a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_arm_largeheader_async.py b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_arm_largeheader_async.py new file mode 100644 index 00000000000..deac2360dbc --- /dev/null +++ b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_arm_largeheader_async.py @@ -0,0 +1,30 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import pytest +from azure.resourcemanager.largeheader.aio import LargeHeaderClient +from azure.resourcemanager.largeheader import models + +SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000" +RESOURCE_GROUP_NAME = "test-rg" + + +@pytest.fixture +async def client(credential, authentication_policy): + async with LargeHeaderClient( + credential, SUBSCRIPTION_ID, "http://localhost:3000", authentication_policy=authentication_policy + ) as client: + yield client + + +@pytest.mark.asyncio +async def test_large_headers_begin_two6_k(client: LargeHeaderClient): + result = await ( + await client.large_headers.begin_two6_k( + resource_group_name=RESOURCE_GROUP_NAME, + large_header_name="header1", + ) + ).result() + assert result == models.CancelResult(succeeded=True) diff --git a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_arm_nonresource_async.py b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_arm_nonresource_async.py new file mode 100644 index 00000000000..7cbbc763f33 --- /dev/null +++ b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_arm_nonresource_async.py @@ -0,0 +1,36 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import pytest +from azure.resourcemanager.nonresource.aio import NonResourceClient +from azure.resourcemanager.nonresource import models + +SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000" +RESOURCE_GROUP_NAME = "test-rg" + + +@pytest.fixture +async def client(credential, authentication_policy): + async with NonResourceClient( + credential, SUBSCRIPTION_ID, "http://localhost:3000", authentication_policy=authentication_policy + ) as client: + yield client + + +@pytest.mark.asyncio +async def test_non_resource_create(client: NonResourceClient): + result = await client.non_resource_operations.create( + location="eastus", parameter="hello", body=models.NonResource(id="id", name="hello", type="nonResource") + ) + assert result == models.NonResource(id="id", name="hello", type="nonResource") + + +@pytest.mark.asyncio +async def test_non_resource_get(client: NonResourceClient): + result = await client.non_resource_operations.get( + location="eastus", + parameter="hello", + ) + assert result == models.NonResource(id="id", name="hello", type="nonResource") diff --git a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_client_initialization_async.py b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_client_initialization_async.py index 2ae2c816ab9..abaf9179c90 100644 --- a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_client_initialization_async.py +++ b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_client_initialization_async.py @@ -10,6 +10,7 @@ MixedParamsClient, PathParamClient, ParamAliasClient, + ParentClient, ) from specs.azure.clientgenerator.core.clientinitialization.models import Input @@ -48,3 +49,11 @@ async def test_param_alias_client(): async with ParamAliasClient("sample-blob") as client: await client.with_aliased_name() await client.with_original_name() + + +# @pytest.mark.asyncio +# async def test_parent_child_client(): +# async with ParentClient() as client: +# await client.child_client.with_query() +# await client.child_client.get_standalone() +# await client.child_client.delete_standalone() diff --git a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_deserialize_empty_string_as_null_async.py b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_deserialize_empty_string_as_null_async.py new file mode 100644 index 00000000000..fbb4349f5a2 --- /dev/null +++ b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_deserialize_empty_string_as_null_async.py @@ -0,0 +1,20 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import pytest +from specs.azure.clientgenerator.core.emptystring.aio import DeserializeEmptyStringAsNullClient +from specs.azure.clientgenerator.core.emptystring import models + + +@pytest.fixture +async def client(): + async with DeserializeEmptyStringAsNullClient() as client: + yield client + + +@pytest.mark.asyncio +async def test_get(client: DeserializeEmptyStringAsNullClient): + result = await client.get() + assert result == models.ResponseModel(sample_url="") diff --git a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_usage_async.py b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_usage_async.py index af1b31e92ff..90b4389a421 100644 --- a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_usage_async.py +++ b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_usage_async.py @@ -29,3 +29,10 @@ async def test_model_usage(client: UsageClient): assert models.RoundTripModel( result=models.ResultModel(name="Madge") ) == await client.model_in_operation.model_in_read_only_property(body=models.RoundTripModel()) + + +# @pytest.mark.asyncio +# async def test_orphan_model_serializable(client: UsageClient): +# await client.model_in_operation.orphan_model_serializable( +# body=models.OrphanModel(model_name="name", description="desc") +# ) diff --git a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_encode_duration_async.py b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_encode_duration_async.py new file mode 100644 index 00000000000..8a23b94955e --- /dev/null +++ b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_encode_duration_async.py @@ -0,0 +1,19 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import pytest +from specs.azure.encode.duration.aio import DurationClient +from specs.azure.encode.duration import models + + +@pytest.fixture +async def client(): + async with DurationClient() as client: + yield client + + +@pytest.mark.asyncio +async def test_duration_constant(client: DurationClient): + await client.duration_constant(models.DurationModel(input="1.02:59:59.5000000")) diff --git a/packages/typespec-python/test/azure/mock_api_tests/test_azure_arm_commonproperties.py b/packages/typespec-python/test/azure/mock_api_tests/test_azure_arm_commonproperties.py index 9810be3b354..fab853d096f 100644 --- a/packages/typespec-python/test/azure/mock_api_tests/test_azure_arm_commonproperties.py +++ b/packages/typespec-python/test/azure/mock_api_tests/test_azure_arm_commonproperties.py @@ -6,6 +6,7 @@ import pytest from azure.resourcemanager.commonproperties import CommonPropertiesClient from azure.resourcemanager.commonproperties import models +from azure.core import exceptions SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000" RESOURCE_GROUP_NAME = "test-rg" @@ -58,3 +59,31 @@ def test_managed_identity_update_with_user_assigned_and_system_assigned(client): assert result.location == "eastus" assert result.identity.type == "SystemAssigned,UserAssigned" assert result.properties.provisioning_state == "Succeeded" + + +def test_error_get_for_predefined_error(client): + try: + client.error.get_for_predefined_error( + resource_group_name=RESOURCE_GROUP_NAME, + confidential_resource_name="confidential", + ) + except exceptions.ResourceNotFoundError as e: + assert e.status_code == 404 + assert ( + e.error.message + == "The Resource 'Azure.ResourceManager.CommonProperties/confidentialResources/confidential' under resource group 'test-rg' was not found." + ) + + +def test_error_create_for_user_defined_error(client): + try: + client.error.create_for_user_defined_error( + resource_group_name=RESOURCE_GROUP_NAME, + confidential_resource_name="confidential", + resource=models.ConfidentialResource( + location="eastus", properties=models.ConfidentialResourceProperties(username="00") + ), + ) + except exceptions.HttpResponseError as e: + assert e.status_code == 400 + assert e.error.message == "Username should not contain only numbers." diff --git a/packages/typespec-python/test/azure/mock_api_tests/test_azure_arm_largeheader.py b/packages/typespec-python/test/azure/mock_api_tests/test_azure_arm_largeheader.py new file mode 100644 index 00000000000..9ad6d567e80 --- /dev/null +++ b/packages/typespec-python/test/azure/mock_api_tests/test_azure_arm_largeheader.py @@ -0,0 +1,27 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import pytest +from azure.resourcemanager.largeheader import LargeHeaderClient +from azure.resourcemanager.largeheader import models + +SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000" +RESOURCE_GROUP_NAME = "test-rg" + + +@pytest.fixture +def client(credential, authentication_policy): + with LargeHeaderClient( + credential, SUBSCRIPTION_ID, "http://localhost:3000", authentication_policy=authentication_policy + ) as client: + yield client + + +def test_large_headers_begin_two6_k(client: LargeHeaderClient): + result = client.large_headers.begin_two6_k( + resource_group_name=RESOURCE_GROUP_NAME, + large_header_name="header1", + ).result() + assert result == models.CancelResult(succeeded=True) diff --git a/packages/typespec-python/test/azure/mock_api_tests/test_azure_arm_nonresource.py b/packages/typespec-python/test/azure/mock_api_tests/test_azure_arm_nonresource.py new file mode 100644 index 00000000000..6fd180f8b2f --- /dev/null +++ b/packages/typespec-python/test/azure/mock_api_tests/test_azure_arm_nonresource.py @@ -0,0 +1,34 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import pytest +from azure.resourcemanager.nonresource import NonResourceClient +from azure.resourcemanager.nonresource import models + +SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000" +RESOURCE_GROUP_NAME = "test-rg" + + +@pytest.fixture +def client(credential, authentication_policy): + with NonResourceClient( + credential, SUBSCRIPTION_ID, "http://localhost:3000", authentication_policy=authentication_policy + ) as client: + yield client + + +def test_non_resource_create(client: NonResourceClient): + result = client.non_resource_operations.create( + location="eastus", parameter="hello", body=models.NonResource(id="id", name="hello", type="nonResource") + ) + assert result == models.NonResource(id="id", name="hello", type="nonResource") + + +def test_non_resource_get(client: NonResourceClient): + result = client.non_resource_operations.get( + location="eastus", + parameter="hello", + ) + assert result == models.NonResource(id="id", name="hello", type="nonResource") diff --git a/packages/typespec-python/test/azure/mock_api_tests/test_azure_client_generator_core_client_initialization.py b/packages/typespec-python/test/azure/mock_api_tests/test_azure_client_generator_core_client_initialization.py index 47d2fd23900..569a765af43 100644 --- a/packages/typespec-python/test/azure/mock_api_tests/test_azure_client_generator_core_client_initialization.py +++ b/packages/typespec-python/test/azure/mock_api_tests/test_azure_client_generator_core_client_initialization.py @@ -9,6 +9,7 @@ MixedParamsClient, PathParamClient, ParamAliasClient, + ParentClient, ) from specs.azure.clientgenerator.core.clientinitialization.models import Input @@ -42,3 +43,10 @@ def test_param_alias_client(): with ParamAliasClient("sample-blob") as client: client.with_aliased_name() client.with_original_name() + + +# def test_parent_child_client(): +# with ParentClient() as client: +# client.child_client.with_query() +# client.child_client.get_standalone() +# client.child_client.delete_standalone() diff --git a/packages/typespec-python/test/azure/mock_api_tests/test_azure_client_generator_core_deserialize_empty_string_as_null.py b/packages/typespec-python/test/azure/mock_api_tests/test_azure_client_generator_core_deserialize_empty_string_as_null.py new file mode 100644 index 00000000000..a83be0cd02f --- /dev/null +++ b/packages/typespec-python/test/azure/mock_api_tests/test_azure_client_generator_core_deserialize_empty_string_as_null.py @@ -0,0 +1,19 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import pytest +from specs.azure.clientgenerator.core.emptystring import DeserializeEmptyStringAsNullClient +from specs.azure.clientgenerator.core.emptystring import models + + +@pytest.fixture +def client(): + with DeserializeEmptyStringAsNullClient() as client: + yield client + + +def test_get(client: DeserializeEmptyStringAsNullClient): + result = client.get() + assert result == models.ResponseModel(sample_url="") diff --git a/packages/typespec-python/test/azure/mock_api_tests/test_azure_client_generator_core_usage.py b/packages/typespec-python/test/azure/mock_api_tests/test_azure_client_generator_core_usage.py index 3416ef21b24..bcce1d91c3f 100644 --- a/packages/typespec-python/test/azure/mock_api_tests/test_azure_client_generator_core_usage.py +++ b/packages/typespec-python/test/azure/mock_api_tests/test_azure_client_generator_core_usage.py @@ -26,3 +26,7 @@ def test_model_usage(client: UsageClient): assert models.RoundTripModel( result=models.ResultModel(name="Madge") ) == client.model_in_operation.model_in_read_only_property(body=models.RoundTripModel()) + + +# def test_orphan_model_serializable(client: UsageClient): +# client.model_in_operation.orphan_model_serializable(body=models.OrphanModel(model_name="name", description="desc")) diff --git a/packages/typespec-python/test/azure/mock_api_tests/test_azure_encode_duration.py b/packages/typespec-python/test/azure/mock_api_tests/test_azure_encode_duration.py new file mode 100644 index 00000000000..5ee88a62629 --- /dev/null +++ b/packages/typespec-python/test/azure/mock_api_tests/test_azure_encode_duration.py @@ -0,0 +1,18 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import pytest +from specs.azure.encode.duration import DurationClient +from specs.azure.encode.duration import models + + +@pytest.fixture +def client(): + with DurationClient() as client: + yield client + + +def test_duration_constant(client: DurationClient): + client.duration_constant(models.DurationModel(input="1.02:59:59.5000000")) diff --git a/packages/typespec-python/test/azure/requirements.txt b/packages/typespec-python/test/azure/requirements.txt index da1cb2fa2e7..13ef7a258d8 100644 --- a/packages/typespec-python/test/azure/requirements.txt +++ b/packages/typespec-python/test/azure/requirements.txt @@ -6,6 +6,7 @@ azure-mgmt-core==1.5.0 # only for azure -e ./generated/azure-client-generator-core-access -e ./generated/azure-client-generator-core-client-initialization +-e ./generated/azure-client-generator-core-deserialize-empty-string-as-null -e ./generated/azure-client-generator-core-flatten-property -e ./generated/azure-client-generator-core-usage -e ./generated/azure-core-basic @@ -15,9 +16,12 @@ azure-mgmt-core==1.5.0 -e ./generated/azure-core-model -e ./generated/azure-core-traits -e ./generated/azure-core-page +-e ./generated/azure-encode-duration -e ./generated/azure-special-headers-client-request-id/ -e ./generated/azure-example-basic -e ./generated/azure-resource-manager-common-properties +-e ./generated/azure-resource-manager-large-header +-e ./generated/azure-resource-manager-non-resource -e ./generated/azure-resource-manager-operation-templates -e ./generated/azure-resource-manager-resources -e ./generated/azure-payload-pageable