1.0.1
This commit is contained in:
99
tests/local/test_class_naming.py
Normal file
99
tests/local/test_class_naming.py
Normal file
@@ -0,0 +1,99 @@
|
||||
import dynamix_sdk.types as sdk_types
|
||||
from dynamix_sdk.utils import gen_cls_name_from_url_path
|
||||
|
||||
|
||||
def test_api_class_naming(api_groups):
|
||||
for api_group in api_groups:
|
||||
correct_class_name = f'{api_group.name.capitalize()}API'
|
||||
assert api_group.cls.__qualname__ == correct_class_name, (
|
||||
f'\nAPI group: {api_group.name}'
|
||||
f'\nCorrect API class name: {correct_class_name}'
|
||||
)
|
||||
|
||||
for api_subgroup in api_group.subgroups:
|
||||
correct_class_name = (
|
||||
f'{api_group.name.capitalize()}'
|
||||
f'{api_subgroup.name.capitalize()}'
|
||||
f'API'
|
||||
)
|
||||
assert api_subgroup.cls.__qualname__ == correct_class_name, (
|
||||
f'\nAPI group: {api_group.name}'
|
||||
f'\nAPI subgroup: {api_subgroup.name}'
|
||||
f'\nCorrect API class name: {correct_class_name}'
|
||||
)
|
||||
|
||||
|
||||
def test_protocol_class_naming(sdk_dx_functions):
|
||||
for sdk_func in sdk_dx_functions:
|
||||
correct_class_name = gen_cls_name_from_url_path(
|
||||
url_path=sdk_func.url_path,
|
||||
postfix='Protocol',
|
||||
)
|
||||
|
||||
assert sdk_func.proto_cls.__qualname__ == correct_class_name, (
|
||||
f'\nFunction call attributes: {sdk_func.call_attrs}'
|
||||
f'\nURL path: {sdk_func.url_path}'
|
||||
f'\nCorrect Protocol class name: {correct_class_name}'
|
||||
)
|
||||
|
||||
|
||||
def get_subclasses(cls: type, result: list[type] | None = None):
|
||||
if result:
|
||||
_result = result
|
||||
else:
|
||||
_result: list[type] = []
|
||||
|
||||
for subclass in cls.__subclasses__():
|
||||
if issubclass(subclass.__bases__[0], cls):
|
||||
_result.append(subclass)
|
||||
_result += get_subclasses(subclass)
|
||||
|
||||
return _result
|
||||
|
||||
|
||||
def test_params_nested_model_class_naming():
|
||||
base_cls = sdk_types.BaseAPIParamsNestedModel
|
||||
for params_nm_cls in get_subclasses(base_cls):
|
||||
suffix = 'APIParamsNM'
|
||||
assert params_nm_cls.__qualname__.endswith(suffix), (
|
||||
f'Class {params_nm_cls.__qualname__}:'
|
||||
f' all subclasses of {base_cls.__qualname__}'
|
||||
f' must have a name with suffix "{suffix}".'
|
||||
)
|
||||
|
||||
|
||||
def test_result_class_naming(sdk_dx_functions):
|
||||
for sdk_func in sdk_dx_functions:
|
||||
if issubclass(sdk_func.result_cls, sdk_types.BaseAPIResultModel):
|
||||
result_cls_postfix = 'ResultModel'
|
||||
elif issubclass(sdk_func.result_cls, sdk_types.BaseAPIResultStr):
|
||||
result_cls_postfix = 'ResultStr'
|
||||
elif issubclass(sdk_func.result_cls, sdk_types.BaseAPIResultInt):
|
||||
result_cls_postfix = 'ResultInt'
|
||||
elif issubclass(sdk_func.result_cls, sdk_types.BaseAPIResultBool):
|
||||
result_cls_postfix = 'ResultBool'
|
||||
else:
|
||||
raise TypeError
|
||||
|
||||
result_cls_name = gen_cls_name_from_url_path(
|
||||
url_path=sdk_func.url_path,
|
||||
postfix=result_cls_postfix,
|
||||
)
|
||||
assert sdk_func.result_cls.__qualname__ == result_cls_name, (
|
||||
f'\nFunction call attributes: {sdk_func.call_attrs}'
|
||||
f'\nURL path: {sdk_func.url_path}'
|
||||
f'\nResult base class:'
|
||||
f' {sdk_func.result_cls.__bases__[0].__qualname__}'
|
||||
f'\nCorrect result class name: {result_cls_name}'
|
||||
)
|
||||
|
||||
|
||||
def test_result_nested_model_class_naming():
|
||||
base_cls = sdk_types.BaseAPIResultNestedModel
|
||||
for result_nm_cls in get_subclasses(base_cls):
|
||||
suffix = 'APIResultNM'
|
||||
assert result_nm_cls.__qualname__.endswith(suffix), (
|
||||
f'Class {result_nm_cls.__qualname__}:'
|
||||
f' all subclasses of {base_cls.__qualname__}'
|
||||
f' must have a name with suffix "{suffix}".'
|
||||
)
|
||||
Reference in New Issue
Block a user