import pytest from src.core.models.base import Base from src.core.services import ApplicationInstanceService from src.db.connector import engine from src.service_account.services import ServiceAccountService from src.playlist_sync.services import PlaylistSyncService from src.enums import ServiceType @pytest.fixture def aws_context(): class Context: aws_request_id: str = "local_request_id" return Context @pytest.fixture def init_db_connector(): Base.metadata.create_all(engine) yield Base.metadata.drop_all(engine) @pytest.fixture def application_instance_service(init_db_connector): service = ApplicationInstanceService() yield service @pytest.fixture def service_account_service(init_db_connector): service = ServiceAccountService() yield service @pytest.fixture def playlist_sync_service(init_db_connector): service = PlaylistSyncService() yield service @pytest.fixture def application_instance(application_instance_service): instance = application_instance_service.model( language_id="en-GB", spotify_region_id="_gl", main_domain="test.test", name="test", ga_country_name="Global" ) application_instance_service.insert_instance(instance) yield instance @pytest.fixture def service_account(service_account_service, application_instance): instance = service_account_service.model( application_id=application_instance.id, service_type=ServiceType.youtube ) service_account_service.insert_instance(instance) yield instance @pytest.fixture def playlist_sync(request, playlist_sync_service, application_instance, service_account): if request.param is None: yield None else: multiple = True instances = [] fixtures = request.param if not isinstance(fixtures, (list, tuple)): multiple = False fixtures = [fixtures] for fixture in fixtures: instance = playlist_sync_service.model( application_id=application_instance.id, to_service_account_id=service_account.id, **fixture ) playlist_sync_service.insert_instance(instance) instances.append(instance) yield instances if multiple else instances[0] @pytest.fixture def sync_manager_mock(request, mocker): mock_data = request.param if request.param is not None else mocker.MagicMock() mock = mocker.patch("src.playlist_sync.views.SyncManager", mocker.Mock(return_value=mock_data)) yield mock mock.reset_mock()