예제 #1
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
예제 #2
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])
예제 #3
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)
예제 #4
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)
예제 #5
0
async def test_validate_invite_true(db: Connection, factory: Factory, quart_client):
    inv = factory.invite(conn=db)
    db.commit()

    response = await quart_client.get(
        "/api/register/validate-invite",
        query_string={"inviteCode": inv.code.hex()},
    )
    data = json.loads(await response.get_data())
    assert data["valid"]
예제 #6
0
async def test_register_second_user(db: Connection, factory: Factory, quart_client):
    factory.user(conn=db)
    inv = factory.invite(conn=db)
    db.commit()

    response = await quart_client.post(
        "/api/register",
        json={
            "nickname": "new user",
            "inviteCode": inv.code.hex(),
        },
    )
    data = json.loads(await response.get_data())
    assert data["token"] is not None

    usr = user.from_token(bytes.fromhex(data["token"]), db)
    assert usr is not None
    assert usr.id != 1
    assert usr.nickname == "new user"
예제 #7
0
def test_search_used(factory: Factory, db: Connection):
    invs = [factory.invite(conn=db) for _ in range(3)]
    usr, _ = factory.user(conn=db)

    # Expire the third invite.
    db.execute(
        """
        UPDATE system__invites
        SET used_by = ?
        WHERE id = ?
        """,
        (usr.id, invs[2].id),
    )

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

    out = invite.search(db, include_used=False)
    assert set(out) == set(invs[:2])
예제 #8
0
def test_count_all(factory: Factory, db: Connection):
    invs = [factory.invite(conn=db) for _ in range(5)]
    count = invite.count(db)
    assert count == len(invs)
예제 #9
0
def test_search_per_page(factory: Factory, db: Connection):
    invs = [factory.invite(conn=db) for _ in range(5)]
    invs = invite.search(db, page=1, per_page=2)
    assert len(invs) == 2
예제 #10
0
def test_from_id_success(factory: Factory, db: Connection):
    inv = factory.invite(conn=db)
    new_inv = invite.from_id(inv.id, db)
    assert new_inv == inv
예제 #11
0
def test_search_all(factory: Factory, db: Connection):
    invs = {factory.invite(conn=db) for _ in range(5)}
    # Remove the favorites invite for an easy comparison.
    out = set(invite.search(db))
    assert invs == out
예제 #12
0
def test_update_nothing(factory: Factory, db: Connection):
    inv = factory.invite(conn=db)
    new_inv = invite.update(inv, conn=db)
    assert new_inv == inv
예제 #13
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)