# pylint: disable=unused-argument import os import boto3 import db_schema.base import pytest import sqlalchemy from boto3_type_annotations.secretsmanager import Client as SecretsManagerClient from db_schema.schemas import apps, slz from moto import mock_secretsmanager @pytest.fixture(scope='session') def engine(): # pylint: disable=redefined-outer-name pg_uri = 'postgresql://{user}:{password}@{host}:{port}/{db}'.format( user=os.environ['PG_USER'], password=os.environ['PG_PASSWORD'], host=os.environ['PG_HOST'], port=os.environ['PG_PORT'], db=os.environ['PG_DB'], ) # pylint: disable=consider-using-f-string engine = sqlalchemy.create_engine(pg_uri) yield engine engine.dispose() @pytest.fixture(scope='function') def session(engine): # pylint: disable=redefined-outer-name with engine.connect() as connection: db_schema.base.ScopedSession.configure(bind=connection) with connection.begin() as transaction: session = db_schema.base.ScopedSession() while True: result = session.execute( # pylint: disable=no-member 'SELECT id FROM databasechangelog ORDER BY dateexecuted DESC LIMIT 1' ) if result.first(): break yield session db_schema.base.ScopedSession.remove() transaction.rollback() for model in [ apps.DatabricksExecution, apps.FailureLog, apps.ContentStatus, apps.UnitOfWork, apps.Report, slz.Report, slz.Licensor, slz.DataSource, ]: session.query(model).delete() session.commit() session.close() @pytest.fixture(scope='function') def aws_credentials(): # pylint: disable=redefined-outer-name os.environ['AWS_ACCESS_KEY_ID'] = 'testing' os.environ['AWS_SECRET_ACCESS_KEY'] = 'testing' os.environ['AWS_SECURITY_TOKEN'] = 'testing' os.environ['AWS_SESSION_TOKEN'] = 'testing' @pytest.fixture(scope='function') def secretsmanager(aws_credentials): # pylint: disable=redefined-outer-name with mock_secretsmanager(): secretsmanager: SecretsManagerClient = boto3.client('secretsmanager') yield secretsmanager