"""Unit tests for downloads utility functions.""" import datetime from analytics.utils import downloads as downloads_utils class TestGetEmptyDownloadForPeriod(object): """Test get_empty_downloads_for_period.""" def test_get_empty_downloads_for_period(self): """Test if result matches expected result.""" time_period = { "start_date": datetime.date(2018, 10, 15), "end_date": datetime.date(2018, 10, 16), } result = downloads_utils.get_empty_downloads_for_period( time_period, time_period ) expected = [ {"date": "2018-10-15", "downloads": 0}, {"date": "2018-10-16", "downloads": 0}, ] assert result == expected class TestGetDownloadsForStore(object): """Test get_downloads_for_store.""" def test_get_downloads_for_store(self): """Test if result matches expected result.""" time_period = { "start_date": datetime.date(2018, 10, 15), "end_date": datetime.date(2018, 10, 21), } downloads = [ {"date": datetime.date(2018, 10, 15), "downloads": 1, "store_id": 286}, {"date": datetime.date(2018, 10, 15), "downloads": 2, "store_id": 1}, {"date": datetime.date(2018, 10, 16), "downloads": 2, "store_id": 1}, {"date": datetime.date(2018, 10, 20), "downloads": 40, "store_id": 286}, ] result = downloads_utils.get_downloads_for_store( downloads, 1, time_period, time_period ) expected = [ {"date": "2018-10-15", "downloads": 2}, {"date": "2018-10-16", "downloads": 2}, {"date": "2018-10-17", "downloads": 0}, {"date": "2018-10-18", "downloads": 0}, {"date": "2018-10-19", "downloads": 0}, {"date": "2018-10-20", "downloads": 0}, {"date": "2018-10-21", "downloads": 0}, ] assert result == expected class TestGetDownloadsByStore(object): """Test get_downloads_by_store.""" def test_get_downloads_by_store(self): """Test if result matches expected result.""" time_period = { "start_date": datetime.date(2018, 10, 15), "end_date": datetime.date(2018, 10, 16), } downloads = [ {"date": datetime.date(2018, 10, 15), "downloads": 2, "store_id": 1}, {"date": datetime.date(2018, 10, 16), "downloads": 2, "store_id": 1}, ] result = downloads_utils.get_downloads_by_store(downloads, time_period) expected = [ { "id": 1, "name": "Apple Music", "total_downloads": 4, "items": [ {"date": "2018-10-15", "downloads": 2}, {"date": "2018-10-16", "downloads": 2}, ], } ] assert result == expected class TestGetDownloadsForCountry(object): """Test get_downloads_for_country.""" def test_get_downloads_for_country(self): """Test if result matches expected result.""" time_period = { "start_date": datetime.date(2018, 10, 15), "end_date": datetime.date(2018, 10, 21), } downloads = [ {"date": datetime.date(2018, 10, 15), "downloads": 1, "country_code": "US"}, {"date": datetime.date(2018, 10, 15), "downloads": 2, "country_code": "GB"}, {"date": datetime.date(2018, 10, 16), "downloads": 2, "country_code": "GB"}, { "date": datetime.date(2018, 10, 20), "downloads": 40, "country_code": "US", }, ] result = downloads_utils.get_downloads_for_country( downloads, "US", time_period, time_period ) expected = [ {"date": "2018-10-15", "downloads": 1}, {"date": "2018-10-16", "downloads": 0}, {"date": "2018-10-17", "downloads": 0}, {"date": "2018-10-18", "downloads": 0}, {"date": "2018-10-19", "downloads": 0}, {"date": "2018-10-20", "downloads": 40}, {"date": "2018-10-21", "downloads": 0}, ] assert result == expected class TestGetDownloadsByCountry(object): """Test get_downloads_by_country.""" def test_get_downloads_by_country(self): """Test if result matches expected result.""" time_period = { "start_date": datetime.date(2018, 10, 15), "end_date": datetime.date(2018, 10, 16), } downloads = [ {"date": datetime.date(2018, 10, 15), "downloads": 2, "country_code": "US"}, {"date": datetime.date(2018, 10, 16), "downloads": 2, "country_code": "US"}, ] result = downloads_utils.get_downloads_by_country(downloads, time_period) expected = [ { "code": "US", "items": [ {"date": "2018-10-15", "downloads": 2}, {"date": "2018-10-16", "downloads": 2}, ], } ] assert result == expected class TestGetDownloadsTotals(object): """Test get_downloads_totals.""" def test_get_downloads_totals(self): """Test if result matches expected result.""" time_period = { "start_date": datetime.date(2018, 10, 15), "end_date": datetime.date(2018, 10, 16), } downloads = [ {"date": datetime.date(2018, 10, 15), "downloads": 2}, {"date": datetime.date(2018, 10, 16), "downloads": 2}, ] result = downloads_utils.get_downloads_totals(downloads, time_period) expected = [ {"date": "2018-10-15", "downloads": 2}, {"date": "2018-10-16", "downloads": 2}, ] assert result == expected class TestDownloadsByTrack(object): """Test get_downloads_by_track.""" def test_get_downloads_by_track(self): """Test if result matches expected result.""" downloads = [ { "date": datetime.date(2018, 10, 15), "downloads": 20, "track_unique_id": 321, }, { "date": datetime.date(2018, 10, 16), "downloads": 10, "track_unique_id": 321, }, ] time_period = { "start_date": datetime.date(2018, 10, 15), "end_date": datetime.date(2018, 10, 16), } result = downloads_utils.get_downloads_by_track(downloads, time_period) expected = [ { "track_unique_id": 321, "items": [ {"date": "2018-10-15", "downloads": 20}, {"date": "2018-10-16", "downloads": 10}, ], } ] assert result == expected class TestGetDownloadsBySoundRecording(object): """Test get_downloads_by_sound_recording.""" def test_get_downloads_by_sound_recording(self): """Test if result matches expected result.""" start_date = datetime.date(2018, 10, 15) end_date = datetime.date(2018, 10, 16) downloads = [ {"date": start_date, "downloads": 2, "isrc": "QMFMF1589183"}, {"date": end_date, "downloads": 2, "isrc": "QMFMF1589183"}, ] result = downloads_utils.get_downloads_by_sound_recording( downloads, start_date, end_date ) expected = [ { "isrc": "QMFMF1589183", "items": [ {"date": "2018-10-15", "downloads": 2}, {"date": "2018-10-16", "downloads": 2}, ], } ] assert result == expected class TestGetAllTimeDate: """Test _get_all_time_start_date.""" def test_get_all_time_start_date(self): """Test if result matches expected result.""" start_date = "ALL_TIME" downloads = [ { "date": datetime.date(2018, 10, 15), "downloads": 2, "isrc": "QMFMF1589183", }, { "date": datetime.date(2018, 10, 16), "downloads": 2, "isrc": "QMFMF1589183", }, ] start_date = downloads_utils._get_all_time_start_date(downloads, start_date) expected = datetime.date(2018, 10, 15) assert start_date == expected def test_get_current_start_date(self): """Test if result matches expected result.""" start_date = datetime.date(2018, 10, 16) downloads = [ { "date": datetime.date(2018, 10, 15), "downloads": 2, "isrc": "QMFMF1589183", }, { "date": datetime.date(2018, 10, 16), "downloads": 2, "isrc": "QMFMF1589183", }, ] start_date = downloads_utils._get_all_time_start_date(downloads, start_date) expected = datetime.date(2018, 10, 16) assert start_date == expected