Example #1
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
Example #2
0
def test_search_user(factory: Factory, db: Connection):
    usr, _ = factory.user(conn=db)
    unused_usr, _ = factory.user(conn=db)

    ply1 = factory.playlist(type=PlaylistType.PERSONAL, user=usr, conn=db)
    ply2 = factory.playlist(type=PlaylistType.PERSONAL, user=usr, conn=db)

    ply3 = factory.playlist(type=PlaylistType.PERSONAL,
                            user=unused_usr,
                            conn=db)
    ply3 = factory.playlist(conn=db)

    plys = playlist.search(db, user_ids=[usr.id])
    ids = [p.id for p in plys]
    assert all(p.id in ids for p in [ply1, ply2])
    assert not any(p.id in ids for p in [ply3, ply3])
Example #3
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
Example #4
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
Example #5
0
def test_from_name_and_type(factory: Factory, db: Connection):
    usr1, _ = factory.user(conn=db)
    ply1 = factory.playlist(name="test",
                            type=PlaylistType.SYSTEM,
                            user=usr1,
                            conn=db)

    usr2, _ = factory.user(conn=db)
    ply2 = factory.playlist(name="test",
                            type=PlaylistType.SYSTEM,
                            user=usr2,
                            conn=db)

    factory.playlist(name="other", type=PlaylistType.PLAYLIST, conn=db)

    plys = playlist.from_name_and_type("test", PlaylistType.SYSTEM, conn=db)
    assert {p.id for p in plys} == {ply1.id, ply2.id}
Example #6
0
def test_update_duplicate(factory: Factory, db: Connection):
    ply1 = factory.playlist(conn=db)
    ply2 = factory.playlist(conn=db)

    with pytest.raises(Duplicate) as e:
        playlist.update(ply2, conn=db, name=ply1.name)

    assert e.value.entity == ply1
Example #7
0
def test_query(factory: Factory, db: Connection):
    ply = factory.playlist(name="AAAAAA", conn=db)
    cursor = db.execute(
        """
        SELECT rowid FROM music__playlists__fts
        WHERE music__playlists__fts MATCH '"AAAAAA"'
        ORDER BY rank
        """
    )
    assert cursor.fetchone()[0] == ply.id
Example #8
0
def test_entries(factory: Factory, db: Connection):
    ply = factory.playlist(conn=db)
    tracks = [factory.track(conn=db) for _ in range(5)]

    for trk in tracks:
        pentry.create(ply.id, trk.id, db)

    track_ids = {trk.id for trk in tracks}
    entries = playlist.entries(ply, db)
    assert track_ids == {e.track_id for e in entries}
Example #9
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
Example #10
0
def test_search_filter_playlists(factory: Factory, db: Connection):
    tracks = [factory.track(conn=db) for _ in range(5)]

    ply1 = factory.playlist(conn=db)
    ply2 = factory.playlist(conn=db)

    for trk in tracks[:3]:
        pentry.create(ply1.id, trk.id, db)
    for trk in tracks[1:]:
        pentry.create(ply2.id, trk.id, db)

    out = track.search(db, playlist_ids=[ply1.id, ply2.id])
    assert set(out) == set(tracks[1:3])
Example #11
0
def test_delete(factory: Factory, db: Connection):
    ply = factory.playlist(conn=db)

    entries = [factory.playlist_entry(playlist_id=ply.id, conn=db) for _ in range(5)]
    pentry.delete(entries[2], db)

    new_entries = playlist.entries(ply, db)
    assert entries[2].id not in {e.id for e in new_entries}

    for i, ety in enumerate(entries[:2] + entries[3:], start=1):
        new_ety = pentry.from_id(ety.id, db)
        assert new_ety is not None
        assert new_ety.position == i
Example #12
0
def test_top_genres(factory: Factory, db: Connection):
    ply = factory.playlist(conn=db)
    releases = [factory.release(conn=db) for _ in range(4)]
    genres = [
        factory.collection(type=CollectionType.GENRE, conn=db)
        for _ in range(4)
    ]

    for i, rls in enumerate(releases):
        trk = factory.track(release_id=rls.id, conn=db)
        pentry.create(ply.id, trk.id, db)
        for grn in genres[:i + 1]:
            collection.add_release(grn, rls.id, db)

    tg = playlist.top_genres(ply, db)

    for i in range(4):
        assert tg[i]["genre"].id == genres[i].id
        assert tg[i]["num_matches"] == 4 - i
Example #13
0
def test_search_one(factory: Factory, db: Connection):
    plys = [factory.playlist(conn=db) for _ in range(5)]
    out = playlist.search(db, types=[plys[0].type], search=plys[0].name)
    assert plys[0] == out[0]
Example #14
0
def test_exists(factory: Factory, db: Connection):
    ply = factory.playlist(conn=db)
    assert playlist.exists(ply.id, db)
Example #15
0
def test_search_name(factory: Factory, db: Connection):
    factory.playlist(name="AAAAAA", conn=db)
    plys = playlist.search(db, search="AaA")
    assert len(plys) == 1
    assert plys[0].name == "AAAAAA"
Example #16
0
def test_search_all(factory: Factory, db: Connection):
    plys = {factory.playlist(conn=db) for _ in range(5)}
    assert plys == set(playlist.search(db))
Example #17
0
def test_count_one(factory: Factory, db: Connection):
    plys = [factory.playlist(conn=db) for _ in range(5)]
    count = playlist.count(db, types=[plys[0].type], search=plys[0].name)
    assert count == 1
Example #18
0
def test_update_immutable(factory: Factory, db: Connection):
    usr, _ = factory.user(conn=db)
    ply = factory.playlist(type=PlaylistType.SYSTEM, user=usr, conn=db)

    with pytest.raises(Immutable):
        playlist.update(ply, conn=db, name="New Name")
Example #19
0
def test_count_all(factory: Factory, db: Connection):
    plys = [factory.playlist(conn=db) for _ in range(5)]
    count = playlist.count(db)
    assert count == len(plys)
Example #20
0
def test_update_out_of_bounds(position: int, factory: Factory, db: Connection):
    ply = factory.playlist(conn=db)
    entries = [factory.playlist_entry(playlist_id=ply.id, conn=db) for _ in range(5)]
    with pytest.raises(IndexError):
        pentry.update(entries[2], position=position, conn=db)
Example #21
0
def test_create_duplicate(factory: Factory, db: Connection):
    ply = factory.playlist(conn=db)
    with pytest.raises(Duplicate):
        playlist.create(ply.name, ply.type, db)
Example #22
0
def test_unstar(factory: Factory, db: Connection):
    usr, _ = factory.user(conn=db)
    ply = factory.playlist(conn=db, starred_for_user=usr.id)
    playlist.unstar(ply, usr.id, db)
    assert not playlist.starred(ply, usr.id, db) is True
Example #23
0
def test_star(factory: Factory, db: Connection):
    usr, _ = factory.user(conn=db)
    ply = factory.playlist(conn=db)
    playlist.star(ply, usr.id, db)
    assert playlist.starred(ply, usr.id, db) is True
Example #24
0
def test_from_id_success(factory: Factory, db: Connection):
    ply = factory.playlist(conn=db)
    new_ply = playlist.from_id(ply.id, db)
    assert new_ply == ply
Example #25
0
def test_playlist(factory: Factory, db: Connection):
    ply = factory.playlist(conn=db)
    ety = factory.playlist_entry(playlist_id=ply.id, conn=db)
    assert pentry.playlist(ety, db).id == ply.id
Example #26
0
def test_image_nonexistent(factory: Factory, db: Connection):
    ply = factory.playlist(conn=db)
    assert playlist.image(ply, db) is None
Example #27
0
def test_create_invalid_track(factory: Factory, db: Connection):
    ply = factory.playlist(conn=db)
    with pytest.raises(NotFound):
        pentry.create(ply.id, 9999999, db)
Example #28
0
def test_from_name_type_user_success(factory: Factory, db: Connection):
    ply = factory.playlist(conn=db)
    new_ply = playlist.from_name_type_user(ply.name, ply.type, db)
    assert ply == new_ply
Example #29
0
def test_from_name_type_user_with_user_id(factory: Factory, db: Connection):
    usr, _ = factory.user(conn=db)
    ply = factory.playlist(conn=db, type=PlaylistType.PERSONAL, user=usr)
    new_ply = playlist.from_name_type_user(ply.name, ply.type, db, usr.id)
    assert ply == new_ply
Example #30
0
def test_update_fields(factory: Factory, db: Connection):
    ply = factory.playlist(conn=db)
    new_ply = playlist.update(ply, conn=db, name="New Name")
    assert new_ply == playlist.from_id(ply.id, db)
    assert new_ply.name == "New Name"