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
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])
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)
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)
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"]
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"
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])
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)
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
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
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
def test_update_nothing(factory: Factory, db: Connection): inv = factory.invite(conn=db) new_inv = invite.update(inv, conn=db) assert new_inv == inv
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)