# pylint: disable=redefined-outer-name import os import boto3 import pytest from boto3_type_annotations.s3 import Client as S3Client from boto3_type_annotations.sns import Client as SNSClient from db_schema.postgres import connection from db_schema.schemas import slz from moto import mock_s3, mock_sns from slz_gdpr_email_downloader.entities import Config, Input @pytest.fixture def config_test(): return Config( rds_secrets_key='test/key', bucket_source='bucket_source', bucket_destination='bucket_destination', config_bucket='config_bucket', sns_topic=None, sentry_secret_key='test/key' ) @pytest.fixture def payload_test(): return Input( uow_id='appreciationengine-20210401-sme-request_to_forget-v1', dsp='appreciationengine', report_type='request_to_forget', subtype=None, version='v1', report_date='2021-04-01', licensor='sme', extension='csv', job_id='test_job' ) @pytest.fixture(scope='function', autouse=True) def aws_credentials(): 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' os.environ['AWS_DEFAULT_REGION'] = 'us-east-1' boto3.setup_default_session( aws_access_key_id='testing', aws_secret_access_key='testing', aws_session_token='testing', region_name='testing', ) @pytest.fixture def s3_client(config_test): with mock_s3(): s3_client_: S3Client = boto3.client('s3') for bucket in [ config_test.bucket_source, config_test.bucket_destination, config_test.config_bucket ]: s3_client_.create_bucket(Bucket=bucket) yield s3_client_ s3_resource = boto3.resource('s3') for bucket in [ config_test.bucket_source, config_test.bucket_destination, config_test.config_bucket ]: bucket = s3_resource.Bucket(bucket) bucket.objects.all().delete() bucket.delete() @pytest.fixture def sns_client(): with mock_sns(): sns_client_: SNSClient = boto3.client('sns') result = sns_client_.create_topic(Name='default_topic') setattr(sns_client_, 'default_topic_arn', result['TopicArn']) yield sns_client_ @pytest.fixture(scope='session') def db_connection(): def credentials_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_test'), username=os.environ.get('PG_USER', 'admin'), password=os.environ.get('PG_PASSWORD', 'admin'), engine_params={'echo': True} ) pg = connection.Connection(credentials_loader=credentials_loader, name='test', version='test') yield pg @pytest.fixture(scope='session') def db(db_connection: connection.Connection): yield db_connection.session @pytest.fixture(scope='function') def clean_db(db): yield for model in [slz.ContentFailureLog, slz.Email, slz.ContentStatus, slz.UnitOfWork]: db.query(model).delete() db.commit() db.close()