# pylint: disable=redefined-outer-name import logging import os from datetime import datetime from time import sleep from unittest.mock import Mock import pytest from db_schema.postgres import connection from db_schema.postgres.connection import Connection from db_schema.schemas import slz from slz_config.pipeline_config.service import PipelineConfigService from smelog.entities import LoggerConfig from smelog.factory import LoggerFactory from slz_job_executor.entities import JobPayload from . import FIXTURES_PATH @pytest.fixture(scope='function') def db() -> Connection: def creds_loader(): return dict( active_endpoint=os.environ.get('PG_HOST', '0.0.0.0'), port=os.environ.get('PG_PORT', 5432), database=os.environ.get('PG_DB', 'slz'), username=os.environ.get('PG_USER', 'admin'), password=os.environ.get('PG_PASSWORD', 'admin'), ) conn = connection.Connection( credentials_loader=creds_loader, name='s3_storage_test', version='v1' ) # Simple hack for waiting migrations to be completed while True: result = conn.session.execute( # pylint: disable=no-member 'SELECT id FROM databasechangelog ORDER BY dateexecuted DESC LIMIT 1' ) if result.first(): break sleep(1) yield conn conn.session.rollback() for model in [slz.UnitOfWorkPipeline, slz.ContentStatus, slz.UnitOfWork]: conn.session.query(model).delete() conn.session.commit() conn.disconnect() @pytest.fixture(scope='function') def db_licensors(db): yield {item.licensor_name: item for item in db.session.query(slz.Licensor).all()} @pytest.fixture(scope='function') def db_reports(db): yield {item.report_name: item for item in db.session.query(slz.Report).all()} @pytest.fixture(scope='function') def db_data_sources(db): yield {item.data_source_name: item for item in db.session.query(slz.DataSource).all()} @pytest.fixture(scope='function') def logger_test(): log_config = LoggerConfig( name='TEST', version='1', level=logging.DEBUG, environment='test', is_local=True, ) return LoggerFactory(log_config).get_logger('TEST') @pytest.fixture(scope='function') def merged_config_service_test(): dsp_config = Mock() dsp_config.path.return_value = os.path.join(FIXTURES_PATH, 'dsp_config.json') dsp_complete_criteria = Mock() dsp_complete_criteria.path.return_value = os.path.join( FIXTURES_PATH, 'dsp-complete-criteria.json' ) dsp_specific_settings = Mock() dsp_specific_settings.path.return_value = os.path.join( FIXTURES_PATH, 'dsp-specific-settings.json' ) slz_flow = Mock() slz_flow.path.return_value = os.path.join(FIXTURES_PATH, 'slz-flow.json') return PipelineConfigService( logger=Mock(), dsp_config_path=dsp_config, dsp_complete_criteria_config_path=dsp_complete_criteria, dsp_specific_settings_path=dsp_specific_settings, slz_flow_config_path=slz_flow, ) @pytest.fixture def start_job_uow_mock(): return slz.UnitOfWork( unit_of_work_code='amazonadsupported-20191124-sme-activity-v1', licensor_id=1, report_id=1, report_date=datetime(2019, 11, 24).date(), 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='2019-11-01T01:01:01.377644+00:00', last_updated_at='2019-11-01T01:00:39.985786+00:00', created_at='2019-11-01T01:01:00.599872+00:00', ) @pytest.fixture(scope='function') def test_job_payload(): return JobPayload( uow_id='apple-20190903-sme-amContent-v1_2', unit_of_work_id=123, dsp='apple', report_type='amContent', subtype=None, version='v1_2', report_date='2019-09-03', report_date_nodash='20190903', licensor='sme', extension='', config_bucket='test-config-bucket', is_reprocessing=False, contexts=['AD'], priority=5, validation_thresholds={ 'low': 10, 'high': 20 }, sf_arn='arn:aws:slzMainFlow' )