import pytest from slz_downloader.entities import Job from slz_clean_up.entities import AppleMusicChartsDailyFileStorageManager, ManagersMapKey @pytest.mark.parametrize( 'config, expected_result', [ ( { 'dsp': 'dsp', 'report_type': 'report_type', 'version': 'version', 'report_date': 'report_date', 'licensor': 'licensor', }, 'dsp/report_type/version/report_date=report_date/report_licensor=licensor', ), ( { 'dsp': 'apple', 'report_type': 'charts_daily', 'version': 'v1', 'report_date': '2021-10-27', 'licensor': 'sme', }, 'apple/charts_daily/v1/report_date=2021-10-27/report_licensor=sme', ) ] ) def test_apple_music_file_manager_success(config, expected_result): file_manager = AppleMusicChartsDailyFileStorageManager() job = Job.from_dict(config) result = file_manager.get_file_path(job) assert result == expected_result static_result = AppleMusicChartsDailyFileStorageManager.get_file_path(job) assert static_result == expected_result @pytest.mark.parametrize( 'config, expected_result', [ ( { 'report_type': 'report_type', 'version': 'version', 'report_date': 'report_date', 'licensor': 'licensor', }, 'None/report_type/version/report_date=report_date/report_licensor=licensor', ), ( {}, 'None/None/None/report_date=None/report_licensor=None', ) ] ) def test_apple_music_file_manager_missing_success(config: dict, expected_result: str): file_manager = AppleMusicChartsDailyFileStorageManager() job = Job.from_dict(config) result = file_manager.get_file_path(job) assert result == expected_result static_result = AppleMusicChartsDailyFileStorageManager.get_file_path(job) assert static_result == expected_result @pytest.mark.parametrize( 'payload, expected_key', [ # Simple minimal-complete valid input ( { 'dsp': 'apple', 'report_type': 'charts_daily', 'licensor': 'sme', 'version': 'v1', }, ('apple', 'charts_daily', 'sme', 'v1'), ), # Valid input with excessive set of fields in the input ( { 'dsp': 'apple', 'report_type': 'charts_daily', 'licensor': 'sme', 'version': 'v1', 'excessive_field': 'dummy', 'another_excessive_field': 'dummy_1', }, ('apple', 'charts_daily', 'sme', 'v1'), ), ] ) def test_managers_map_key_success(payload: dict, expected_key: str): manager_key = ManagersMapKey.from_dict(payload) mapping_key = manager_key.as_key() assert mapping_key == expected_key # This also checks the order of key items alt_key = ManagersMapKey( dsp=payload['dsp'], report_type=payload['report_type'], licensor=payload['licensor'], version=payload['version'], ) alt_mapping_key = alt_key.as_key() assert alt_mapping_key == expected_key @pytest.mark.parametrize( 'payload, invalid_order_result, valid_order_result', [ ( { 'dsp': 'apple', 'report_type': 'charts_daily', 'licensor': 'sme', 'version': 'v1', 'excessive_field': 'dummy', 'another_excessive_field': 'dummy_1', }, ('v1', 'apple', 'charts_daily', 'sme'), ('apple', 'charts_daily', 'sme', 'v1'), ), ] ) def test_managers_map_key_invalid_order_fail( payload: dict, invalid_order_result: str, valid_order_result: str, ): manager_key = ManagersMapKey.from_dict(payload) mapping_key = manager_key.as_key() assert mapping_key != invalid_order_result # To be sure, that key items order ensured assert mapping_key == valid_order_result @pytest.mark.parametrize( 'payload', [ # Input with missing fields { 'report_type': 'charts_daily', 'licensor': 'sme', 'version': 'v1', }, # Input with missing fields and excessive unexpected fields { 'report_type': 'charts_daily', 'licensor': 'sme', 'version': 'v1', 'excessive_field': 'dummy', 'another_excessive_field': 'dummy_1', }, ] ) def test_managers_map_key_missing_keys_fail(payload: dict): with pytest.raises(KeyError): ManagersMapKey.from_dict(payload)