from datetime import datetime, timezone import pytest from dapd_db_schema.schemas import workflow @pytest.fixture(scope='function', autouse=True) def clean_workflow_db(db): yield for model in [ workflow.PlaylistTrack, workflow.TrackAlbum, workflow.TrackArtist, workflow.ArtistAlbum, workflow.Playlist, workflow.Artist, workflow.Track, workflow.Album, workflow.Storefront, workflow.DataSource, workflow.TTLPriority, workflow.TTL, workflow.Priority, ]: db.workflow_session.query(model).delete() @pytest.fixture def seed(db): now = datetime.now(tz=timezone.utc) data_sources = [workflow.DataSource(name='apple_music'), workflow.DataSource(name='spotify')] for item in data_sources: db.workflow_session.add(item) db.workflow_session.flush() ttls = [ workflow.TTL(name='1_HOUR', label='1 hour', ttl=60), workflow.TTL(name='2_HOURS', label='2 hours', ttl=120), workflow.TTL(name='24_HOURS', label='1 day', ttl=60 * 24), ] for item in ttls: item.created_at = now db.workflow_session.add(item) db.workflow_session.flush() priorities = [ workflow.Priority(name='HIGH', label='high', priority=2), workflow.Priority(name='MEDIUM', label='medium', priority=5), workflow.Priority(name='LOW', label='low', priority=9), ] for item in priorities: item.created_at = now db.workflow_session.add(item) db.workflow_session.flush() ttl_priorities = [ workflow.TTLPriority(ttl_id=ttls[0].id, priority_id=priorities[0].id), workflow.TTLPriority(ttl_id=ttls[1].id, priority_id=priorities[1].id), workflow.TTLPriority(ttl_id=ttls[2].id, priority_id=priorities[2].id), ] for item in ttl_priorities: db.workflow_session.add(item) db.workflow_session.flush() storefronts = [ workflow.Storefront( id='us', name='us_US', data_source_id=data_sources[0].id, ttl_id=ttls[0].id, created_at=now, expired_at=now, ), workflow.Storefront( id='gb', name='gb_GB', data_source_id=data_sources[0].id, ttl_id=ttls[2].id, created_at=now, expired_at=now, ), workflow.Storefront( id='us', name='us_US', data_source_id=data_sources[1].id, ttl_id=ttls[1].id, created_at=now, expired_at=now, ), workflow.Storefront( id='az', name='az_AZ', data_source_id=data_sources[1].id, ttl_id=ttls[2].id, created_at=now, expired_at=now, ), ] for item in storefronts: db.workflow_session.add(item) db.workflow_session.flush() yield @pytest.fixture def playlist(db) -> workflow.Playlist: now = datetime.now(tz=timezone.utc) # adding new playlist data_source = db.workflow_session.query(workflow.DataSource) \ .filter(workflow.DataSource.name == 'spotify').one() ttl_priority_item = db.workflow_session.query(workflow.TTLPriority) \ .join(workflow.Priority, workflow.Priority.id == workflow.TTLPriority.priority_id) \ .filter(workflow.Priority.name == 'HIGH').one() storefront = db.workflow_session.query(workflow.Storefront) \ .filter(workflow.Storefront.id == 'us', workflow.Storefront.data_source == data_source) \ .one() playlist_item = workflow.Playlist( id='pl.1', name='British Rock 70', label='Popular british rock', created_at=now, expired_at=now, ) playlist_item.data_source = data_source playlist_item.ttl_priority = ttl_priority_item playlist_item.storefront = storefront db.workflow_session.add(playlist_item) db.workflow_session.flush() db.workflow_session.expire_all() yield playlist_item db.workflow_session.delete(playlist_item) db.workflow_session.flush() @pytest.fixture def data_source(db): return db.workflow_session.query(workflow.DataSource) \ .filter(workflow.DataSource.name == 'spotify').one() @pytest.fixture def ttl_priority(db): return db.workflow_session.query(workflow.TTLPriority) \ .join(workflow.Priority, workflow.Priority.id == workflow.TTLPriority.priority_id) \ .filter(workflow.Priority.name == 'HIGH').one()