Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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()
Ejemplo n.º 8
0
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)
Ejemplo n.º 9
0
def test_from_path(factory: Factory, db: Connection):
    img = factory.mock_image(path=Path("/lol"), conn=db)
    assert img == image.from_path("/lol", db)
Ejemplo n.º 10
0
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
Ejemplo n.º 11
0
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)