"""Functional tests for GET full-artists handler.""" import datetime import json from tests.testutils import db @db.test_schema def test_full_artists(client): """Test endpoint without additional params.""" artists = [ { 'artist_id': 1, 'name': 'One', 'vendor_id': 1234, 'last_updated': '2000-01-01' }, { 'artist_id': 2, 'name': 'Two', 'vendor_id': 1234, 'last_updated': '2000-01-01' }, { 'artist_id': 3, 'name': 'Three', 'vendor_id': 456, 'last_updated': '2000-01-01' } ] releases = [ { 'release_id': 1, 'artist_id': 1, 'genre_id': 1, 'last_updated': '2000-01-01' }, { 'release_id': 2, 'artist_id': 1, 'genre_id': 2, 'last_updated': '2000-01-01' }, { 'release_id': 3, 'artist_id': 2, 'genre_id': 1, 'last_updated': '2000-01-01' } ] genres = [ {'genre_id': 1, 'genre': 'Rock'}, {'genre_id': 2, 'genre': 'Punk'} ] for artist in artists: db.seed_artist(artist) for release in releases: db.seed_release(release) for genre in genres: db.seed_genre(genre) account_type = 'vendor' account_id = '1234' res = client.get('/{0}/{1}/full-artists'.format(account_type, account_id)) res_json = json.loads(res.data.decode('utf-8')) assert len(res_json['items']) == 2 assert { 'artist_id': 1, 'name': 'One', 'genres': ['Rock', 'Punk'] } in res_json['items'] assert { 'artist_id': 2, 'name': 'Two', 'genres': ['Rock'] } in res_json['items'] assert res_json['pagination'] == { 'offset': 0, 'limit': 50, 'total_records': 2 } @db.test_schema def test_full_artists_limit_updated(client): """Test endpoint when called with a limit and an updated since.""" artists = [ { 'artist_id': 1, 'name': 'One', 'vendor_id': 1234, 'last_updated': '2000-01-01' }, { 'artist_id': 2, 'name': 'Two', 'vendor_id': 1234, 'last_updated': '2000-01-01' }, { 'artist_id': 3, 'name': 'Three', 'vendor_id': 456, 'last_updated': '2000-01-01' }, { 'artist_id': 4, 'name': 'Four', 'vendor_id': 1234, 'last_updated': '1990-01-01' }, { 'artist_id': 5, 'name': 'Five', 'vendor_id': 1234, 'last_updated': '1990-01-01' }, { 'artist_id': 6, 'name': 'Six', 'vendor_id': 1234, 'last_updated': '2000-01-01' } ] releases = [ { 'release_id': 1, 'artist_id': 1, 'genre_id': 1, 'last_updated': '2000-01-01' }, { 'release_id': 2, 'artist_id': 1, 'genre_id': 2, 'last_updated': '2000-01-01' }, { 'release_id': 3, 'artist_id': 2, 'genre_id': 1, 'last_updated': '2000-01-01' }, { 'release_id': 4, 'artist_id': 5, 'genre_id': 1, 'last_updated': '2000-01-01' } ] genres = [ {'genre_id': 1, 'genre': 'Rock'}, {'genre_id': 2, 'genre': 'Punk'} ] for artist in artists: db.seed_artist(artist) for release in releases: db.seed_release(release) for genre in genres: db.seed_genre(genre) account_type = 'vendor' account_id = '1234' page_limit = 3 page_offset = 0 updated_since = int(datetime.datetime.strptime( '1995-01-01', '%Y-%m-%d').timestamp()) res = client.get('/{0}/{1}/full-artists?page_limit={2}&page_offset={3}' '&updated_since={4}'.format( account_type, account_id, page_limit, page_offset, updated_since)) res_json = json.loads(res.data.decode('utf-8')) assert len(res_json['items']) == 3 assert { 'artist_id': 1, 'name': 'One', 'genres': ['Rock', 'Punk'] } in res_json['items'] assert { 'artist_id': 2, 'name': 'Two', 'genres': ['Rock'] } in res_json['items'] assert { 'artist_id': 5, 'name': 'Five', 'genres': ['Rock'] } in res_json['items'] assert res_json['pagination'] == { 'offset': 0, 'limit': 3, 'total_records': 4 } @db.test_schema def test_full_artists_offset(client): """Test endpoint when called with an offset.""" artists = [ { 'artist_id': 1, 'name': 'One', 'vendor_id': 1234, 'last_updated': '2000-01-01' }, { 'artist_id': 2, 'name': 'Two', 'vendor_id': 1234, 'last_updated': '2000-01-01' }, { 'artist_id': 3, 'name': 'Three', 'vendor_id': 456, 'last_updated': '2000-01-01' }, { 'artist_id': 4, 'name': 'Four', 'vendor_id': 1234, 'last_updated': '1990-01-01' }, { 'artist_id': 5, 'name': 'Five', 'vendor_id': 1234, 'last_updated': '1990-01-01' }, { 'artist_id': 6, 'name': 'Six', 'vendor_id': 1234, 'last_updated': '2000-01-01' } ] releases = [ { 'release_id': 1, 'artist_id': 1, 'genre_id': 1, 'last_updated': '2000-01-01' }, { 'release_id': 2, 'artist_id': 1, 'genre_id': 2, 'last_updated': '2000-01-01' }, { 'release_id': 3, 'artist_id': 2, 'genre_id': 1, 'last_updated': '2000-01-01' }, { 'release_id': 4, 'artist_id': 5, 'genre_id': 1, 'last_updated': '2000-01-01' } ] genres = [ {'genre_id': 1, 'genre': 'Rock'}, {'genre_id': 2, 'genre': 'Punk'} ] for artist in artists: db.seed_artist(artist) for release in releases: db.seed_release(release) for genre in genres: db.seed_genre(genre) account_type = 'vendor' account_id = '1234' page_offset = 3 updated_since = int(datetime.datetime.strptime( '1995-01-01', '%Y-%m-%d').timestamp()) res = client.get('/{0}/{1}/full-artists?page_offset={2}' '&updated_since={3}'.format( account_type, account_id, page_offset, updated_since)) res_json = json.loads(res.data.decode('utf-8')) assert len(res_json['items']) == 1 assert { 'artist_id': 6, 'name': 'Six', 'genres': [] } in res_json['items'] assert res_json['pagination'] == { 'offset': 3, 'limit': 50, 'total_records': 4 }