Esempio n. 1
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
Esempio n. 2
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
Esempio n. 3
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
Esempio n. 4
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
Esempio n. 5
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
Esempio n. 6
0
def test_search_filter_artists(factory: Factory, db: Connection):
    art1 = factory.artist(conn=db)
    art2 = factory.artist(conn=db)

    # Create some releases only on one artist.
    factory.release(artists=[{
        "artist_id": art1.id,
        "role": ArtistRole.MAIN
    }],
                    conn=db)
    factory.release(artists=[{
        "artist_id": art2.id,
        "role": ArtistRole.MAIN
    }],
                    conn=db)

    # Now create some for both; these are what we want to see in search results.
    releases = [
        factory.release(
            artists=[
                {
                    "artist_id": art1.id,
                    "role": ArtistRole.MAIN
                },
                {
                    "artist_id": art2.id,
                    "role": ArtistRole.MAIN
                },
            ],
            conn=db,
        ) for _ in range(5)
    ]

    out = release.search(db, artist_ids=[art1.id, art2.id])
    assert set(releases) == set(out)
Esempio n. 7
0
def test_update_duplicate(factory: Factory, db: Connection):
    art1 = factory.artist(conn=db)
    art2 = factory.artist(conn=db)

    with pytest.raises(Duplicate) as e:
        artist.update(art2, conn=db, name=art1.name)

    assert e.value.entity == art1
Esempio n. 8
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]
Esempio n. 9
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
Esempio n. 10
0
def test_releases(factory: Factory, db: Connection):
    art = factory.artist(conn=db)
    releases = {
        factory.release(
            artists=[{"artist_id": art.id, "role": ArtistRole.MAIN}],
            conn=db,
        )
        for _ in range(4)
    }
    assert releases == set(artist.releases(art, db))
Esempio n. 11
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
Esempio n. 12
0
def test_search_one(factory: Factory, db: Connection):
    art = factory.artist(name="Baron East", conn=db)
    trk = factory.track(
        title="One Track",
        artists=[{
            "artist_id": art.id,
            "role": ArtistRole.MAIN
        }],
        conn=db,
    )
    out = track.search(search="Baron Track", conn=db)
    assert out == [trk]
Esempio n. 13
0
def test_add_artist_failure(factory: Factory, db: Connection):
    art = factory.artist(conn=db)
    trk = factory.track(
        artists=[{
            "artist_id": art.id,
            "role": ArtistRole.MAIN
        }],
        conn=db,
    )

    with pytest.raises(AlreadyExists):
        track.add_artist(trk, art.id, ArtistRole.MAIN, db)
Esempio n. 14
0
def test_search_filter_artists(factory: Factory, db: Connection):
    tracks = [factory.track(conn=db) for _ in range(5)]

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

    for trk in tracks[:3]:
        track.add_artist(trk, art1.id, ArtistRole.MAIN, db)
    for trk in tracks[1:]:
        track.add_artist(trk, art2.id, ArtistRole.MAIN, db)

    out = track.search(db, artist_ids=[art1.id, art2.id])
    assert set(out) == set(tracks[1:3])
Esempio n. 15
0
def test_search_search(factory: Factory, db: Connection):
    art = factory.artist(name="Aaron West", conn=db)
    rls = factory.release(
        title="Music for Sleepy Devs",
        artists=[
            {
                "artist_id": art.id,
                "role": ArtistRole.MAIN
            },
        ],
        conn=db,
    )
    out = release.search(search="Aaron Sleepy", conn=db)
    assert out == [rls]
Esempio n. 16
0
def test_add_artist_failure(factory: Factory, db: Connection):
    art = factory.artist(conn=db)
    rls = factory.release(
        artists=[
            {
                "artist_id": art.id,
                "role": ArtistRole.MAIN
            },
        ],
        conn=db,
    )

    with pytest.raises(AlreadyExists):
        release.add_artist(rls, art.id, ArtistRole.MAIN, db)
Esempio n. 17
0
def test_artists(factory: Factory, db: Connection):
    art = factory.artist(conn=db)
    trk = factory.track(
        artists=[{
            "artist_id": art.id,
            "role": ArtistRole.MAIN
        }],
        conn=db,
    )

    artists = track.artists(trk, db)
    assert len(artists) == 1
    assert artists[0]["role"] == ArtistRole.MAIN
    assert artists[0]["artist"].id == art.id
Esempio n. 18
0
def test_add_artist_new_role(factory: Factory, db: Connection):
    art = factory.artist(conn=db)
    trk = factory.track(
        artists=[{
            "artist_id": art.id,
            "role": ArtistRole.MAIN
        }],
        conn=db,
    )

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

    assert len(artists) == 2
    assert all(art.id == a["artist"].id for a in artists)
Esempio n. 19
0
def test_del_artist(factory: Factory, db: Connection):
    art = factory.artist(conn=db)
    rls = factory.release(
        artists=[
            {
                "artist_id": art.id,
                "role": ArtistRole.MAIN
            },
        ],
        conn=db,
    )
    new_rls = release.del_artist(rls, 2, ArtistRole.MAIN, db)

    assert rls == new_rls
    assert release.artists(rls, db) == []
Esempio n. 20
0
def test_insert_and_query(factory: Factory, db: Connection):
    art = factory.artist(name="Aaron West", conn=db)
    trk = factory.track(
        title="Our Apartment",
        artists=[{
            "artist_id": art.id,
            "role": ArtistRole.MAIN
        }],
        conn=db,
    )

    cursor = db.execute("""
        SELECT rowid FROM music__tracks__fts
        WHERE music__tracks__fts MATCH '"Aaron" AND "Our Apartment"'
        ORDER BY rank
        """)
    assert cursor.fetchone()[0] == trk.id
Esempio n. 21
0
def test_del_artist_failure(factory: Factory, db: Connection):
    art = factory.artist(conn=db)
    trk = factory.track(
        artists=[{
            "artist_id": art.id,
            "role": ArtistRole.MAIN
        }],
        conn=db,
    )

    # Wrong ID.
    with pytest.raises(DoesNotExist):
        track.del_artist(trk, art.id + 1, ArtistRole.MAIN, db)

    # Wrong role.
    with pytest.raises(DoesNotExist):
        track.del_artist(trk, art.id, ArtistRole.REMIXER, db)
Esempio n. 22
0
def test_artists(factory: Factory, db: Connection):
    art1 = factory.artist(conn=db)
    art2 = factory.artist(conn=db)
    rls = factory.release(
        artists=[
            {
                "artist_id": art1.id,
                "role": ArtistRole.MAIN
            },
            {
                "artist_id": art2.id,
                "role": ArtistRole.MAIN
            },
        ],
        conn=db,
    )

    artists = release.artists(rls, db)
    assert {a["artist"].id for a in artists} == {art1.id, art2.id}
Esempio n. 23
0
def test_create(factory: Factory, db: Connection):
    art = factory.artist(conn=db)

    rls = release.create(
        title="New Release",
        artists=[{
            "artist_id": art.id,
            "role": ArtistRole.MAIN
        }],
        release_type=ReleaseType.ALBUM,
        release_year=2020,
        conn=db,
    )

    assert rls == release.from_id(rls.id, db)

    artists = release.artists(rls, db)
    assert len(artists) == 1
    assert artists[0]["artist"].id == art.id
Esempio n. 24
0
def test_top_genres(factory: Factory, db: Connection):
    art = factory.artist(conn=db)
    releases = [
        factory.release(
            artists=[{"artist_id": art.id, "role": ArtistRole.MAIN}],
            conn=db,
        )
        for _ in range(4)
    ]
    genres = [factory.collection(type=CollectionType.GENRE, conn=db) for _ in range(4)]

    for i, rls in enumerate(releases):
        for col in genres[: i + 1]:
            collection.add_release(col, rls.id, db)

    tg = artist.top_genres(art, db)

    for i in range(4):
        assert tg[i]["genre"].id == genres[i].id
        assert tg[i]["num_matches"] == 4 - i
Esempio n. 25
0
def test_del_artist(factory: Factory, db: Connection):
    art = factory.artist(conn=db)
    trk = factory.track(
        artists=[
            {
                "artist_id": art.id,
                "role": ArtistRole.MAIN
            },
            {
                "artist_id": art.id,
                "role": ArtistRole.REMIXER
            },
        ],
        conn=db,
    )

    track.del_artist(trk, art.id, ArtistRole.REMIXER, db)
    artists = track.artists(trk, db)

    assert len(artists) == 1
    assert artists[0]["role"] == ArtistRole.MAIN
Esempio n. 26
0
def test_create(factory: Factory, db: Connection):
    art = factory.artist(conn=db)
    artists = [{"artist_id": art.id, "role": ArtistRole.MAIN}]

    rls = factory.release(conn=db)

    trk = track.create(
        title="new track",
        filepath=Path("/tmp/repertoire-library/09-track.m4a"),
        sha256_initial=b"0" * 32,
        release_id=rls.id,
        artists=artists,
        duration=9001,
        track_number="1",
        disc_number="2",
        conn=db,
    )

    assert trk == track.from_id(trk.id, db)
    trk_arts = track.artists(trk, db)
    assert len(trk_arts) == 1
    assert trk_arts[0]["artist"].id == art.id
Esempio n. 27
0
def test_create_duplicate_allow(factory: Factory, db: Connection):
    art = factory.artist(conn=db)
    rls = factory.release(
        artists=[{
            "artist_id": art.id,
            "role": ArtistRole.MAIN
        }],
        conn=db,
    )

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

    assert rls.id != new_rls.id
Esempio n. 28
0
def test_create_duplicate_disallow(factory: Factory, db: Connection):
    art = factory.artist(conn=db)
    rls = factory.release(
        artists=[{
            "artist_id": art.id,
            "role": ArtistRole.MAIN
        }],
        conn=db,
    )

    with pytest.raises(Duplicate) as e:
        release.create(
            title=rls.title,
            artists=[{
                "artist_id": art.id,
                "role": ArtistRole.MAIN
            }],
            release_type=rls.release_type,
            release_year=rls.release_year,
            conn=db,
            allow_duplicate=False,
        )

    assert e.value.entity == rls
Esempio n. 29
0
def test_del_artist_failure(factory: Factory, db: Connection):
    rls = factory.release(conn=db)
    art = factory.artist(conn=db)

    with pytest.raises(DoesNotExist):
        release.del_artist(rls, art.id, ArtistRole.MAIN, db)
Esempio n. 30
0
def test_update_fields(factory: Factory, db: Connection):
    art = factory.artist(conn=db)
    new_art = artist.update(art, conn=db, name="New Name")

    assert new_art.name == "New Name"
    assert new_art == artist.from_id(art.id, db)