async def test_get_cover(factory: Factory, db: Connection, quart_client): path = Path.cwd() / "cover01.png" with path.open("wb") as f: f.write(b"owo") factory.mock_image(path=path, conn=db) _, token = factory.user(conn=db) db.commit() response = await quart_client.authed_get("/api/files/images/1", token=token) assert b"owo" == await response.get_data()
async def test_get_cover_nonexistent_file( factory: Factory, db: Connection, quart_client, ): path = Path.cwd() / "nonexistent.png" factory.mock_image(path=path, conn=db) _, token = factory.user(conn=db) db.commit() response = await quart_client.authed_get("/api/files/images/1", token=token) assert response.status_code == 404
def test_create_duplicate(factory: Factory, db: Connection): img = factory.mock_image(conn=db) with pytest.raises(Duplicate) as e: image.create(img.path, db) assert e.value.entity == img
def test_image(factory: Factory, db: Connection): col = factory.collection(conn=db) img = factory.mock_image(conn=db) rls = factory.release(image_id=img.id, conn=db) collection.add_release(col, rls.id, db) new_img = collection.image(col, db) assert new_img is not None assert new_img.id == img.id
def test_image(factory: Factory, db: Connection): ply = factory.playlist(conn=db) img = factory.mock_image(conn=db) rls = factory.release(image_id=img.id, conn=db) trk = factory.track(release_id=rls.id, conn=db) pentry.create(ply.id, trk.id, db) new_img = playlist.image(ply, db) assert new_img is not None assert new_img.id == img.id
def test_image(factory: Factory, db: Connection): art = factory.artist(conn=db) img = factory.mock_image(conn=db) factory.release( artists=[{"artist_id": art.id, "role": ArtistRole.MAIN}], image_id=img.id, conn=db, ) new_img = artist.image(art, db) assert new_img is not None assert new_img.id == img.id
def test_delete_image(factory: Factory, db: Connection): image_path = Path.cwd() / "cover.jpg" thumbnail_path = Path.cwd() / "cover.thumbnail" image_path.touch() thumbnail_path.touch() img = factory.mock_image(path=image_path, conn=db) image.delete(img, db) assert not image.from_id(img.id, db) assert not image_path.exists() assert not thumbnail_path.exists()
def test_delete_image_files_missing(factory: Factory, db: Connection): image_path = Path.cwd() / "cover.jpg" img = factory.mock_image(path=image_path, conn=db) image.delete(img, db) assert not image.from_id(img.id, db)
def test_from_path(factory: Factory, db: Connection): img = factory.mock_image(path=Path("/lol"), conn=db) assert img == image.from_path("/lol", db)
def test_from_id(factory: Factory, db: Connection): img = factory.mock_image(conn=db) new_img = image.from_id(img.id, db) assert img == new_img
def _add_test_data(conn: Connection): factory = Factory() # These start at ID 1. usr_admin, _ = factory.user(nickname="admin", conn=conn) usr_blissful, _ = factory.user(nickname="blissful", conn=conn) # These start at ID 2. artists = [ factory.artist(name="Artist1", conn=conn), factory.artist(name="Artist2", conn=conn), factory.artist(name="Artist3", conn=conn, starred_for_user=usr_admin.id), factory.artist(name="Artist4", conn=conn), factory.artist(name="Artist5", conn=conn), ] # These start at ID 5. collages = [ factory.collection(name="Collage1", type=CollectionType.COLLAGE, conn=conn), factory.collection(name="Collage2", type=CollectionType.COLLAGE, conn=conn), factory.collection( name="Collage3", type=CollectionType.COLLAGE, conn=conn, starred_for_user=usr_admin.id, ), ] labels = [ factory.collection(name="Label1", type=CollectionType.LABEL, conn=conn), factory.collection(name="Label2", type=CollectionType.LABEL, conn=conn), factory.collection(name="Label3", type=CollectionType.LABEL, conn=conn), ] genres = [ factory.collection(name="Genre1", type=CollectionType.GENRE, conn=conn), factory.collection(name="Genre2", type=CollectionType.GENRE, conn=conn), factory.collection(name="Genre3", type=CollectionType.GENRE, conn=conn), ] # These start at ID 1. images = [ factory.mock_image(path=Path.cwd() / "image1.png", conn=conn), factory.mock_image(path=Path.cwd() / "image2.png", conn=conn), factory.mock_image(path=Path.cwd() / "image3.png", conn=conn), ] # These start at ID 1. [ factory.invite(by_user=usr_admin, conn=conn), factory.invite(by_user=usr_blissful, conn=conn), factory.invite(by_user=usr_admin, conn=conn, expired=True), factory.invite(by_user=usr_admin, conn=conn, used_by=usr_blissful), ] # These start at ID 3. playlists = [ factory.playlist(name="Playlist1", type=PlaylistType.PLAYLIST, conn=conn), factory.playlist(name="Playlist2", type=PlaylistType.PLAYLIST, conn=conn), factory.playlist( name="Playlist3", type=PlaylistType.PLAYLIST, conn=conn, starred_for_user=usr_admin.id, ), ] # These start at ID 2. releases = [ factory.release( title="Release1", artists=[ { "artist_id": artists[0].id, "role": ArtistRole.MAIN }, { "artist_id": artists[1].id, "role": ArtistRole.MAIN }, ], release_type=ReleaseType.ALBUM, release_year=1970, release_date=date(1970, 2, 5), rating=8, image_id=images[0].id, conn=conn, ), factory.release( title="Release2", artists=[ { "artist_id": artists[1].id, "role": ArtistRole.MAIN }, { "artist_id": artists[2].id, "role": ArtistRole.MAIN }, ], release_type=ReleaseType.ALBUM, release_year=1980, release_date=None, rating=None, image_id=None, conn=conn, ), factory.release( title="Release3", artists=[ { "artist_id": artists[3].id, "role": ArtistRole.MAIN }, ], release_type=ReleaseType.COMPILATION, release_year=1990, release_date=date(1970, 2, 5), rating=None, image_id=images[1].id, conn=conn, ), factory.release( title="Release4", artists=[ { "artist_id": artists[0].id, "role": ArtistRole.MAIN }, { "artist_id": artists[2].id, "role": ArtistRole.MAIN }, { "artist_id": artists[4].id, "role": ArtistRole.MAIN }, ], release_type=ReleaseType.UNKNOWN, release_year=2000, release_date=None, rating=2, image_id=None, conn=conn, ), factory.release( title="Release5", artists=[], release_type=ReleaseType.EP, release_year=2010, release_date=None, rating=5, image_id=images[2].id, conn=conn, ), ] collection.add_release(collages[0], releases[0].id, conn) collection.add_release(collages[0], releases[1].id, conn) collection.add_release(collages[0], releases[2].id, conn) collection.add_release(collages[1], releases[0].id, conn) collection.add_release(labels[0], releases[0].id, conn) collection.add_release(labels[0], releases[1].id, conn) collection.add_release(labels[1], releases[2].id, conn) collection.add_release(labels[1], releases[3].id, conn) collection.add_release(genres[0], releases[0].id, conn) collection.add_release(genres[0], releases[1].id, conn) collection.add_release(genres[0], releases[2].id, conn) collection.add_release(genres[1], releases[0].id, conn) collection.add_release(genres[1], releases[1].id, conn) collection.add_release(genres[1], releases[2].id, conn) collection.add_release(genres[2], releases[3].id, conn) collection.add_release(genres[2], releases[4].id, conn) # These start at ID 0. r1tracks = [ factory.track( title=f"Track{i}", filepath=Path.cwd() / "music" / f"track{i+1}.flac", sha256=bytes([i] * 32), release_id=releases[0].id, artists=[ { "artist_id": artists[0].id, "role": ArtistRole.MAIN }, { "artist_id": artists[1].id, "role": ArtistRole.PRODUCER }, ], duration=i + 1, track_number=str(i), disc_number="1", conn=conn, ) for i in range(3) ] r2tracks = [ factory.track( title=f"Track{i}", filepath=Path.cwd() / "music" / f"track{i+1}.flac", sha256=bytes([i] * 32), release_id=releases[1].id, artists=[ { "artist_id": artists[1].id, "role": ArtistRole.MAIN }, { "artist_id": artists[2].id, "role": ArtistRole.FEATURE }, ], duration=i + 1, track_number=str(i), disc_number=str(i), conn=conn, ) for i in range(3, 5) ] r3tracks = [ factory.track( title=f"Track{i}", filepath=Path.cwd() / "music" / f"track{i+1}.flac", sha256=bytes([i] * 32), release_id=releases[2].id, artists=[{ "artist_id": artists[3].id, "role": ArtistRole.MAIN }], duration=i + 1, track_number=str(i), disc_number="1", conn=conn, ) for i in range(5, 8) ] r4tracks = [ factory.track( title=f"Track{i}", filepath=Path.cwd() / "music" / f"track{i+1}.flac", sha256=bytes([i] * 32), release_id=releases[3].id, artists=[ { "artist_id": artists[0].id, "role": ArtistRole.MAIN }, { "artist_id": artists[2].id, "role": ArtistRole.FEATURE }, { "artist_id": artists[4].id, "role": ArtistRole.REMIXER }, ], duration=i + 1, track_number=str(i), disc_number="1", conn=conn, ) for i in range(8, 13) ] r5tracks = [ factory.track( title=f"Track{i}", filepath=Path.cwd() / "music" / f"track{i+1}.flac", sha256=bytes([i] * 32), release_id=releases[4].id, artists=[], duration=i + 1, track_number=str(i), disc_number=str(i), conn=conn, ) for i in range(13, 15) ] tracks = r1tracks + r2tracks + r3tracks + r4tracks + r5tracks # These start at ID 1. for trk in tracks[:5]: pentry.create(playlists[0].id, trk.id, conn) for trk in tracks[5:8]: pentry.create(playlists[1].id, trk.id, conn) for trk in tracks[5:10]: pentry.create(playlists[2].id, trk.id, conn)