Пример #1
0
def test_create_success(factory: Factory, db: Connection):
    ply = factory.playlist(conn=db)
    trk = factory.track(conn=db)
    ety = pentry.create(ply.id, trk.id, db)
    assert ety.track_id == trk.id
    assert ety.playlist_id == ply.id
    assert ety.position == 1
Пример #2
0
def test_fix_album_artists_track_artists(factory: Factory, db: Connection):
    rls = factory.release(artists=[], conn=db)

    art1 = factory.artist(conn=db)
    art2 = factory.artist(conn=db)

    factory.track(
        release_id=rls.id,
        artists=[
            {
                "artist_id": art1.id,
                "role": ArtistRole.MAIN
            },
            {
                "artist_id": art2.id,
                "role": ArtistRole.FEATURE
            },
        ],
        conn=db,
    )

    _fix_album_artists(db)

    rls = release.from_id(rls.id, db)  # type: ignore
    assert rls is not None
    album_artists = release.artists(rls, db)
    assert len(album_artists) == 1
    assert album_artists[0]["artist"].id == art1.id
Пример #3
0
def test_count_all(factory: Factory, db: Connection):
    for _ in range(5):
        factory.release(conn=db)

    count = release.count(db)
    # One extra for Unknown Release.
    assert count == 5 + 1
Пример #4
0
def test_search_page(factory: Factory, db: Connection):
    for _ in range(5):
        factory.collection(conn=db)

    c1 = collection.search(db, page=1, per_page=1)[0]
    c2 = collection.search(db, page=2, per_page=1)[0]
    assert c1 != c2
Пример #5
0
def test_add_release_failure(factory: Factory, db: Connection):
    col = factory.collection(conn=db)
    rls = factory.release(conn=db)
    collection.add_release(col, rls.id, db)

    with pytest.raises(AlreadyExists):
        collection.add_release(col, rls.id, db)
Пример #6
0
def test_search_page(factory: Factory, db: Connection):
    for _ in range(5):
        factory.artist(conn=db)

    a1 = artist.search(db, page=1, per_page=1)[0]
    a2 = artist.search(db, page=2, per_page=1)[0]
    assert a1 != a2
Пример #7
0
def test_count_all(factory: Factory, db: Connection):
    for _ in range(5):
        factory.artist(conn=db)

    count = artist.count(db)
    # The extra 1 is the Unknown Artist.
    assert count == 5 + 1
Пример #8
0
def test_search_filter_year(factory: Factory, db: Connection):
    factory.release(release_year=None, conn=db)
    factory.release(release_year=2000, conn=db)
    rls = factory.release(release_year=2014, conn=db)

    releases = release.search(db, years=[2014])
    assert releases == [rls]
Пример #9
0
def test_search_page(factory: Factory, db: Connection):
    for _ in range(5):
        factory.playlist(conn=db)

    p1 = playlist.search(db, page=1, per_page=1)[0]
    p2 = playlist.search(db, page=2, per_page=1)[0]
    assert p1 != p2
Пример #10
0
def test_create_bad_artist_ids(factory: Factory, db: Connection):
    art = factory.artist(conn=db)
    rls = factory.release(conn=db)

    with pytest.raises(NotFound) as e:
        track.create(
            title="new track",
            filepath=Path("/tmp/repertoire-library/09-track.m4a"),
            sha256_initial=b"0" * 32,
            release_id=rls.id,
            artists=[
                {
                    "artist_id": art.id,
                    "role": ArtistRole.MAIN
                },
                {
                    "artist_id": 1000,
                    "role": ArtistRole.MAIN
                },
                {
                    "artist_id": 1001,
                    "role": ArtistRole.MAIN
                },
            ],
            duration=9001,
            track_number="1",
            disc_number="2",
            conn=db,
        )

    assert e.value.message is not None
    assert "Artist(s) 1000, 1001" in e.value.message
Пример #11
0
def test_count_one(factory: Factory, db: Connection):
    factory.release(title="We Will Always Have Seventy Children", conn=db)
    for _ in range(5):
        factory.release(conn=db)

    count = release.count(db, search="Have Seventy Will Children")
    assert count == 1
Пример #12
0
def test_search_page(factory: Factory, db: Connection):
    for _ in range(5):
        factory.invite(conn=db)

    i1 = invite.search(db, page=1, per_page=1)[0]
    i2 = invite.search(db, page=2, per_page=1)[0]
    assert i1 != i2
Пример #13
0
def test_create_same_album_name_artist_subset_no_duplicate_trigger(
    factory: Factory,
    db: Connection,
):
    art1 = factory.artist(conn=db)
    art2 = factory.artist(conn=db)
    rls1 = factory.release(
        artists=[
            {
                "artist_id": art1.id,
                "role": ArtistRole.MAIN
            },
            {
                "artist_id": art2.id,
                "role": ArtistRole.MAIN
            },
        ],
        conn=db,
    )

    new_rls = release.create(
        title=rls1.title,
        artists=[{
            "artist_id": art1.id,
            "role": ArtistRole.MAIN
        }],
        release_type=rls1.release_type,
        release_year=rls1.release_year,
        conn=db,
        allow_duplicate=False,
    )

    assert rls1.id != new_rls.id
Пример #14
0
def test_all_years(factory: Factory, db: Connection):
    factory.release(release_year=2016, conn=db)
    factory.release(release_year=2014, conn=db)
    factory.release(release_year=None, conn=db)

    years = release.all_years(db)
    assert set(years) == {2016, 2014}
Пример #15
0
def test_search_sort_random(factory: Factory, db: Connection):
    for _ in range(5):
        factory.release(conn=db)

    # Make sure it returns **something**.
    results = release.search(sort=ReleaseSort.RANDOM, asc=True, conn=db)
    assert len(results) > 0
Пример #16
0
def test_update(
    position: int,
    final_order: list[int],
    factory: Factory,
    db: Connection,
):
    ply = factory.playlist(conn=db)
    entries = [factory.playlist_entry(playlist_id=ply.id, conn=db) for _ in range(5)]

    ety = pentry.update(entries[2], position=position, conn=db)
    assert ety.position == position

    cursor = db.execute(
        """
        SELECT id
        FROM music__playlists_tracks
        WHERE playlist_id = ?
        ORDER BY position ASC
        """,
        (ply.id,),
    )

    order = [row["id"] for row in cursor]
    expected = [entries[i].track_id for i in final_order]
    assert order == expected
Пример #17
0
def test_search_asc(factory: Factory, db: Connection):
    for _ in range(5):
        factory.track(conn=db)

    asc_true = track.search(sort=TrackSort.TITLE, asc=True, conn=db)
    asc_false = track.search(sort=TrackSort.TITLE, asc=False, conn=db)

    assert asc_true == asc_false[::-1]
Пример #18
0
def test_update(factory: Factory, db: Connection):
    inv = factory.invite(conn=db)

    usr, _ = factory.user(conn=db)
    new_inv = invite.update(inv, used_by=usr, conn=db)

    assert new_inv.used_by == usr.id
    assert new_inv == invite.from_id(inv.id, db)
Пример #19
0
def test_search_asc(factory: Factory, db: Connection):
    for _ in range(5):
        factory.release(conn=db)

    asc_true = release.search(sort=ReleaseSort.TITLE, asc=True, conn=db)
    asc_false = release.search(sort=ReleaseSort.TITLE, asc=False, conn=db)

    assert asc_true == asc_false[::-1]
Пример #20
0
def test_search_sort_title(factory: Factory, db: Connection):
    for _ in range(5):
        factory.track(conn=db)

    out = track.search(sort=TrackSort.TITLE, asc=True, conn=db)
    titles = [t.title for t in out]

    assert titles == sorted(titles, key=str.casefold)
Пример #21
0
def test_search_sort_title(factory: Factory, db: Connection):
    for _ in range(5):
        factory.release(conn=db)

    out = release.search(sort=ReleaseSort.TITLE, asc=True, conn=db)
    titles = [rls.title for rls in out]

    assert titles == sorted(titles, key=str.casefold)
Пример #22
0
def test_search_page(factory: Factory, db: Connection):
    for _ in range(5):
        factory.release(conn=db)

    out1 = release.search(page=1, per_page=2, conn=db)
    out2 = release.search(page=2, per_page=2, conn=db)
    assert len(out1) == 2
    assert len(out2) == 2
    assert out1 != out2
Пример #23
0
def test_releases(factory: Factory, db: Connection):
    releases = [factory.release(conn=db) for _ in range(4)]
    col = factory.collection(conn=db)

    for rls in releases:
        collection.add_release(col, rls.id, db)

    out = collection.releases(col, db)
    assert {r.id for r in releases} == {r.id for r in out}
Пример #24
0
def test_release_collections(factory: Factory, db: Connection):
    rls = factory.release(conn=db)
    cols = [factory.collection(conn=db) for _ in range(5)]

    for col in cols:
        collection.add_release(col, rls.id, db)

    out = release.collections(rls, db)
    assert {c.id for c in cols} == {c.id for c in out}
Пример #25
0
def test_search_created_by(factory: Factory, db: Connection):
    usr, _ = factory.user(conn=db)
    invs_from_user = [factory.invite(by_user=usr, conn=db) for _ in range(2)]

    for _ in range(3):
        factory.invite(conn=db)

    invs = invite.search(db, created_by=usr.id)
    assert set(invs) == set(invs_from_user)
Пример #26
0
def test_add_artist(factory: Factory, db: Connection):
    rls = factory.release(artists=[], conn=db)
    art = factory.artist(conn=db)

    release.add_artist(rls, art.id, ArtistRole.MAIN, db)
    artists = release.artists(rls, db)

    assert len(artists) == 1
    assert artists[0]["artist"].id == art.id
Пример #27
0
def test_search_expired(factory: Factory, db: Connection):
    invs = [factory.invite(conn=db) for _ in range(2)]
    invs.append(factory.invite(conn=db, expired=True))

    out = invite.search(db, include_expired=True)
    assert set(i.id for i in out) == set(i.id for i in invs)

    out = invite.search(db, include_expired=False)
    assert set(out) == set(invs[:2])
Пример #28
0
def test_add_artist(factory: Factory, db: Connection):
    trk = factory.track(conn=db)
    art = factory.artist(conn=db)

    track.add_artist(trk, art.id, ArtistRole.MAIN, db)
    artists = track.artists(trk, db)

    assert len(artists) == 2
    assert art.id in [a["artist"].id for a in artists]
Пример #29
0
def test_search_filter_rating(factory: Factory, db: Connection):
    factory.release(rating=2, conn=db)
    factory.release(rating=None, conn=db)

    rls1 = factory.release(rating=4, conn=db)
    rls2 = factory.release(rating=6, conn=db)

    releases = release.search(db, ratings=[6, 4])
    assert {rls1, rls2} == set(releases)
Пример #30
0
async def test_register_failure(
    db: Connection,
    factory: Factory,
    quart_client,
):
    factory.user(conn=db)
    db.commit()

    response = await quart_client.post("/api/register", json={"nickname": "admin"})
    assert response.status_code == 401