from datetime import datetime, timedelta, timezone import pytest from dapd_db_schema.schemas.workflow import Playlist, Track pytestmark = [pytest.mark.integration] @pytest.fixture def track(db, data_source, ttl_priority) -> Track: now = datetime.now(tz=timezone.utc) ttl_item = ttl_priority.ttl track_item = Track( id='tr.123', name='creep', label='Creep (vol.4)', created_at=now, expired_at=now, ) track_item.data_source = data_source track_item.ttl = ttl_item db.workflow_session.add(track_item) db.workflow_session.flush() db.workflow_session.expire_all() yield track_item db.workflow_session.delete(track_item) db.workflow_session.flush() def test_add_track(db, seed, track): results = db.workflow_session.query(Track).all() assert len(results) == 1 def test_update_track(db, seed, track): now = datetime.now(tz=timezone.utc) track = db.workflow_session.query(Track).filter(Track.id == track.id).one() updates = { 'name': 'creep', 'label': 'Creep vol.4 (feat Oz Noy)', 'expired_at': now + timedelta(minutes=track.ttl.ttl), 'is_removed': True, 'is_removed_expired_at': now + timedelta(days=2), } track.name = updates['name'] track.label = updates['label'] track.expired_at = updates['expired_at'] track.is_removed = updates['is_removed'] track.is_removed_expired_at = updates['is_removed_expired_at'] db.workflow_session.add(track) db.workflow_session.flush() db.workflow_session.expire_all() results = db.workflow_session.query(Track).all() assert len(results) == 1 assert results[0].name == updates['name'] assert results[0].label == updates['label'] assert results[0].expired_at == updates['expired_at'] assert results[0].is_removed == updates['is_removed'] assert results[0].is_removed_expired_at == updates['is_removed_expired_at'] def test_add_track_to_playlist(db, seed, playlist, data_source, ttl_priority): now = datetime.now(tz=timezone.utc) ttl_item = ttl_priority.ttl # create tracks tracks = [ Track( id='1', name='', label='', created_at=now, expired_at=now, data_source_id=data_source.id, ttl_id=ttl_item.id ), Track( id='2', name='', label='', created_at=now, expired_at=now, data_source=data_source, ttl=ttl_item ), Track( id='3', name='', label='', created_at=now, expired_at=now, data_source=data_source, ttl=ttl_item ), ] for track in tracks: db.workflow_session.add(track) db.workflow_session.flush() # bind track and playlist for track in tracks: playlist.tracks.append(track) db.workflow_session.flush() db.workflow_session.expire_all() found_playlists = db.workflow_session.query(Playlist).all() assert len(found_playlists) == 1 db.workflow_session.expire_all() found_tracks = db.workflow_session.query(Track).all() assert len(found_tracks) == len(tracks) db.workflow_session.expire_all() found_playlist = db.workflow_session.query(Playlist).filter(Playlist.id == playlist.id).one() assert len(found_playlist.tracks) == 3 # find playlist that have track found_track = db.workflow_session.query(Track).filter(Track.id == '1').one() assert len(found_track.playlists) == 1