def get(title: str, artists: List[str]) -> SongDb: """Get song from database. Case insensitive ## Arguments: - `title`: `str`: - Title of the song - `artists`: `List[str]`: - Artists of the song ## Returns: - `SongDb`: - The song, Returns `None` when no album is found """ query = orm.select(s for s in SongDb if s.title == title.lower()) for artist in artists: _artist = artist_logic.get_by_name(artist) if _artist: query = query.filter(lambda s: _artist in s.artists) query = query.filter(lambda s: orm.count(s.artists) == len(artists)) return query.first()
def test_get_artist_by_name_existing_reversed(): db_artist = mixer.blend(ArtistDb, name="first second") artist = artist_logic.get_by_name(name="second first") assert artist is not None assert db_artist.name == artist.name
def test_get_artist_by_name_non_existing(): artist = artist_logic.get_by_name(name="hallo") assert artist is None
def test_get_artist_by_name_case_difference(): db_artist = artist_logic.add("Artist") artist = artist_logic.get_by_name(name="artist") assert artist is not None assert db_artist.name == artist.name
def test_get_artist_by_name_cleaned_name(): db_artist = mixer.blend(ArtistDb, name="test") artist = artist_logic.get_by_name(name="test (cv. test1)") assert artist is not None assert db_artist.name == artist.name
def test_get_artist_by_name_existing(): db_artist = mixer.blend(ArtistDb) artist = artist_logic.get_by_name(name=db_artist.name) assert artist is not None assert db_artist.name == artist.name