diff --git a/packages/autorest.python/test/unittests/test_enums.py b/packages/autorest.python/test/unittests/test_enums.py deleted file mode 100644 index 02134609523..00000000000 --- a/packages/autorest.python/test/unittests/test_enums.py +++ /dev/null @@ -1,52 +0,0 @@ -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -------------------------------------------------------------------------- -from enum import Enum, EnumMeta - - -class _CaseInsensitiveEnumMeta(EnumMeta): - def __getitem__(self, name): - return super().__getitem__(name.upper()) - - def __getattr__(cls, name): - """Return the enum member matching `name` - We use __getattr__ instead of descriptors or inserting into the enum - class' __dict__ in order to support `name` and `value` being both - properties for enum members (which live in the class' __dict__) and - enum members themselves. - """ - try: - return cls._member_map_[name.upper()] - except KeyError: - raise AttributeError(name) - - -class EnumsWithCallableNames(str, Enum, metaclass=_CaseInsensitiveEnumMeta): - """Gets the unit of measurement.""" - - COUNT = "count" - ENCODE = "encode" - FIND = "find" - JOIN = "join" - - -def test_count(): - assert EnumsWithCallableNames.COUNT == "count" - assert callable(EnumsWithCallableNames.count) - - -def test_encode(): - assert EnumsWithCallableNames.ENCODE == "encode" - assert callable(EnumsWithCallableNames.encode) - - -def test_find(): - assert EnumsWithCallableNames.FIND == "find" - assert callable(EnumsWithCallableNames.find) - - -def test_join(): - assert EnumsWithCallableNames.JOIN == "join" - assert callable(EnumsWithCallableNames.join) diff --git a/packages/autorest.python/test/unittests/test_name_converter.py b/packages/autorest.python/test/unittests/test_name_converter.py deleted file mode 100644 index 7e358f66103..00000000000 --- a/packages/autorest.python/test/unittests/test_name_converter.py +++ /dev/null @@ -1,43 +0,0 @@ -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -------------------------------------------------------------------------- -from pygen.preprocess import PreProcessPlugin -from pygen.preprocess.python_mappings import PadType - - -def pad_reserved_words(name: str, pad_type: PadType) -> str: - return PreProcessPlugin(output_folder="").pad_reserved_words(name, pad_type) - - -def test_escaped_reserved_words(): - expected_conversion_model = {"Self": "Self", "And": "AndModel"} - for name in expected_conversion_model: - assert pad_reserved_words(name, pad_type=PadType.MODEL) == expected_conversion_model[name] - - expected_conversion_method = { - "self": "self", - "and": "and_method", - "content_type": "content_type", - } - for name in expected_conversion_method: - assert pad_reserved_words(name, pad_type=PadType.METHOD) == expected_conversion_method[name] - - expected_conversion_parameter = { - "content_type": "content_type_parameter", - "request_id": "request_id_parameter", - "elif": "elif_parameter", - "self": "self_parameter", - "continuation_token": "continuation_token_parameter", - } - for name in expected_conversion_parameter: - assert pad_reserved_words(name, pad_type=PadType.PARAMETER) == expected_conversion_parameter[name] - - expected_conversion_enum = { - "self": "self", - "mro": "mro_enum", - "continuation_token": "continuation_token", - } - for name in expected_conversion_enum: - assert pad_reserved_words(name, pad_type=PadType.ENUM_VALUE) == expected_conversion_enum[name] diff --git a/packages/autorest.python/test/unittests/test_optional_return_type.py b/packages/autorest.python/test/unittests/test_optional_return_type.py deleted file mode 100644 index 41b75865b82..00000000000 --- a/packages/autorest.python/test/unittests/test_optional_return_type.py +++ /dev/null @@ -1,268 +0,0 @@ -# ------------------------------------------------------------------------- -# 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 pygen.codegen.models import ( - Operation, - LROOperation, - PagingOperation, - Response, - ParameterList, - CodeModel, - RequestBuilder, - Client, -) -from pygen.codegen.models.parameter_list import RequestBuilderParameterList -from pygen.codegen.models.primitive_types import StringType - - -@pytest.fixture -def code_model(): - return CodeModel( - { - "clients": [ - { - "name": "client", - "namespace": "blah", - "moduleName": "blah", - "parameters": [], - "url": "", - "operationGroups": [], - } - ], - "namespace": "namespace", - }, - options={ - "show_send_request": True, - "builders_visibility": "public", - "show_operations": True, - "models_mode": "dpg", - "version_tolerant": True, - }, - ) - - -@pytest.fixture -def client(code_model): - return Client( - { - "name": "client", - "namespace": "blah", - "moduleName": "blah", - "parameters": [], - "url": "", - "operationGroups": [], - }, - code_model, - parameters=[], - ) - - -@pytest.fixture -def request_builder(code_model, client): - return RequestBuilder( - yaml_data={ - "url": "http://fake.com", - "method": "GET", - "groupName": "blah", - "isOverload": False, - "apiVersions": [], - }, - client=client, - code_model=code_model, - name="optional_return_type_test", - parameters=RequestBuilderParameterList({}, code_model, parameters=[]), - ) - - -@pytest.fixture -def operation(code_model, request_builder, client): - return Operation( - yaml_data={ - "url": "http://fake.com", - "method": "GET", - "groupName": "blah", - "isOverload": False, - "apiVersions": [], - }, - client=client, - code_model=code_model, - request_builder=request_builder, - name="optional_return_type_test", - parameters=ParameterList({}, code_model, []), - responses=[], - exceptions=[], - ) - - -@pytest.fixture -def lro_operation(code_model, request_builder, client): - return LROOperation( - yaml_data={ - "url": "http://fake.com", - "method": "GET", - "groupName": "blah", - "isOverload": False, - "apiVersions": [], - }, - client=client, - code_model=code_model, - request_builder=request_builder, - name="lro_optional_return_type_test", - parameters=ParameterList({}, code_model, []), - responses=[], - exceptions=[], - ) - - -@pytest.fixture -def paging_operation(code_model, request_builder, client): - return PagingOperation( - yaml_data={ - "url": "http://fake.com", - "method": "GET", - "groupName": "blah", - "isOverload": False, - "apiVersions": [], - "pagerSync": "blah", - "pagerAsync": "blah", - }, - client=client, - code_model=code_model, - request_builder=request_builder, - name="paging_optional_return_type_test", - parameters=ParameterList({}, code_model, []), - responses=[], - exceptions=[], - ) - - -@pytest.fixture -def base_type(code_model): - return StringType({"type": "string"}, code_model) - - -def test_success_with_body_and_fail_no_body(code_model, operation, base_type): - operation.responses = [ - Response( - yaml_data={"statusCodes": [200]}, - code_model=code_model, - headers=[], - type=base_type, - ), - Response( - yaml_data={"statusCodes": [202]}, - code_model=code_model, - headers=[], - type=base_type, - ), - ] - operation.exceptions = [ - Response( - yaml_data={"statusCodes": ["default"]}, - code_model=code_model, - headers=[], - type=None, - ) - ] - - assert operation.has_optional_return_type is False - - -def test_success_no_body_fail_with_body(code_model, operation, base_type): - operation.responses = [ - Response( - yaml_data={"statusCodes": [200]}, - code_model=code_model, - headers=[], - type=None, - ) - ] - operation.exceptions = [ - Response( - yaml_data={"statusCodes": ["default"]}, - code_model=code_model, - headers=[], - type=base_type, - ) - ] - - assert operation.has_optional_return_type is False - - -def test_optional_return_type_operation(code_model, operation, base_type): - operation.responses = [ - Response( - yaml_data={"statusCodes": [200]}, - code_model=code_model, - headers=[], - type=base_type, - ), - Response( - yaml_data={"statusCodes": [202]}, - code_model=code_model, - headers=[], - type=None, - ), - Response( - yaml_data={"statusCodes": ["default"]}, - code_model=code_model, - headers=[], - type=base_type, - ), - ] - - assert operation.has_optional_return_type is True - - -def test_lro_operation(code_model, lro_operation, base_type): - lro_operation.responses = [ - Response( - yaml_data={"statusCodes": [200]}, - code_model=code_model, - headers=[], - type=base_type, - ), - Response( - yaml_data={"statusCodes": [202]}, - code_model=code_model, - headers=[], - type=None, - ), - Response( - yaml_data={"statusCodes": ["default"]}, - code_model=code_model, - headers=[], - type=base_type, - ), - ] - - assert lro_operation.has_optional_return_type is False - - -def test_paging_operation(code_model, paging_operation, base_type): - paging_operation.responses = [ - Response( - yaml_data={"statusCodes": [200]}, - code_model=code_model, - headers=[], - type=base_type, - ), - Response( - yaml_data={"statusCodes": [202]}, - code_model=code_model, - headers=[], - type=None, - ), - Response( - yaml_data={"statusCodes": ["default"]}, - code_model=code_model, - headers=[], - type=base_type, - ), - ] - - assert paging_operation.has_optional_return_type is False diff --git a/packages/autorest.python/test/unittests/test_parameter_ordering.py b/packages/autorest.python/test/unittests/test_parameter_ordering.py deleted file mode 100644 index ac688b22f6e..00000000000 --- a/packages/autorest.python/test/unittests/test_parameter_ordering.py +++ /dev/null @@ -1,104 +0,0 @@ -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -------------------------------------------------------------------------- -from pygen.codegen.models import Parameter, AnyType, CodeModel, StringType -from pygen.codegen.models.parameter_list import ParameterList - - -def get_code_model(): - return CodeModel( - { - "clients": [ - { - "name": "client", - "namespace": "blah", - "moduleName": "blah", - "parameters": [], - "url": "", - "operationGroups": [], - } - ], - "namespace": "namespace", - }, - options={ - "show_send_request": True, - "builders_visibility": "public", - "show_operations": True, - "models_mode": "dpg", - "only_path_and_body_params_positional": True, - }, - ) - - -def get_parameter(name, required, default_value=None, type=None): - if not type: - type = AnyType( - yaml_data={"type": "any"}, - code_model=get_code_model(), - ) - - return Parameter( - yaml_data={ - "wireName": name, - "clientName": name, - "location": "path", - "clientDefaultValue": default_value, - "optional": not required, - "implementation": "Method", - "inOverload": False, - "inOverloaded": False, - }, - code_model=get_code_model(), - type=type, - ) - - -def test_sort_parameters_with_default_value_from_schema(): - type = StringType( - yaml_data={"clientDefaultValue": "this_is_the_default", "type": "str"}, - code_model=get_code_model(), - ) - parameter_with_default_schema_value_required = get_parameter( - name="required_param_with_schema_default", required=True, type=type - ) - required_parameter = get_parameter(name="required_parameter", required=True) - - parameter_list = [parameter_with_default_schema_value_required, required_parameter] - - assert [ - required_parameter, - parameter_with_default_schema_value_required, - ] == ParameterList({}, get_code_model(), parameter_list).method - - -def test_sort_required_parameters(): - required_default_value_parameter = get_parameter( - name="required_default_value_parameter", required=True, default_value="hello" - ) - required_parameter = get_parameter(name="required_parameter", required=True) - - parameter_list = [required_parameter, required_default_value_parameter] - - assert [required_parameter, required_default_value_parameter] == ParameterList( - {}, get_code_model(), parameter_list - ).method - - # switch around ordering to confirm - - parameter_list = [required_default_value_parameter, required_parameter] - - assert [required_parameter, required_default_value_parameter] == ParameterList( - {}, get_code_model(), parameter_list - ).method - - -def test_sort_required_and_non_required_parameters(): - required_parameter = get_parameter(name="required_parameter", required=True) - - optional_parameter = get_parameter(name="optional_parameter", required=False) - - parameter_list = [optional_parameter, required_parameter] - - assert [required_parameter, optional_parameter] == ParameterList({}, get_code_model(), parameter_list).method diff --git a/packages/autorest.python/test/unittests/test_sort_schema.py b/packages/autorest.python/test/unittests/test_sort_schema.py deleted file mode 100644 index f934f76759c..00000000000 --- a/packages/autorest.python/test/unittests/test_sort_schema.py +++ /dev/null @@ -1,93 +0,0 @@ -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -------------------------------------------------------------------------- - -from pygen.codegen.models import CodeModel, DPGModelType - - -def get_code_model(): - return CodeModel( - { - "clients": [ - { - "name": "client", - "namespace": "blah", - "moduleName": "blah", - "parameters": [], - "url": "", - "operationGroups": [], - } - ], - "namespace": "namespace", - }, - options={ - "show_send_request": True, - "builders_visibility": "public", - "show_operations": True, - "models_mode": "dpg", - }, - ) - - -def get_object_schema(name, base_models): - return DPGModelType( - yaml_data={"name": name, "type": "model", "snakeCaseName": name}, - code_model=get_code_model(), - parents=base_models, - ) - - -def test_pet_cat_kitten_horse_wood(): - """Horse -> Pet <- Cat <- Kitten, Wood""" - code_model = get_code_model() - pet = get_object_schema("Pet", None) - horse = get_object_schema("Horse", [pet]) - cat = get_object_schema("Cat", [pet]) - kitten = get_object_schema("Kitten", [cat]) - wood = get_object_schema("Wood", None) - code_model.model_types = [wood, horse, cat, pet, kitten] - code_model.sort_model_types() - sorted_model_types = code_model.model_types - # assert pet is before cat - assert sorted_model_types.index(pet) < sorted_model_types.index(cat) - # assert pet is before horse - assert sorted_model_types.index(pet) < sorted_model_types.index(horse) - # assert cat is before kitten - assert sorted_model_types.index(cat) < sorted_model_types.index(kitten) - # assert wood in list - assert wood in sorted_model_types - - -def test_multiple_inheritance(): - """CarbonObject <- Person <- Teacher -> Employee, Person <- Kid - | - ObjectOnEarth - """ - code_model = get_code_model() - carbon_object = get_object_schema("CarbonObject", []) - object_on_earth = get_object_schema("ObjectOnEarth", []) - person = get_object_schema("Person", [carbon_object, object_on_earth]) - employee = get_object_schema("Employee", []) - teacher = get_object_schema("Teacher", [person, employee]) - kid = get_object_schema("Kid", [person]) - - code_model.model_types = [ - kid, - person, - teacher, - carbon_object, - employee, - object_on_earth, - ] - code_model.sort_model_types() - sorted_model_types = code_model.model_types - # assert carbon object and object on earth is in front of person - assert sorted_model_types.index(carbon_object) < sorted_model_types.index(person) - assert sorted_model_types.index(object_on_earth) < sorted_model_types.index(person) - # assert person and employee are in front of teacher - assert sorted_model_types.index(person) < sorted_model_types.index(teacher) - assert sorted_model_types.index(employee) < sorted_model_types.index(teacher) - # assert person is before kid - assert sorted_model_types.index(person) < sorted_model_types.index(kid)