"""Test playlist placements model with connection to test database.""" import pytest from analytics.consts import models as model_consts from analytics.models import streams from tests.integration.models.db_setup import DBSetup CREATE_SUMMARY_SOS = 'CREATE TABLE summary_sos LIKE FACTS.QA.summary_sos' INSERT_INTO_SUMMARY_SOS = """ INSERT INTO summary_sos (labelid, subaccountid, download_activity_date, isrc, artistid, playlist_url, storeid, streams_from_passive_discovery, streams_from_active_discovery, streams_from_collection, overall_number_of_streams) VALUES (6971, NULL, '2017-12-01', 'GBZUZ0900073', 138945, 'https://spotify/336825579', 286, 0, 200, 200, 400), (6971, NULL, '2017-12-02', 'GBZUZ0900075', 138947, 'https://spotify/636825579', 286, 0, 200, 100, 300), (22187, 9815, '2017-12-01', 'USQE91000033', 613858, 'https://apple_music/936825233', 1, 100, 200, 300, 600)""" CREATE_DIM_CANONICAL_TRACK = """ CREATE TABLE dim_canonical_track_metadata LIKE FACTS.QA.dim_canonical_track_metadata""" INSERT_INTO_DIM_CANONICAL_TRACK = """ INSERT INTO dim_canonical_track_metadata (isrc, upc, artistname, trackname, trackid, labelid, subaccountid) VALUES ('GBZUZ0900073', 884385593414, 'Local Natives', 'Cubism Dream', 3114194, 6971, NULL), ('GBZUZ0900075', 884385593416, 'Local Natives', 'Heavy Feet', 3114196, 6971, NULL), ('USQE91000033', 884977617191, 'Sleigh Bells', 'Run the Heart', 16568252, 22187, 9815), ('USQE91000033', 884977617191, 'Sleigh Bells', 'Run the Heart', 16568252, 22187, NULL)""" CREATE_PLAYLIST_METADATA = """ CREATE TABLE playlist_metadata LIKE FACTS.QA.playlist_metadata""" INSERT_INTO_PLAYLIST_METADATA = """ INSERT INTO playlist_metadata (playlist_name, playlist_author, playlist_url, storeid) VALUES ('STRFKR Radio', 'user1', 'spotify.com', 286), ('Fleet Radio', 'user2', 'spotify.com', 286), ('Indie: Next Steps', 'user2', 'itunes.com', 1)""" CREATE_PLACEMENT = 'CREATE TABLE placement LIKE FACTS.QA.placement' INSERT_INTO_PLACEMENT = """ INSERT INTO placement (labelid, storeid, playlist_url, isrc, date_added) VALUES (6971, 286, 'https://spotify/336825579', 'GBZUZ0900073', '2017-12-01'), (6971, 286, 'https://spotify/636825579', 'GBZUZ0900075', '2017-12-01'), (22187, 1, 'https://apple_music/936825233', 'USQE91000033', '2017-12-01') """ @pytest.yield_fixture(scope='module', autouse=True) def db_setup(): """Create object for setting up test database.""" with DBSetup() as db: db.execute_queries( CREATE_SUMMARY_SOS, INSERT_INTO_SUMMARY_SOS, CREATE_DIM_CANONICAL_TRACK, INSERT_INTO_DIM_CANONICAL_TRACK, CREATE_PLAYLIST_METADATA, INSERT_INTO_PLAYLIST_METADATA, CREATE_PLACEMENT, INSERT_INTO_PLACEMENT) yield db class TestWithFullParamsList(object): """Test get_placements with full parameter list.""" params = { 'start_date': '2017-12-01', 'end_date': '2017-12-03', 'labelid': 6971, 'subaccountid': None, 'storeids': model_consts.STORES.get('SPOTIFY'), 'isrcs': 'GBZUZ0900073', 'artistids': 138945, 'limit': None} def test_get_placements(self): """Test get_placements.""" assert streams.get_placements(**self.params).message == [{ 'labelid': 6971, 'storeid': 286, 'streams': 400, 'playlist_link': 'https://spotify/336825579', 'track_title': 'Cubism Dream', 'upc': 884385593414, 'isrc': 'GBZUZ0900073', 'artist': 'Local Natives', 'artist_id': 138945, 'date_added': '2017-12-01', 'order_number': '1'}] class TestWithMinimalParamsList(object): """Test get_placements with minimal parameter list.""" params = { 'start_date': '2017-12-01', 'end_date': '2017-12-03', 'labelid': 6971, 'subaccountid': None, 'storeids': None, 'isrcs': None, 'artistids': None, 'limit': None} def test_get_placements(self): """Test get_placements.""" assert streams.get_placements(**self.params).message == [ { 'labelid': 6971, 'storeid': 286, 'streams': 400, 'playlist_link': 'https://spotify/336825579', 'track_title': 'Cubism Dream', 'upc': 884385593414, 'isrc': 'GBZUZ0900073', 'artist': 'Local Natives', 'artist_id': 138945, 'date_added': '2017-12-01', 'order_number': '1'}, { 'labelid': 6971, 'storeid': 286, 'streams': 300, 'playlist_link': 'https://spotify/636825579', 'track_title': 'Heavy Feet', 'upc': 884385593416, 'isrc': 'GBZUZ0900075', 'artist': 'Local Natives', 'artist_id': 138947, 'date_added': '2017-12-01', 'order_number': '2'}] class TestWithUnrecognizedParamValues(object): """Test get_placements with parameter list with unrecognized values.""" params = { 'start_date': '2017-12-01', 'end_date': '2017-12-03', 'labelid': 6971, 'subaccountid': None, 'storeids': None, 'isrcs': 'NOTAREALISRC001', 'artistids': None, 'limit': None} def test_get_placements(self): """Test get_placements.""" assert streams.get_placements(**self.params).message == [] class TestWithSubaccountidInParamsList(object): """Test get_placements with subaccountid in parameter list.""" params = { 'start_date': '2017-12-01', 'end_date': '2017-12-03', 'labelid': 22187, 'subaccountid': 9815, 'storeids': model_consts.STORES.get('APPLE_MUSIC'), 'isrcs': 'USQE91000033', 'artistids': 613858, 'limit': None} def test_get_placements(self): """Test get_placements.""" assert streams.get_placements(**self.params).message == [{ 'labelid': 22187, 'storeid': 1, 'streams': 600, 'playlist_link': 'https://apple_music/936825233', 'track_title': 'Run the Heart', 'upc': 884977617191, 'isrc': 'USQE91000033', 'artist': 'Sleigh Bells', 'artist_id': 613858, 'date_added': '2017-12-01', 'order_number': '1'}] class TestWithLimitInParamsList(object): """Test get_placements with numeric limit value in parameter list.""" params_limit_positive = { 'start_date': '2017-12-01', 'end_date': '2017-12-03', 'labelid': 6971, 'subaccountid': None, 'storeids': None, 'isrcs': None, 'artistids': None, 'limit': 1} params_limit_zero = { 'start_date': '2017-12-01', 'end_date': '2017-12-03', 'labelid': 6971, 'subaccountid': None, 'storeids': None, 'isrcs': None, 'artistids': None, 'limit': 0} def test_get_placements_limit_positive(self): """Test get_placements with limit positive.""" assert streams.get_placements( **self.params_limit_positive).message == [{ 'labelid': 6971, 'storeid': 286, 'streams': 400, 'playlist_link': 'https://spotify/336825579', 'track_title': 'Cubism Dream', 'upc': 884385593414, 'isrc': 'GBZUZ0900073', 'artist': 'Local Natives', 'artist_id': 138945, 'date_added': '2017-12-01', 'order_number': '1'}] def test_get_placements_limit_zero(self): """Test get_placements with limit zero.""" assert streams.get_placements(**self.params_limit_zero).message == []