from datetime import datetime import pytest from db_schema.schemas import slz from psycopg2.extras import DateTimeRange from slz_clean_up.services.db import DBService @pytest.mark.integration @pytest.mark.parametrize( 'dt_range', [DateTimeRange(datetime(2019, 11, 24, 12), datetime(2019, 11, 24, 14)), None, 0] ) def test_find_uow_to_cancel(dt_range, db, logger_test, now_freezed, unit_of_work_stubs): db_service = DBService( logger=logger_test, db_conn=db, now=now_freezed, ) uow_1 = slz.UnitOfWork(**unit_of_work_stubs[1]) uow_2 = slz.UnitOfWork(**unit_of_work_stubs[2]) if dt_range != 0: uow_1.timeslot = dt_range uow_2.timeslot = dt_range db.session.add_all([uow_1, uow_2]) db.session.commit() result = db_service.find_uow_to_cancel(uow_1.unit_of_work_id) assert result == [uow_2] @pytest.mark.integration def test_find_uow_to_cancel_no_uow(db, logger_test, now_freezed, unit_of_work_stubs): db_service = DBService( logger=logger_test, db_conn=db, now=now_freezed, ) result = db_service.find_uow_to_cancel(123) assert result == [] @pytest.mark.integration def test_cancel_uow(db, logger_test, now_freezed, unit_of_work_stubs): db_service = DBService( logger=logger_test, db_conn=db, now=now_freezed, ) uow_1 = slz.UnitOfWork(**unit_of_work_stubs[1]) uow_2 = slz.UnitOfWork(**unit_of_work_stubs[2]) db.session.add_all([uow_1, uow_2]) db.session.commit() assert uow_1.completeness_status != slz.CompletenessStatusEnum.CANCELLED result = db_service.cancel_uow(uow_1) assert result is True assert uow_1.completeness_status == slz.CompletenessStatusEnum.CANCELLED @pytest.mark.integration def test_cancel_cs_of_uow( db, logger_test, now_freezed, unit_of_work_stubs, content_status_stubs, ): db_service = DBService( logger=logger_test, db_conn=db, now=now_freezed, ) uow_1 = slz.UnitOfWork(**unit_of_work_stubs[1]) db.session.add(uow_1) db.session.commit() cs1 = slz.ContentStatus(unit_of_work=uow_1, **content_status_stubs[1]) cs2 = slz.ContentStatus(unit_of_work=uow_1, **content_status_stubs[2]) cs3 = slz.ContentStatus(unit_of_work=uow_1, **content_status_stubs[3]) db.session.add_all([cs1, cs2, cs3]) db.session.commit() assert db.session.query( slz.ContentStatus ).filter(slz.ContentStatus.content_status == slz.ContentStatusEnum.CANCELLED).count() == 0 db_service.cancel_cs_of_uow(uow_1.unit_of_work_id) assert db.session.query( slz.ContentStatus ).filter(slz.ContentStatus.content_status == slz.ContentStatusEnum.CANCELLED).count() == 3 @pytest.mark.integration def test_get_uow_job_ids( db, logger_test, now_freezed, unit_of_work_stubs, content_status_stubs, ): db_service = DBService( logger=logger_test, db_conn=db, now=now_freezed, ) uow_1 = slz.UnitOfWork(**unit_of_work_stubs[1]) db.session.add(uow_1) db.session.commit() cs1 = slz.ContentStatus(unit_of_work=uow_1, **content_status_stubs[1]) cs2 = slz.ContentStatus(unit_of_work=uow_1, **content_status_stubs[2]) cs3 = slz.ContentStatus(unit_of_work=uow_1, **content_status_stubs[3]) db.session.add_all([cs1, cs2, cs3]) db.session.commit() result = db_service.get_uow_job_ids(uow_1.unit_of_work_id) assert result == ['test_job_id_1', 'test_job_id_2']