import datetime import pytest from slz_config.configs import ( DSPCompleteCriteriasConfig, DSPConfig, DSPConfigConfig, DSPSpecificConfig, ) from slz_config.entities import DSPConfigUoWArgs from . import FIXTURES_PATH def test_find_implementation(): path = FIXTURES_PATH / 'specific-settings.json' config = DSPSpecificConfig(path=path).read() dsp_label = config['apple'].find_implementation_label('any', 'any') assert dsp_label == 'AppleClient' def test_get_complete_criteria_for_uow(): path = FIXTURES_PATH / 'complete-criterias.json' config = DSPCompleteCriteriasConfig(path=path) complete_criterias = config.get('amazonadsupported', 'sme', 'playlist') assert complete_criterias @pytest.mark.parametrize( 'input_, expected', [ ( 'apple-{yyyymmdd}-sme-amArtistDemographics-v1_0', DSPConfig( unit_of_work='apple-{yyyymmdd}-sme-amArtistDemographics-v1_0', uow_active_hours_threshold=2, schedule='*/10 * * * *', time_zone='UTC', args=DSPConfigUoWArgs( dsp='apple', extension='txt', type='amArtistDemographics', version='v1_0', licensor='sme', valid_from=datetime.datetime(2017, 8, 2, 0, 0, tzinfo=datetime.timezone.utc), subtype='Summary', valid_until=None ), frequency=None, uow_active_days_limit=None, validation_thresholds=None, uow_complete_after_hours=None, days_offset=None, ) ), ( 'apple-{yyyymmdd}-sme-amArtistDemographics-v1_1', DSPConfig( unit_of_work='apple-{yyyymmdd}-sme-amArtistDemographics-v1_1', uow_active_hours_threshold=2, schedule='*/10 * * * *', time_zone='UTC', args=DSPConfigUoWArgs( dsp='apple', extension='txt', type='amArtistDemographics', version='v1_1', licensor='sme', valid_from=datetime.datetime(2018, 12, 13, 0, 0, tzinfo=datetime.timezone.utc), subtype='Summary', valid_until=None ), frequency='* 10 * * *', uow_active_days_limit=None, validation_thresholds=None, uow_complete_after_hours=None, days_offset=None, ), ), ( 'gras-{yyyymmdd}-sme-dim_product_version-v1', DSPConfig( unit_of_work='gras-{yyyymmdd}-sme-dim_product_version-v1', uow_active_hours_threshold=2, schedule='*/10 * * * *', time_zone='UTC', args=DSPConfigUoWArgs( dsp='gras', extension='csv', type='dim_product_version', version='v1', licensor='sme', valid_from=datetime.datetime(2019, 1, 12, 0, 0, tzinfo=datetime.timezone.utc), subtype=None, valid_until=None ), frequency=None, uow_active_days_limit=None, validation_thresholds=None, uow_complete_after_hours=None, days_offset=None, ), ), ( 'spotify-{yyyymmdd}-sme-sub_30_sec_streams-v2', DSPConfig( unit_of_work='spotify-{yyyymmdd}-sme-sub_30_sec_streams-v2', uow_active_hours_threshold=2, schedule='*/10 * * * *', time_zone='UTC', args=DSPConfigUoWArgs( dsp='spotify', extension='json', type='sub_30_sec_streams', version='v2', licensor='sme', valid_from=datetime.datetime(2018, 1, 22, 0, 0, tzinfo=datetime.timezone.utc), subtype=None, valid_until=datetime.datetime(2020, 4, 30, 0, 0, tzinfo=datetime.timezone.utc) ), frequency=None, uow_active_days_limit=None, validation_thresholds=None, uow_complete_after_hours=None, days_offset=None, ), ), ( 'vevo-{yyyymmdd}-sme-sony_standard_sales-v1', DSPConfig( unit_of_work='vevo-{yyyymmdd}-sme-sony_standard_sales-v1', uow_active_hours_threshold=36, schedule='*/10 * * * *', time_zone='UTC', args=DSPConfigUoWArgs( dsp='vevo', extension='tsv', type='sony_standard_sales', version='v1', licensor='sme', valid_from=datetime.datetime(2019, 5, 20, 0, 0, tzinfo=datetime.timezone.utc), subtype=None, valid_until=None ), frequency=None, uow_active_days_limit=None, validation_thresholds=None, uow_complete_after_hours=None, days_offset=None, ), ), ( 'vevo-{yyyymmdd}-sme-active_claims-v1', DSPConfig( unit_of_work='vevo-{yyyymmdd}-sme-active_claims-v1', uow_active_hours_threshold=36, schedule='*/10 * * * *', time_zone='US/Eastern', args=DSPConfigUoWArgs( dsp='vevo', extension='csv', type='active_claims', version='v1', licensor='sme', valid_from=datetime.datetime(2021, 2, 19, 0, 0, tzinfo=datetime.timezone.utc), subtype=None, valid_until=None ), frequency=None, uow_active_days_limit=None, validation_thresholds=None, uow_complete_after_hours=None, days_offset=0, ), ), ( 'nothing-{yyyymmdd}-sme-active_claims-v1', None, ) ] ) def test_get_dsc_config_for_uow(input_, expected): path = FIXTURES_PATH / 'dsp_settings.json' config = DSPConfigConfig(path=path) dsp_config = config.get(input_) assert expected == dsp_config