Esempio n. 1
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. 2
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
Esempio n. 3
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]
Esempio n. 4
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
Esempio n. 5
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}
Esempio n. 6
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
Esempio n. 7
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)
Esempio n. 8
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]
Esempio n. 9
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)
Esempio n. 10
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
Esempio n. 11
0
def test_populate_inbox(factory: Factory, db: Connection):
    usr, _ = user.create("neW1", db)
    for _ in range(12):
        factory.release(conn=db)

    db.commit()

    user._populate_inbox.call_local(usr.id)

    inbox = collection.inbox_of(usr.id, conn=db)
    assert len(collection.releases(inbox, conn=db)) == 12
Esempio n. 12
0
def test_search_filter_release_type(factory: Factory, db: Connection):
    # Create a release that we don't want to show up.
    factory.release(release_type=ReleaseType.ALBUM, conn=db)

    # Create the releases we want to get.
    releases = [
        factory.release(release_type=ReleaseType.EP, conn=db) for _ in range(5)
    ]

    out = release.search(db, release_types=[ReleaseType.EP])
    assert set(releases) == set(out)
Esempio n. 13
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. 14
0
def test_search_sort_year(factory: Factory, db: Connection):
    for _ in range(5):
        factory.release(release_year=factory.rand_year(), conn=db)

    releases = release.search(sort=ReleaseSort.YEAR, asc=True, conn=db)

    # This is the Unknown Release (with a null year). Should be sorted last.
    assert releases[-1].release_year is None

    not_null_years = [rls.release_year for rls in releases[:-1]]
    assert None not in not_null_years
    assert not_null_years == sorted(not_null_years)  # type: ignore
Esempio n. 15
0
def test_catalog_file_duplicate_artist(
    tagfile: mock.MagicMock,
    calc_sha: mock.MagicMock,
    mock_fetch_or_create_release: mock.MagicMock,
    factory: Factory,
    db: Connection,
):
    filepath = "/tmp/music.m4a"
    rls = factory.release(conn=db)
    mock_fetch_or_create_release.return_value = mock.Mock(id=rls.id)
    calc_sha.return_value = b"0" * 32
    tagfile.return_value = mock.Mock(
        artist={ArtistRole.MAIN: ["art1", "art1"]},
        title=None,
        version=None,
        path=Path(filepath),
        mut=mock.Mock(info=mock.Mock(length=1)),
        track_number="1",
        disc_number="1",
    )

    catalog_file(filepath, db)

    trk = track.from_filepath(filepath, db)
    assert trk is not None
    assert len(track.artists(trk, db)) == 1
Esempio n. 16
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)
Esempio n. 17
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. 18
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. 19
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. 20
0
def test_duplicate_genre(factory: Factory, db: Connection):
    rls = factory.release(conn=db)

    _insert_into_genre_collections(rls, ["1, 2, 3", "2/3"], db)
    collections = release.collections(rls, db)
    for genre in ["1", "2", "3"]:
        col = collection.from_name_type_user(genre, CollectionType.GENRE, db)
        assert col in collections
Esempio n. 21
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}
Esempio n. 22
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. 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}
Esempio n. 24
0
def test_add_release(factory: Factory, db: Connection):
    col = factory.collection(conn=db)
    rls = factory.release(conn=db)

    new_col = collection.add_release(col, rls.id, db)
    assert new_col.num_releases == col.num_releases + 1  # type: ignore

    releases = collection.releases(col, db)
    assert len(releases) == new_col.num_releases  # type: ignore
    assert releases[0].id == rls.id
Esempio n. 25
0
def test_del_release(factory: Factory, db: Connection):
    col = factory.collection(conn=db)
    rls = factory.release(conn=db)
    collection.add_release(col, rls.id, db)

    new_col = collection.del_release(col, rls.id, db)
    assert new_col.num_releases == col.num_releases - 1  # type: ignore

    releases = collection.releases(col, db)
    assert releases == []
Esempio n. 26
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. 27
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
Esempio n. 28
0
def test_fetch_or_create_release_fetch(factory: Factory, db: Connection):
    rls = factory.release(conn=db)
    assert release.from_id(rls.id, db) == _fetch_or_create_release(
        tf=mock.Mock(
            album=rls.title,
            artist_album=[
                art["artist"].name for art in release.artists(rls, conn=db)
            ],
        ),
        conn=db,
    )
Esempio n. 29
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
Esempio n. 30
0
def test_search_filter_year(factory: Factory, db: Connection):
    # Create tracks with years we want.
    releases = [
        factory.release(release_year=year, conn=db) for year in [2014, 2016]
    ]

    wanted = []
    for rls in releases:
        wanted.extend(
            [factory.track(release_id=rls.id, conn=db) for _ in range(2)])

    # Create tracks with years we don't want (1 No Year and 5 Unwanted Year).
    factory.track(release_id=1, conn=db)

    bad_rls = factory.release(release_year=1700, conn=db)
    for _ in range(5):
        factory.track(release_id=bad_rls.id, conn=db)

    # Fetch and compare.
    tracks = track.search(db, years=[2014, 2016])
    assert set(tracks) == set(wanted)