You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					100 lines
				
				3.6 KiB
			
		
		
			
		
	
	
					100 lines
				
				3.6 KiB
			| 
								 
											5 months ago
										 
									 | 
							
								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}".'
							 | 
						||
| 
								 | 
							
								        )
							 |