# pylint: disable=unused-argument from datetime import date, datetime, timedelta, timezone import pytest from db_schema.schemas import slz from slz_job_manager.services.db import CommandDBService, QueryDBService from slz_job_manager.services.uow_scheduler import UowSchedulerService @pytest.mark.integration def test_schedule_new_uow_scheduled( db, clean_db, db_ro, logger_test, merged_config_service_test, db_reports, db_licensors ): """Regular uow, which was created today""" now = datetime(year=2021, month=1, day=4, hour=12, minute=1, tzinfo=timezone.utc) uow_1 = slz.UnitOfWork( unit_of_work_code='amazonadsupported-20210103-sme-activity-v1', reprocess_id='', licensor=db_licensors['sme'], report=db_reports['activity'], report_date=date(2021, 1, 3), version='v1', activity_status=slz.ActivityStatusEnum.NOT_IN_PROGRESS.value, completeness_status=slz.CompletenessStatusEnum.ACTIVE.value, is_force_complete=False, priority=slz.UnitOfWorkPriorityEnum.DEFAULT.value, next_run_at=now - timedelta(hours=1, minutes=30), created_at=now - timedelta(hours=2), last_updated_at=now - timedelta(hours=1), ) db.session.add(uow_1) db.session.commit() cmd_db_service = CommandDBService( logger=logger_test, db_conn=db, now=now, ) query_db_service = QueryDBService( logger=logger_test, db_conn=db_ro, ) errors_collector = [] uow_scheduler = UowSchedulerService( logger=logger_test, now=now, merged_config_service=merged_config_service_test, command_db_service=cmd_db_service, query_db_service=query_db_service, errors_collector=errors_collector, ) assert uow_1.last_updated_at > uow_1.next_run_at result = uow_scheduler.schedule() assert result == [uow_1.unit_of_work_id] assert uow_1.last_updated_at < uow_1.next_run_at assert uow_1.priority == slz.UnitOfWorkPriorityEnum.DEFAULT.value @pytest.mark.integration def test_schedule_should_change_priority_for_old_uow( db, clean_db, db_ro, logger_test, merged_config_service_test, db_reports, db_licensors ): """Regular uow, which was created yesterday""" now = datetime(year=2021, month=1, day=4, hour=12, minute=1, tzinfo=timezone.utc) uow_1 = slz.UnitOfWork( unit_of_work_code='amazonadsupported-20210103-sme-activity-v1', reprocess_id='', licensor=db_licensors['sme'], report=db_reports['activity'], report_date=date(2021, 1, 3), version='v1', activity_status=slz.ActivityStatusEnum.NOT_IN_PROGRESS.value, completeness_status=slz.CompletenessStatusEnum.ACTIVE.value, is_force_complete=False, priority=slz.UnitOfWorkPriorityEnum.DEFAULT.value, next_run_at=now - timedelta(hours=1, minutes=30), created_at=now - timedelta(hours=2), last_updated_at=now - timedelta(hours=1), ) db.session.add(uow_1) db.session.commit() now += timedelta(hours=24) cmd_db_service = CommandDBService( logger=logger_test, db_conn=db, now=now, ) query_db_service = QueryDBService( logger=logger_test, db_conn=db_ro, ) errors_collector = [] uow_scheduler = UowSchedulerService( logger=logger_test, now=now, merged_config_service=merged_config_service_test, command_db_service=cmd_db_service, query_db_service=query_db_service, errors_collector=errors_collector, ) assert uow_1.last_updated_at > uow_1.next_run_at result = uow_scheduler.schedule() assert result == [uow_1.unit_of_work_id] assert uow_1.last_updated_at < uow_1.next_run_at assert uow_1.priority == slz.UnitOfWorkPriorityEnum.PRIORITY_8.value @pytest.mark.integration def test_schedule_should_not_schedule_if_config_not_found( db, clean_db, db_ro, logger_test, merged_config_service_test, db_reports, db_licensors ): now = datetime(year=2021, month=1, day=4, hour=12, minute=1, tzinfo=timezone.utc) uow_1 = slz.UnitOfWork( unit_of_work_code='amazonadsupported-20210103-sme-activity-v2', reprocess_id='', licensor=db_licensors['sme'], report=db_reports['activity'], report_date=date(2021, 1, 3), version='v2', activity_status=slz.ActivityStatusEnum.NOT_IN_PROGRESS.value, completeness_status=slz.CompletenessStatusEnum.ACTIVE.value, is_force_complete=False, priority=slz.UnitOfWorkPriorityEnum.DEFAULT.value, next_run_at=now - timedelta(hours=1, minutes=30), created_at=now - timedelta(hours=2), last_updated_at=now - timedelta(hours=1), ) db.session.add(uow_1) db.session.commit() cmd_db_service = CommandDBService( logger=logger_test, db_conn=db, now=now, ) query_db_service = QueryDBService( logger=logger_test, db_conn=db_ro, ) errors_collector = [] uow_scheduler = UowSchedulerService( logger=logger_test, now=now, merged_config_service=merged_config_service_test, command_db_service=cmd_db_service, query_db_service=query_db_service, errors_collector=errors_collector, ) result = uow_scheduler.schedule() assert result == []