import os import boto3 import pytest from moto import mock_sqs from redis import StrictRedis from apollo_main_db.base import Base from apple_playlists_additions_notifications.config import Config from apple_playlists_additions_notifications.main_db import engine, session_scope from tests import factories def register_factories(session): """Pass session to factory model""" for factory in ( factories.AppleWeeklyTopPlaylistFactory, factories.ApplePlaylistTrackListHistoryFactory, factories.ApplePlaylistFactory, factories.AppleSongFactory, factories.MarketFactory, factories.UserMarketFactory, factories.StarredContentFactory, factories.UserDeviceFactory, factories.PlaylistBlacklistFactory, factories.BuzzUserFactory, factories.ApolloMarketFactory ): factory._meta.sqlalchemy_session = session @pytest.yield_fixture def db_session(): """Returns an sqlalchemy session, and after the test tears down.""" Base.metadata.create_all(engine) with session_scope() as session: register_factories(session) yield session Base.metadata.drop_all(engine) @pytest.fixture def aws_credentials(): """Mocked AWS Credentials for moto.""" 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 def mocked_sqs(aws_credentials): with mock_sqs(): sqs_client = boto3.client('sqs', region_name='us-east-1') sqs_client.create_queue( QueueName=os.environ['PUSH_NOTIFICATIONS_QUEUE']) yield sqs_client @pytest.fixture def redis_client(): """Redis client""" _config = Config() return StrictRedis(_config.REDIS_HOST, _config.REDIS_PORT) @pytest.fixture(autouse=True) def redis_flush(redis_client): """Flush all before each test""" redis_client.flushall()