"""Unit tests for the fetch_trending_tracks task.""" import datetime import json from unittest.mock import call, MagicMock, patch from freezegun import freeze_time from activity_detector import base_config from activity_detector.flows.trending_tracks import config from activity_detector.flows.trending_tracks.tasks import fetch_trending_tracks from activity_detector.utils import ows_assets from activity_detector.utils import ows_notifications def test_fetch_trending_tracks(monkeypatch, mock_snowflake): """Test the fetch_trending_tracks task.""" country_groups = [ { 'country_group_id': 1, 'country_group_name': 'Global', 'country_group_floor': 1000 }, { 'country_group_id': 2, 'country_group_name': 'United States', 'country_group_floor': 1000 }, { 'country_group_id': 3, 'country_group_name': 'Canada', 'country_group_floor': 1000 } ] last_dates_per_store = [ {'store_name': 'Itunes', 'last_date': '2018-10-02'}, {'store_name': 'Spotify', 'last_date': '2018-10-02'} ] top_ten_start_date = '2018-09-26' top_ten_end_date = '2018-10-02' all_track_start_date = '2018-07-23' all_track_end_date = '2018-10-01' countries_side_effect = [ [], [(1, 'United States')], [(2, 'Canada')] ] trending_tracks_side_effect = [ [ { 'label_id': 1, 'label_name': 'Label Global', 'isrc': 'ISRC1', 'track_name': 'Track Global', 'artist_names': ['Artist Global'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 1 } ], [ { 'label_id': 2, 'label_name': 'Label USA', 'isrc': 'ISRC2', 'track_name': 'Track USA', 'artist_names': ['Artist USA'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 2 } ], [ { 'label_id': 3, 'label_name': 'Label Canada', 'isrc': 'ISRC3', 'track_name': 'Track Canada', 'artist_names': ['Artist Canada'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 3 } ] ] expected_calls = [ call({ 'country_group_name': 'Global', 'trending_tracks': [ { 'label_id': 1, 'label_name': 'Label Global', 'isrc': 'ISRC1', 'track_name': 'Track Global', 'artist_names': ['Artist Global'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 1 } ], 'start_date': '2018-09-26', 'end_date': '2018-10-02' }), call({ 'country_group_name': 'United States', 'global_trending_tracks': [ { 'label_id': 1, 'label_name': 'Label Global', 'isrc': 'ISRC1', 'track_name': 'Track Global', 'artist_names': ['Artist Global'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 1 } ], 'trending_tracks': [ { 'label_id': 2, 'label_name': 'Label USA', 'isrc': 'ISRC2', 'track_name': 'Track USA', 'artist_names': ['Artist USA'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 2 } ], 'start_date': '2018-09-26', 'end_date': '2018-10-02' }), call({ 'country_group_name': 'Canada', 'global_trending_tracks': [ { 'label_id': 1, 'label_name': 'Label Global', 'isrc': 'ISRC1', 'track_name': 'Track Global', 'artist_names': ['Artist Global'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 1 } ], 'trending_tracks': [ { 'label_id': 3, 'label_name': 'Label Canada', 'isrc': 'ISRC3', 'track_name': 'Track Canada', 'artist_names': ['Artist Canada'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 3 } ], 'start_date': '2018-09-26', 'end_date': '2018-10-02' }) ] monkeypatch.setattr( fetch_trending_tracks, 'fetch_countries', MagicMock(side_effect=countries_side_effect)) monkeypatch.setattr( fetch_trending_tracks, 'get_trending_tracks', MagicMock(side_effect=trending_tracks_side_effect)) monkeypatch.setattr( fetch_trending_tracks, 'create_notification', MagicMock()) fetch_trending_tracks.fetch_trending_tracks( None, country_groups, top_ten_start_date, top_ten_end_date, all_track_start_date, all_track_end_date, last_dates_per_store) fetch_trending_tracks.create_notification.assert_has_calls(expected_calls) def test_fetch_trending_tracks_with_missing_store_data( monkeypatch, mock_snowflake): """Test the fetch_trending_tracks task with missing store data.""" country_groups = [ { 'country_group_id': 1, 'country_group_name': 'Global', 'country_group_floor': 1000 }, { 'country_group_id': 2, 'country_group_name': 'United States', 'country_group_floor': 1000 }, { 'country_group_id': 3, 'country_group_name': 'Canada', 'country_group_floor': 1000 } ] last_dates_per_store = [ {'store_name': 'Itunes', 'last_date': '2018-10-01'}, {'store_name': 'Spotify', 'last_date': '2018-10-01'} ] top_ten_start_date = '2018-09-26' top_ten_end_date = '2018-10-02' all_track_start_date = '2018-07-23' all_track_end_date = '2018-10-01' countries_side_effect = [ [], [(1, 'United States')], [(2, 'Canada')] ] trending_tracks_side_effect = [ [ { 'label_id': 1, 'label_name': 'Label Global', 'isrc': 'ISRC1', 'track_name': 'Track Global', 'artist_names': ['Artist Global'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 1 } ], [ { 'label_id': 2, 'label_name': 'Label USA', 'isrc': 'ISRC2', 'track_name': 'Track USA', 'artist_names': ['Artist USA'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 2 } ], [ { 'label_id': 3, 'label_name': 'Label Canada', 'isrc': 'ISRC3', 'track_name': 'Track Canada', 'artist_names': ['Artist Canada'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 3 } ] ] expected_calls = [ call({ 'country_group_name': 'Global', 'trending_tracks': [ { 'label_id': 1, 'label_name': 'Label Global', 'isrc': 'ISRC1', 'track_name': 'Track Global', 'artist_names': ['Artist Global'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 1 } ], 'start_date': '2018-09-26', 'end_date': '2018-10-02', 'notes': 'Itunes, Spotify' }), call({ 'country_group_name': 'United States', 'global_trending_tracks': [ { 'label_id': 1, 'label_name': 'Label Global', 'isrc': 'ISRC1', 'track_name': 'Track Global', 'artist_names': ['Artist Global'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 1 } ], 'trending_tracks': [ { 'label_id': 2, 'label_name': 'Label USA', 'isrc': 'ISRC2', 'track_name': 'Track USA', 'artist_names': ['Artist USA'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 2 } ], 'start_date': '2018-09-26', 'end_date': '2018-10-02', 'notes': 'Itunes, Spotify' }), call({ 'country_group_name': 'Canada', 'global_trending_tracks': [ { 'label_id': 1, 'label_name': 'Label Global', 'isrc': 'ISRC1', 'track_name': 'Track Global', 'artist_names': ['Artist Global'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 1 } ], 'trending_tracks': [ { 'label_id': 3, 'label_name': 'Label Canada', 'isrc': 'ISRC3', 'track_name': 'Track Canada', 'artist_names': ['Artist Canada'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100, 'percent_above_avg': 66.6, 'spike_score': 6, 'thumbnail_url': 'image_url', 'release_date': '2018-10-04', 'streams_all_time': 3 } ], 'start_date': '2018-09-26', 'end_date': '2018-10-02', 'notes': 'Itunes, Spotify' }) ] monkeypatch.setattr( fetch_trending_tracks, 'fetch_countries', MagicMock(side_effect=countries_side_effect)) monkeypatch.setattr( fetch_trending_tracks, 'get_trending_tracks', MagicMock(side_effect=trending_tracks_side_effect)) monkeypatch.setattr( fetch_trending_tracks, 'create_notification', MagicMock()) fetch_trending_tracks.fetch_trending_tracks( None, country_groups, top_ten_start_date, top_ten_end_date, all_track_start_date, all_track_end_date, last_dates_per_store) fetch_trending_tracks.create_notification.assert_has_calls(expected_calls) def test_fetch_trending_tracks_no_country_groups(monkeypatch): """Test fetch_trending_tracks when called with no country groups.""" monkeypatch.setattr( fetch_trending_tracks, 'create_notification', MagicMock()) last_dates_per_store = [ {'store_name': 'Itunes', 'last_date': '2018-10-01'}, {'store_name': 'Spotify', 'last_date': '2018-10-01'} ] top_ten_start_date = '2018-09-26' top_ten_end_date = '2018-10-02' all_track_start_date = '2018-07-23' all_track_end_date = '2018-10-01' fetch_trending_tracks.fetch_trending_tracks( None, [], top_ten_start_date, top_ten_end_date, all_track_start_date, all_track_end_date, last_dates_per_store) fetch_trending_tracks.create_notification.assert_not_called() def test_create_notification_with_empty_tracks(monkeypatch): """Test create_notification when called with no tracks.""" monkeypatch.setattr( ows_notifications, 'create_notification', MagicMock()) payload = { 'trending_tracks': [], 'global_trending_tracks': [] } fetch_trending_tracks.create_notification(payload) ows_notifications.create_notification.assert_not_called() def test_fetch_countries(mock_snowflake): """Test fetching the countries for a country group.""" with patch('activity_detector.flows.trending_tracks.tasks' '.fetch_trending_tracks.sql_loader', autospec=True) \ as mock_loader: country_group = { 'country_group_id': 2, 'country_group_name': 'United States', 'country_group_floor': 1000 } sql = '{env}_SQL_{group_id_clause}' group_id_clause = 'WHERE ttcgc.trending_tracks_country_group_id = 2' expected_sql = sql.format( env=base_config.ENVIRONMENT_TEST, group_id_clause=group_id_clause) mock_loader.load_query.return_value = sql mock_snowflake.fetchall.return_value = 'FETCH ALL' result = fetch_trending_tracks.fetch_countries( mock_snowflake.session, country_group) mock_loader.load_query.assert_called_with('fetch_countries') mock_snowflake.session.execute.assert_called_with(expected_sql) assert result == 'FETCH ALL' @freeze_time('2018-10-04') def test_get_trending_tracks(monkeypatch, mock_snowflake): """Test getting the trending tracks for a country group.""" with patch('activity_detector.flows.trending_tracks.tasks' '.fetch_trending_tracks.sql_loader', autospec=True) \ as mock_loader: all_time_streams = [('ISRC2', 2)] monkeypatch.setattr( fetch_trending_tracks, 'fetch_all_time_streams', MagicMock(return_value=all_time_streams)) monkeypatch.setattr( fetch_trending_tracks, 'get_release_image_url', MagicMock(return_value='image_url')) country_group = { 'country_group_id': 7, 'country_group_name': 'BeNeLux', 'country_group_floor': 1000 } release_date = datetime.date.today() top_ten_start_date = '2018-09-26' top_ten_end_date = '2018-10-02' all_track_start_date = '2018-07-23' all_track_end_date = '2018-10-01' countries = [(1, 'Belgium'), (2, 'Netherlands'), (3, 'Luxembourg')] sql = '{env}_SQL_{country_clause}_{limit_clause}' country_clause = ' AND fa.countryid IN (1,2,3)' limit_clause = 'LIMIT 30' expected_sql = sql.format( env=base_config.ENVIRONMENT_TEST, country_clause=country_clause, limit_clause=limit_clause) expected_params = { 'weekly_streams_minimum': 1000, 'top_ten_start_date': '2018-09-26', 'top_ten_end_date': '2018-10-02', 'all_track_start_date': '2018-07-23', 'all_track_end_date': '2018-10-01'} mock_loader.load_query.return_value = sql mock_snowflake.fetchall.return_value = [ ( 2, 'Label USA', 'ISRC2', 'Track USA', 666, 'TRACK UPC', 2, release_date, 100, 66.6, 6, json.dumps(['Artist USA']) ) ] result = fetch_trending_tracks.get_trending_tracks( mock_snowflake.session, countries, country_group, top_ten_start_date, top_ten_end_date, all_track_start_date, all_track_end_date) mock_loader.load_query.assert_called_with('fetch_trending_tracks') mock_snowflake.session.execute.assert_called_with( expected_sql, expected_params) assert result == [ { 'label_id': 2, 'label_name': 'Label USA', 'isrc': 'ISRC2', 'track_name': 'Track USA', 'artist_names': ['Artist USA'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100.0, 'percent_above_avg': 67, 'spike_score': 6, 'thumbnail_url': 'image_url', 'streams_all_time': 2, 'release_date': '2018-10-04' } ] @freeze_time('2018-10-04') def test_get_trending_tracks_empty(monkeypatch, mock_snowflake): """Test getting empty trending tracks for a country group.""" with patch('activity_detector.flows.trending_tracks.tasks' '.fetch_trending_tracks.sql_loader', autospec=True) \ as mock_loader: monkeypatch.setattr( fetch_trending_tracks, 'fetch_all_time_streams', MagicMock()) monkeypatch.setattr( fetch_trending_tracks, 'get_release_image_url', MagicMock()) country_group = { 'country_group_id': 7, 'country_group_name': 'BeNeLux', 'country_group_floor': 1000 } top_ten_start_date = '2018-09-26' top_ten_end_date = '2018-10-02' all_track_start_date = '2018-07-23' all_track_end_date = '2018-10-01' countries = [(1, 'Belgium')] sql = '{env}_SQL_{country_clause}_{limit_clause}' country_clause = ' AND fa.countryid IN (1)' limit_clause = 'LIMIT 30' expected_sql = sql.format( env=base_config.ENVIRONMENT_TEST, country_clause=country_clause, limit_clause=limit_clause) expected_params = { 'weekly_streams_minimum': 1000, 'top_ten_start_date': '2018-09-26', 'top_ten_end_date': '2018-10-02', 'all_track_start_date': '2018-07-23', 'all_track_end_date': '2018-10-01'} mock_loader.load_query.return_value = sql mock_snowflake.fetchall.return_value = [] result = fetch_trending_tracks.get_trending_tracks( mock_snowflake.session, countries, country_group, top_ten_start_date, top_ten_end_date, all_track_start_date, all_track_end_date) mock_loader.load_query.assert_called_with('fetch_trending_tracks') mock_snowflake.session.execute.assert_called_with( expected_sql, expected_params) assert result == [] @freeze_time('2018-10-04') def test_get_trending_tracks_global(monkeypatch, mock_snowflake): """Test getting the trending tracks for the global country group.""" with patch('activity_detector.flows.trending_tracks.tasks' '.fetch_trending_tracks.sql_loader', autospec=True) \ as mock_loader: all_time_streams = [('ISRC1', 1)] monkeypatch.setattr( fetch_trending_tracks, 'fetch_all_time_streams', MagicMock(return_value=all_time_streams)) monkeypatch.setattr( fetch_trending_tracks, 'get_release_image_url', MagicMock(return_value='image_url')) country_group = { 'country_group_id': 1, 'country_group_name': 'Global', 'country_group_floor': 1000 } release_date = datetime.date.today() top_ten_start_date = '2018-09-26' top_ten_end_date = '2018-10-02' all_track_start_date = '2018-07-23' all_track_end_date = '2018-10-01' countries = [] sql = '{env}_SQL_{country_clause}_{limit_clause}' country_clause = '' limit_clause = 'LIMIT 15' expected_sql = sql.format( env=base_config.ENVIRONMENT_TEST, country_clause=country_clause, limit_clause=limit_clause) expected_params = { 'weekly_streams_minimum': 1000, 'top_ten_start_date': '2018-09-26', 'top_ten_end_date': '2018-10-02', 'all_track_start_date': '2018-07-23', 'all_track_end_date': '2018-10-01'} mock_loader.load_query.return_value = sql mock_snowflake.fetchall.return_value = [ ( 1, 'Label Global', 'ISRC1', 'Track Global', 666, 'Track UPC', 1, release_date, 100, 66.6, 6, json.dumps(['Artist Global']) ) ] result = fetch_trending_tracks.get_trending_tracks( mock_snowflake.session, countries, country_group, top_ten_start_date, top_ten_end_date, all_track_start_date, all_track_end_date) mock_loader.load_query.assert_called_with('fetch_trending_tracks') mock_snowflake.session.execute.assert_called_with( expected_sql, expected_params) assert result == [ { 'label_id': 1, 'label_name': 'Label Global', 'isrc': 'ISRC1', 'track_name': 'Track Global', 'artist_names': ['Artist Global'], 'most_recent_week_streams': 666, 'expected_weekly_average': 100.0, 'percent_above_avg': 67, 'spike_score': 6, 'thumbnail_url': 'image_url', 'streams_all_time': 1, 'release_date': '2018-10-04' } ] def test_create_notification(monkeypatch): """Test creating notification.""" payload = { 'country_group_name': 'United Kingdom', 'trending_tracks': 'TRENDING TRACKS', 'global_trending_tracks': 'GLOBAL TRENDING TRACKS', 'start_date': '2018-09-26', 'end_date': '2018-10-02', 'notes': 'Itunes' } expcected_notification = { 'feed_name': '{0}_{1}'.format( config.FEED_NAME, config.FEEDS['United Kingdom']), 'feed_id': config.FEED_ID, 'payload': { 'actor': 'The Orchard Activity Detector', 'verb': 'Detected', 'object': 'Trend', 'start_date': '2018-09-26', 'end_date': '2018-10-02', 'country_group_name': 'United Kingdom', 'trending_tracks': 'TRENDING TRACKS', 'global_trending_tracks': 'GLOBAL TRENDING TRACKS', 'notes': 'Itunes' } } monkeypatch.setattr(ows_notifications, 'create_notification', MagicMock()) fetch_trending_tracks.create_notification(payload) ows_notifications.create_notification.assert_called_with( expcected_notification) def test_create_notification_global(monkeypatch): """Test creating notification for the global country group.""" payload = { 'country_group_name': 'Global', 'trending_tracks': 'TRENDING TRACKS', 'start_date': '2018-09-26', 'end_date': '2018-10-02' } expcected_notification = { 'feed_name': '{0}_{1}'.format( config.FEED_NAME, config.FEEDS['Global']), 'feed_id': config.FEED_ID, 'payload': { 'actor': 'The Orchard Activity Detector', 'verb': 'Detected', 'object': 'Trend', 'start_date': '2018-09-26', 'end_date': '2018-10-02', 'country_group_name': 'Global', 'trending_tracks': 'TRENDING TRACKS' } } monkeypatch.setattr(ows_notifications, 'create_notification', MagicMock()) fetch_trending_tracks.create_notification(payload) ows_notifications.create_notification.assert_called_with( expcected_notification) def test_fetch_all_time_streams(mock_snowflake): """Test fetching all time stream for isrcs.""" with patch('activity_detector.flows.trending_tracks.tasks' '.fetch_trending_tracks.sql_loader', autospec=True) \ as mock_loader: isrcs = ['ISRC1', 'ISRC2', 'ISRC3'] labelids = ['123', '345', '678'] sql = '{env}_SQL_{where_clause}' where_clause = ( "WHERE dt.isrc IN ('ISRC1', 'ISRC2', 'ISRC3') " "AND dr.deletions = 'N' " "AND fa.labelid IN ('123', '345', '678') " 'AND fa.feedid NOT IN (43, 44, 49, 50, 51)') expected_sql = sql.format( env=base_config.ENVIRONMENT_TEST, where_clause=where_clause) mock_loader.load_query.return_value = sql mock_snowflake.fetchall.return_value = 'FETCH ALL' result = fetch_trending_tracks.fetch_all_time_streams( mock_snowflake.session, isrcs, labelids) mock_loader.load_query.assert_called_with('fetch_all_time_streams') mock_snowflake.session.execute.assert_called_with(expected_sql) assert result == 'FETCH ALL' def test_add_total_streams(): """Test adding all time streams to trending tracks.""" trending_tracks = [ ( 1, 'Label Global', 'ISRC1', 'Track Global', 666, 'Track UPC', 1, '2018-10-04', 100, 66.6, 6, json.dumps(['Artist Global']) ), ( 2, 'Label USA', 'ISRC2', 'Track USA', 666, 'TRACK UPC', 2, '2018-10-04', 100, 66.6, 6, json.dumps(['Artist USA']) ) ] all_streams_by_isrc = [ ('ISRC1', 1), ('ISRC2', 2) ] expected_result = [ ( 1, 'Label Global', 'ISRC1', 'Track Global', 666, 'Track UPC', 1, '2018-10-04', 100, 66.6, 6, json.dumps(['Artist Global']), 1 ), ( 2, 'Label USA', 'ISRC2', 'Track USA', 666, 'TRACK UPC', 2, '2018-10-04', 100, 66.6, 6, json.dumps(['Artist USA']), 2 ) ] result = fetch_trending_tracks.add_total_streams( trending_tracks, all_streams_by_isrc) assert result == expected_result def test_get_release_image_url(monkeypatch): """Test tasks.get_release_image_url function.""" monkeypatch.setattr( ows_assets, 'get_release_image_url', MagicMock(return_value='url_from_assets')) assert fetch_trending_tracks.get_release_image_url(777, 'upc') == \ 'url_from_assets' def test_get_release_image_url_none(monkeypatch): """Test fetch_trending_tracks.get_release_image_url function.""" monkeypatch.setattr( ows_assets, 'get_release_image_url', MagicMock(return_value=None)) assert fetch_trending_tracks.get_release_image_url(777, 'upc') is None def test_check_missing_data_per_store(): """Test fetch_trending_tracks.check_missing_data_per_store function.""" last_dates_per_store = [ { 'store_name': 'Store_1', 'last_date': '2017-12-01' }, { 'store_name': 'Store_2', 'last_date': '2017-11-28' }, { 'store_name': 'Store_3', 'last_date': '2017-12-02' } ] top_ten_end_date = '2017-12-02' result = fetch_trending_tracks.check_missing_data_per_store( last_dates_per_store, top_ten_end_date) assert result == 'Store_1, Store_2' def test_check_missing_data_per_store_with_no_dates(): """Test fetch_trending_tracks.check_missing_data_per_store function.""" last_dates_per_store = [ { 'store_name': 'Store_1' }, { 'store_name': 'Store_2', 'last_date': '2017-11-28' }, { 'store_name': 'Store_3', 'last_date': '2017-12-02' } ] top_ten_end_date = '2017-12-02' result = fetch_trending_tracks.check_missing_data_per_store( last_dates_per_store, top_ten_end_date) assert result == 'Store_1, Store_2' def test_check_missing_data_per_store_with_no_last_dates_per_store(): """Test fetch_trending_tracks.check_missing_data_per_store function.""" last_dates_per_store = [] top_ten_end_date = '2017-12-02' result = fetch_trending_tracks.check_missing_data_per_store( last_dates_per_store, top_ten_end_date) assert result == ''