import pytest from db_schema.schemas import slz from slz_check_complete.services.db import DBService @pytest.mark.integration def test_update_uow_completeness_status__set_complete( db, logger_test, now, unit_of_work_stubs, content_status_stubs, ): uow_1 = slz.UnitOfWork(**unit_of_work_stubs[1]) db.session.add(uow_1) cs_1 = slz.ContentStatus(**content_status_stubs[1]) cs_1.content_status = slz.ContentStatusEnum.COMPLETE_VOLATILE cs_2 = slz.ContentStatus(**content_status_stubs[2]) cs_2.content_status = slz.ContentStatusEnum.COMPLETE_VOLATILE cs_3 = slz.ContentStatus(**content_status_stubs[3]) cs_3.content_status = slz.ContentStatusEnum.FAILED uow_1.content_statuses.append(cs_1) uow_1.content_statuses.append(cs_2) uow_1.content_statuses.append(cs_3) db.session.commit() db_service = DBService( logger=logger_test, db_conn=db, now=now, ) db_service.update_uow_completeness_status(uow_1, slz.CompletenessStatusEnum.COMPLETE) found = db.session.query(slz.UnitOfWork ).filter(slz.UnitOfWork.unit_of_work_id == uow_1.unit_of_work_id).one() assert found.completeness_status == slz.CompletenessStatusEnum.COMPLETE assert found.is_force_complete is False found = db.session.query(slz.ContentStatus).filter( slz.UnitOfWork.unit_of_work_id == uow_1.unit_of_work_id, slz.ContentStatus.content_status == slz.ContentStatusEnum.COMPLETE, ).all() assert { cs_1.content_status_id, cs_2.content_status_id, } == {cs.content_status_id for cs in found} @pytest.mark.integration @pytest.mark.parametrize( 'contexts, is_complete', [ (['IT', 'US'], True), (['US'], True), (['MX'], False), (['MX', 'US'], False), ] ) def test_is_content_status_complete_with_context( contexts, is_complete, db, logger_test, now, unit_of_work_stubs, content_status_stubs, ): uow_1 = slz.UnitOfWork(**unit_of_work_stubs[1]) db.session.add(uow_1) cs_1 = slz.ContentStatus(**content_status_stubs[1]) cs_2 = slz.ContentStatus(**content_status_stubs[2]) cs_3 = slz.ContentStatus(**content_status_stubs[3]) uow_1.content_statuses.append(cs_1) uow_1.content_statuses.append(cs_2) uow_1.content_statuses.append(cs_3) db.session.commit() db_service = DBService( logger=logger_test, db_conn=db, now=now, ) result = db_service.is_content_status_complete_with_context(uow_1, set(contexts)) assert result == is_complete @pytest.mark.integration def test_get_data_sources(db, logger_test, now): ds1 = db.session.query(slz.DataSource).filter(slz.DataSource.data_source_id == 1).one() ds1.is_active = False db.session.commit() db_service = DBService( logger=logger_test, db_conn=db, now=now, ) result = db_service.get_data_sources() assert ds1 not in result result = db_service.get_data_sources(only_active=False) assert ds1 in result @pytest.mark.integration @pytest.mark.parametrize( 'status, is_found', [ (slz.CompletenessStatusEnum.COMPLETE.value, False), (slz.CompletenessStatusEnum.ACTIVE.value, True), (slz.CompletenessStatusEnum.ON_HOLD.value, False), ] ) def test_get_uow_for_complete(status, is_found, db, logger_test, now, unit_of_work_stubs): uow_1 = slz.UnitOfWork(**unit_of_work_stubs[1]) uow_1.completeness_status = status db.session.add(uow_1) db.session.commit() db_service = DBService( logger=logger_test, db_conn=db, now=now, ) result = db_service.get_uow_for_complete(uow_1.unit_of_work_id) assert bool(result) == is_found if is_found: assert result == uow_1 @pytest.mark.integration @pytest.mark.parametrize( 'uow_code, repr_id', [ ('apple-20191124-theorchard-amEvent-v1_2', ''), ('apple-20191124-theorchard-amEvent-v1_2', '123'), ('apple-20191124-theorchard-amEvent-v1_5', '555'), ] ) def test_get_uow_by_uow_id(uow_code, repr_id, db, logger_test, now, unit_of_work_stubs): uow_1 = slz.UnitOfWork(**unit_of_work_stubs[1]) uow_1.unit_of_work_code = uow_code uow_1.reprocess_id = repr_id db.session.add(uow_1) db.session.commit() db_service = DBService( logger=logger_test, db_conn=db, now=now, ) result = db_service.get_uow_by_uow_id(uow_1.readable) assert bool(result) is True assert result == (uow_1.unit_of_work_id, )