22import os
33import pytest
44import re
5+ import traceback
56
67from .helpers .base_helper import BaseTestHelper
78from ..mappers .mapper import Record
89
9- class TestMapper :
10-
11- DEFAULT_TEST_METHOD_NAME = "_test_generic_mapper"
1210
13- def find_mappers_to_test ( self , start_path = "metadata_mapper/mappers" ) :
14- ret = {}
11+ class TestMapper :
12+ DEFAULT_TEST_METHOD_NAME = "_test_generic_mapper"
1513
16- for dir in os .scandir (start_path ):
17- if dir .is_dir ():
18- ret = { ** ret , ** self .find_mappers_to_test (dir .path ) }
19- elif dir .is_file () and dir .name .endswith ("_mapper.py" ):
20- path_regex_result = re .search ("([\\ w\\ /]+?_mapper).py" , dir .path )
21- if path_regex_result :
22- full_mapper_path = path_regex_result [1 ].replace ("/" , "." ).lstrip ("." )
23- module_parts = [p for p in full_mapper_path .split ("." )
24- if p not in ["metadata_mapper" , "mappers" ]]
25- mapper_name = module_parts [- 1 ]
26- mapper_path = "." .join (module_parts )
14+ def find_mappers_to_test (self , start_path = "metadata_mapper/mappers" ):
15+ ret = {}
2716
28- if f"test_{ mapper_name } " in locals ().keys ():
29- ret [mapper_path ] = getattr (self , f"test_{ mapper_name } " )
30- else :
31- ret [mapper_path ] = getattr (self , self .DEFAULT_TEST_METHOD_NAME )
17+ for dir in os .scandir (start_path ):
18+ if dir .is_dir ():
19+ ret = {** ret , ** self .find_mappers_to_test (dir .path )}
20+ elif dir .is_file () and dir .name .endswith ("_mapper.py" ):
21+ path_regex_result = re .search ("([\\ w\\ /]+?_mapper).py" , dir .path )
22+ if path_regex_result :
23+ full_mapper_path = (
24+ path_regex_result [1 ].replace ("/" , "." ).lstrip ("." )
25+ )
26+ module_parts = [
27+ p
28+ for p in full_mapper_path .split ("." )
29+ if p not in ["metadata_mapper" , "mappers" ]
30+ ]
31+ mapper_name = module_parts [- 1 ]
32+ mapper_path = "." .join (module_parts )
3233
33- return ret
34+ if f"test_{ mapper_name } " in locals ().keys ():
35+ ret [mapper_path ] = getattr (self , f"test_{ mapper_name } " )
36+ else :
37+ ret [mapper_path ] = getattr (self , self .DEFAULT_TEST_METHOD_NAME )
3438
35- def get_helper (self , module_parts ) -> BaseTestHelper :
36- return BaseTestHelper .for_mapper (module_parts )
37-
38- helper_path = f"metadata_mapper/test/helpers/{ '/' .join (module_parts ).replace ('_mapper' , '' )} _helper.py"
39- if os .path .exists (helper_path ):
40- helper_module_parts = [p .replace ('_mapper' , '_helper' ) for p in module_parts ]
41- helper_class_name = f"{ self .camelize (module_parts [- 1 ].replace ('_mapper' , '' ))} TestHelper"
42- helper_module = importlib .import_module (f".helpers.{ '.' .join (helper_module_parts )} " , package = "rikolti.metadata_mapper.test" )
43- return getattr (helper_module , helper_class_name )
44- else :
45- return BaseTestHelper
39+ return ret
4640
47- def get_record (self , module_parts , module ) -> Record :
48- mapper_name = module_parts [- 1 ].replace ("_mapper" , "" )
49- class_name = f"{ self .camelize (mapper_name )} Record"
50- return getattr (module , class_name )
41+ def get_record (self , module_parts , module ) -> Record :
42+ mapper_name = module_parts [- 1 ].replace ("_mapper" , "" )
43+ class_name = f"{ self .camelize (mapper_name )} Record"
44+ return getattr (module , class_name )
5145
52- def camelize (self , words : str ) -> str :
53- return "" .join ([word .title () for word in words .split ("_" )])
46+ def camelize (self , words : str ) -> str :
47+ return "" .join ([word .title () for word in words .split ("_" )])
5448
55- def _test_generic_mapper (self , record_class , helper ):
56- instance = helper .instantiate_record (record_class )
57- try :
58- instance .to_UCLDC ()
59- except Exception as exc :
60- pytest .assume (False , f"{ type (instance ).__name__ } raised { exc } " )
49+ def _test_generic_mapper (self , record_class , helper ):
50+ try :
51+ instance = helper .instantiate_record (record_class )
52+ try :
53+ instance .to_UCLDC ()
54+ except Exception as exc :
55+ pytest .assume (
56+ False ,
57+ f"{ type (instance ).__name__ } raised '{ exc } ' at mapping:\n { traceback .format_exc ()} " ,
58+ )
59+ except Exception as exc :
60+ pytest .assume (
61+ False ,
62+ f"{ record_class .__name__ } raised '{ exc } ' at initialization:\n { traceback .format_exc ()} " ,
63+ )
6164
62- # Test methods (invoked by pytest)
65+ # Test methods (invoked by pytest)
6366
64- # This will loop through all mappers that don't have explicit test methods and
65- # run them with default data
66- def test_mappers (self ):
67- default_test_method = getattr (self , self .DEFAULT_TEST_METHOD_NAME )
68-
69- mappers = [mapper for mapper , method in self .find_mappers_to_test ().items ()
70- if method == default_test_method ]
67+ # This will loop through all mappers that don't have explicit test methods and
68+ # run them with default data
69+ def test_mappers (self ):
70+ default_test_method = getattr (self , self .DEFAULT_TEST_METHOD_NAME )
7171
72- for mapper in mappers :
73- module_parts = mapper . split ( "." )
74- module = importlib . import_module ( f".mappers. { '.' . join ( module_parts ) } " , package = "rikolti.metadata_mapper" )
75- helper = self . get_helper ( module_parts )()
76- record_class = self . get_record ( module_parts , module )
72+ mappers = [
73+ mapper
74+ for mapper , method in self . find_mappers_to_test (). items ( )
75+ if method == default_test_method
76+ ]
7777
78- default_test_method (record_class , helper )
78+ for mapper in mappers :
79+ module_parts = mapper .split ("." )
80+ module = importlib .import_module (
81+ f".mappers.{ '.' .join (module_parts )} " , package = "rikolti.metadata_mapper"
82+ )
83+ helper = self .get_helper (module_parts )()
84+ if type (helper ) != BaseTestHelper :
85+ record_class = self .get_record (module_parts , module )
86+ default_test_method (record_class , helper )
0 commit comments