# pylint: disable=no-member, unused-argument from datetime import date, datetime, timezone import pytest from db_schema.schemas import slz from slz_job_manager.exceptions import ReportNotFoundError from slz_job_manager.helpers.uow_create import UoWCreateHelper @pytest.mark.parametrize( 'uow_id, expected_repr_id', [ ( 'apple-20191124-theorchard-amEvent-v1_2-rp20191202T111111', '20191202T111111', ), ( 'apple-20191123-theorchard-amArtistDemographics-v1_0-rp20191125T121213', '20191125T121213', ), ( 'apple-20191122-theorchard-amContent-v1_2-rp20191202T111111', '20191202T111111', ), ('apple-20191122-theorchard-amContent-v1_2-rp20191202T111111', '20191202T111111'), ('apple-20191122-theorchard-amContent-v1_2', ''), ('spotify-20191114-sme-tracks-v1', ''), ('amazonadsupported-20191101-sme-activity-v1', ''), ('amazonprime-20191122-sme-user-v1', ''), ('amazonadsupported-20191205-sme-user-v1', ''), ('youtubemusic-20191101-sme-daily_activity_summary-v1', ''), ] ) def test_get_uow(uow_id, expected_repr_id): assert UoWCreateHelper.get_uow_reprocess_id(uow_id) == expected_repr_id @pytest.mark.parametrize( 'uow_id, expected_iow_id', [ ( 'apple-20191124-theorchard-amEvent-v1_2-rp20191202T111111', 'apple-20191124-theorchard-amEvent-v1_2' ), ( 'apple-20191123-theorchard-amArtistDemographics-v1_0-rp20191125T121213', 'apple-20191123-theorchard-amArtistDemographics-v1_0' ), ( 'apple-20191122-theorchard-amContent-v1_2-rp20191202T111111', 'apple-20191122-theorchard-amContent-v1_2' ), ('apple-20191122-theorchard-amContent-v1_2', 'apple-20191122-theorchard-amContent-v1_2'), ('spotify-20191114-sme-tracks-v1', 'spotify-20191114-sme-tracks-v1'), ( 'amazonadsupported-20191101-sme-activity-v1', 'amazonadsupported-20191101-sme-activity-v1' ), ('amazonprime-20191122-sme-user-v1', 'amazonprime-20191122-sme-user-v1'), ('amazonadsupported-20191205-sme-user-v1', 'amazonadsupported-20191205-sme-user-v1'), ( 'youtubemusic-20191101-sme-daily_activity_summary-v1', 'youtubemusic-20191101-sme-daily_activity_summary-v1' ), ] ) def test_get_original_uow_id(uow_id, expected_iow_id): assert UoWCreateHelper.get_original_uow_id(uow_id) == expected_iow_id @pytest.mark.parametrize( 'input_, expected', [ ( 'apple-20191124-theorchard-amEvent-v1_2-rp20191202T111111', date(year=2019, month=11, day=24) ), ('apple-20191124-theorchard-amEvent-v1_2', date(year=2019, month=11, day=24)), ] ) def test_get_original_uow_id_2(input_, expected): assert UoWCreateHelper.get_uow_report_date(input_) == expected @pytest.mark.parametrize( 'input_, expected', [ ( 'apple-20191124-theorchard-amEvent-v1_2-rp20191202T111111', ( 'apple-20191124-theorchard-amEvent-v1_2', date(year=2019, month=11, day=24), '20191202T111111', ) ), ( 'apple-20191124-theorchard-amEvent-v1_2', ( 'apple-20191124-theorchard-amEvent-v1_2', date(year=2019, month=11, day=24), '', ) ), ] ) def test_get_compound_id(input_, expected): assert UoWCreateHelper.get_compound_id(input_) == expected @pytest.mark.parametrize( 'input_, expected', [ ('apple-20191124-theorchard-amEvent-v1_2-rp20191202T111111', 'v1_2'), ('apple-20191123-theorchard-amArtistDemographics-v1_0-rp20191125T121213', 'v1_0'), ('apple-20191122-theorchard-amContent-v1_2-rp20191202T111111', 'v1_2'), ('apple-20191122-theorchard-amContent-v1_2', 'v1_2'), ('spotify-20191114-sme-tracks-v1', 'v1'), ('amazonadsupported-20191101-sme-activity-v1', 'v1'), ('amazonprime-20191122-sme-user-v1', 'v1'), ('amazonadsupported-20191205-sme-user-v1', 'v1'), ('youtubemusic-20191101-sme-daily_activity_summary-v1', 'v1'), ] ) def test_get_original_uow_id_3(input_, expected): assert UoWCreateHelper.get_version(input_) == expected @pytest.mark.integration def test_get_report_ok(db, clean_db): helper = UoWCreateHelper(db) report_id = helper.get_report_id('apple-20191124-theorchard-amEvent-v1_2-rp20191202T111111') expected = db.session.query(slz.Report).filter(slz.Report.report_name == 'amEvent').one() assert report_id == expected.report_id @pytest.mark.integration def test_get_report_raise_exc(db, clean_db): helper = UoWCreateHelper(db) uow_id = 'apple-20191124-theorchard-amUnknownReport-v1_2' with pytest.raises(ReportNotFoundError): helper.get_report_id(uow_id) @pytest.mark.integration def test_get_licensor_id(db, clean_db): helper = UoWCreateHelper(db) licensor_id = helper.get_licensor_id('apple-20191124-theorchard-amEvent-v1_2-rp20191202T111111') expected = db.session.query(slz.Licensor).filter(slz.Licensor.licensor_name == 'theorchard' ).one() assert licensor_id == expected.licensor_id @pytest.mark.integration def test_uow(db, clean_db): helper = UoWCreateHelper(db) now = datetime.now() expected_uow = slz.UnitOfWork( unit_of_work_code='apple-20191124-theorchard-amEvent-v1_2', reprocess_id='1234', report_date=date(year=2019, month=11, day=24), report_id=3, licensor_id=3, version='v1_2', activity_status=slz.ActivityStatusEnum.NOT_IN_PROGRESS.value, completeness_status=slz.CompletenessStatusEnum.ACTIVE.value, next_run_at=now.astimezone(timezone.utc), created_at=now.astimezone(timezone.utc), last_updated_at=now.astimezone(timezone.utc), is_force_complete=False, priority=slz.UnitOfWorkPriorityEnum.DEFAULT.value ) uow = helper.generate_uow('apple-20191124-theorchard-amEvent-v1_2-rp1234', now, now, now) assert uow.unit_of_work_code == expected_uow.unit_of_work_code assert uow.reprocess_id == expected_uow.reprocess_id assert uow.report_date == expected_uow.report_date assert uow.report_id == expected_uow.report_id assert uow.licensor_id == expected_uow.licensor_id assert uow.version == expected_uow.version assert uow.activity_status == expected_uow.activity_status assert uow.completeness_status == expected_uow.completeness_status assert uow.next_run_at == expected_uow.next_run_at assert uow.created_at == expected_uow.created_at assert uow.last_updated_at == expected_uow.last_updated_at assert uow.is_force_complete == expected_uow.is_force_complete assert uow.priority == expected_uow.priority