"""Unit tests for util module for working with Apple's Reporter application.""" import os.path import subprocess from unittest.mock import patch import pytest from feed_ingestion.util import itunes_reporter def test_reporter_exception(): """Test ReporterException object.""" exception = itunes_reporter.ReporterException('blah blah', 210) assert exception.error_code == 210 def test_itunes_reporter(): """Test ItunesReporter object creation.""" reporter = itunes_reporter.ItunesReporter( 'jar', 199912, 1123131, '2015-01-01', country='UA') assert reporter.reporter_jar == 'jar' assert reporter.vendor_id == 199912 assert reporter.account == 1123131 assert reporter.date == '2015-01-01' assert reporter.country == 'UA' def test_get_report_versions_oldest_versions(): """Test get_report_versions method.""" reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props', '2016-04-27', country='UA') assert reporter.file_report_versions.amContent == '1_0' assert reporter.current_report_versions.amContent == '1_2' assert reporter.file_report_versions.amStreams == '1_0' assert reporter.current_report_versions.amStreams == '1_3' assert reporter.file_report_versions.amEvent == '1_1' assert reporter.current_report_versions.amEvent == '1_2' assert reporter.file_report_versions.amContentDemographics == '1_0' assert reporter.current_report_versions.amContentDemographics == '1_2' assert reporter.file_report_versions.amShazam == '1_0' assert reporter.current_report_versions.amShazam == '1_2' assert reporter.file_report_versions.amNonRoyaltyStreams == '1_0' assert reporter.current_report_versions.amNonRoyaltyStreams == '1_1' def test_get_report_versions_old_versions(): """Test get_report_versions method.""" reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props', '2017-11-16', country='UA') assert reporter.file_report_versions.amContent == '1_1' assert reporter.current_report_versions.amContent == '1_2' assert reporter.file_report_versions.amStreams == '1_1' assert reporter.current_report_versions.amStreams == '1_3' assert reporter.file_report_versions.amEvent == '1_1' assert reporter.current_report_versions.amEvent == '1_2' assert reporter.file_report_versions.amContentDemographics == '1_0' assert reporter.current_report_versions.amContentDemographics == '1_2' assert reporter.file_report_versions.amShazam == '1_0' assert reporter.current_report_versions.amShazam == '1_2' assert reporter.file_report_versions.amNonRoyaltyStreams == '1_0' assert reporter.current_report_versions.amNonRoyaltyStreams == '1_1' def test_get_report_versions_new_versions(): """Test get_report_versions method.""" reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props', '2021-04-08', country='UA') assert reporter.file_report_versions.amContent == '1_2' assert reporter.current_report_versions.amContent == '1_2' assert reporter.file_report_versions.amStreams == '1_3' assert reporter.current_report_versions.amStreams == '1_3' assert reporter.file_report_versions.amEvent == '1_2' assert reporter.current_report_versions.amEvent == '1_2' assert reporter.file_report_versions.amContentDemographics == '1_0' assert reporter.current_report_versions.amContentDemographics == '1_2' assert reporter.file_report_versions.amShazam == '1_2' assert reporter.current_report_versions.amShazam == '1_2' assert reporter.file_report_versions.amNonRoyaltyStreams == '1_1' assert reporter.current_report_versions.amNonRoyaltyStreams == '1_1' assert reporter.file_report_versions.amLibraryEvents == '1_0' assert reporter.current_report_versions.amLibraryEvents == '1_0' assert reporter.file_report_versions.amTotalLibraryAdds == '1_0' assert reporter.current_report_versions.amTotalLibraryAdds == '1_0' assert reporter.file_report_versions.amArtists == '1_0' assert reporter.current_report_versions.amArtists == '1_0' assert reporter.file_report_versions.amPlaylists == '1_0' assert reporter.current_report_versions.amPlaylists == '1_0' assert reporter.file_report_versions.amSongs == '1_0' assert reporter.current_report_versions.amSongs == '1_0' assert reporter.current_report_versions.amStreamsSummary == '1_2' assert reporter.current_report_versions.amContainer == '1_1' assert reporter.current_report_versions.amNonRoyaltySummaryStreams == '1_2' def test_itunes_reporter_file_calls_oldest_versions(): """Test get filename methods.""" reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props', '2016-04-27', country='UA') assert reporter.apple_music_event_file == ( 'AppleMusic_Event_vendor_20160427_V1_1.txt.gz') assert reporter.apple_music_content_file == ( 'AppleMusic_Content_vendor_20160427.txt.gz') assert reporter.apple_music_streams_file == ( 'AppleMusic_Streams_vendor_20160427.txt.gz') assert reporter.itunes_file == ( 'D_D_vendor_20160427_V1_1.txt.gz') assert reporter.apple_music_summary_file == ( 'S2_vendor_0416_UA.txt.gz') assert reporter.apple_music_non_royalty_streams_file == ( 'AppleMusic_NonRoyaltyStreams_vendor_20160427.txt.gz') def test_itunes_reporter_file_calls_old_versions(): """Test get filename methods.""" reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props', '2017-11-16', country='UA') assert reporter.apple_music_event_file == ( 'AppleMusic_Event_vendor_20171116_V1_1.txt.gz') assert reporter.apple_music_content_file == ( 'AppleMusic_Content_vendor_20171116_V1_1.txt.gz') assert reporter.apple_music_streams_file == ( 'AppleMusic_Streams_vendor_20171116_V1_1.txt.gz') assert reporter.itunes_file == ( 'D_D_vendor_20171116_V1_1.txt.gz') assert reporter.apple_music_summary_file == ( 'S2_vendor_1117_UA.txt.gz') assert reporter.apple_music_non_royalty_streams_file == ( 'AppleMusic_NonRoyaltyStreams_vendor_20171116.txt.gz') def test_itunes_reporter_file_calls_new_versions(): """Test get filename methods.""" reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props', '2020-11-11', country='UA') assert reporter.apple_music_event_file == ( 'AppleMusic_Event_vendor_20201111_V1_2.txt.gz') assert reporter.apple_music_content_file == ( 'AppleMusic_Content_vendor_20201111_V1_2.txt.gz') assert reporter.apple_music_streams_file == ( 'AppleMusic_Streams_vendor_20201111_V1_3.txt.gz') assert reporter.apple_music_sub_reference_file == ( 'AppleMusic_SubscriptionReference_vendor_20201111.txt.gz') assert reporter.apple_music_shazam_file == ( 'AMShazam_vendor_20201111_V1_2.txt.gz') assert reporter.itunes_file == ( 'D_D_vendor_20201111_V1_2.txt.gz') assert reporter.apple_music_summary_file == ( 'S2_vendor_1120_UA.txt.gz') assert reporter.apple_music_non_royalty_streams_file == ( 'AppleMusic_NonRoyaltyStreams_vendor_20201111_V1_1.txt.gz') assert reporter.apple_music_libraryevents_file == ( 'AppleMusic_LibraryEvents_vendor_20201111.txt.gz') assert reporter.apple_music_totallibraryadds_file == ( 'AppleMusic_TotalLibraryAdds_vendor_20201111.txt.gz') assert reporter.apple_music_artists_file == ( 'AppleMusic_ArtistUniques_vendor_20201111.txt.gz') assert reporter.apple_music_playlists_file == ( 'AppleMusic_PlaylistUniques_vendor_20201111.txt.gz') assert reporter.apple_music_songs_file == ( 'AppleMusic_SongUniques_vendor_20201111.txt.gz') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter._execute_itunes_reporter') def test_download_sales_report(mock_execute_reporter): """Test download_sales_report method.""" date = '2015-01-01' reporter = itunes_reporter.ItunesReporter( 'jar', 199912, 1123131, date) reporter.download_apple_music_event_file() mock_execute_reporter.assert_called_with( 'amEvent', 'Detailed', 'Daily', '20150101', '1_2') reporter.download_apple_music_content_file() mock_execute_reporter.assert_called_with( 'amContent', 'Detailed', 'Daily', '20150101', '1_2') reporter.download_apple_music_streams_file() mock_execute_reporter.assert_called_with( 'amStreams', 'Detailed', 'Daily', '20150101', '1_3') reporter.download_apple_music_streams_file() mock_execute_reporter.assert_called_with( 'amStreams', 'Detailed', 'Daily', '20150101', '1_3') reporter.download_apple_music_sub_reference_file() mock_execute_reporter.assert_called_with( 'amSubscriptionReference', 'Summary', 'Daily', '20150101', '') reporter.download_apple_music_non_royalty_streams_file() mock_execute_reporter.assert_called_with( 'amNonRoyaltyStreams', 'Detailed', 'Daily', '20150101', '1_1') reporter.download_apple_music_libraryevents_file() mock_execute_reporter.assert_called_with( 'amLibraryEvents', 'Detailed', 'Daily', '20150101', '1_0') reporter.download_apple_music_totallibraryadds_file() mock_execute_reporter.assert_called_with( 'amTotalLibraryAdds', 'Summary', 'Daily', '20150101', '1_0') reporter.download_apple_music_artists_file() mock_execute_reporter.assert_called_with( 'amArtists', 'Uniques', 'Daily', '20150101', '1_0') reporter.download_apple_music_playlists_file() mock_execute_reporter.assert_called_with( 'amPlaylists', 'Uniques', 'Daily', '20150101', '1_0') reporter.download_apple_music_songs_file() mock_execute_reporter.assert_called_with( 'amSongs', 'Uniques', 'Daily', '20150101', '1_0') with pytest.raises(Exception): reporter.download_sales_report('foo') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.download_apple_music_summary_file') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.download_itunes_file') def test_download_finance_report( mock_download_itunes, mock_download_apple_music_summary): """Test download_finance_report method.""" date = '2015-01-01' reporter = itunes_reporter.ItunesReporter( 'jar', 199912, 1123131, date, country='UA') reporter.download_finance_report('AppleMusicSummary') mock_download_apple_music_summary.assert_called_once_with() with pytest.raises(Exception): reporter.download_finance_report('foo') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter._execute_itunes_reporter') def test_download_apple_music_file(mock_execute_reporter): """Test download_apple_music__event_file methods.""" reporter = itunes_reporter.ItunesReporter( 'jar', 199912, 1123131, '2021-03-01') reporter.download_apple_music_event_file() mock_execute_reporter.assert_called_with( 'amEvent', 'Detailed', 'Daily', '20210301', '1_2') reporter.download_apple_music_content_file() mock_execute_reporter.assert_called_with( 'amContent', 'Detailed', 'Daily', '20210301', '1_2') reporter.download_apple_music_streams_file() mock_execute_reporter.assert_called_with( 'amStreams', 'Detailed', 'Daily', '20210301', '1_3') reporter.download_apple_music_streams_file() mock_execute_reporter.assert_called_with( 'amStreams', 'Detailed', 'Daily', '20210301', '1_3') reporter.download_apple_music_sub_reference_file() mock_execute_reporter.assert_called_with( 'amSubscriptionReference', 'Summary', 'Daily', '20210301', '') reporter.download_apple_music_non_royalty_streams_file() mock_execute_reporter.assert_called_with( 'amNonRoyaltyStreams', 'Detailed', 'Daily', '20210301', '1_1') reporter.download_apple_music_libraryevents_file() mock_execute_reporter.assert_called_with( 'amLibraryEvents', 'Detailed', 'Daily', '20210301', '1_0') reporter.download_apple_music_totallibraryadds_file() mock_execute_reporter.assert_called_with( 'amTotalLibraryAdds', 'Summary', 'Daily', '20210301', '1_0') reporter.download_apple_music_artists_file() mock_execute_reporter.assert_called_with( 'amArtists', 'Uniques', 'Daily', '20210301', '1_0') reporter.download_apple_music_playlists_file() mock_execute_reporter.assert_called_with( 'amPlaylists', 'Uniques', 'Daily', '20210301', '1_0') reporter.download_apple_music_songs_file() mock_execute_reporter.assert_called_with( 'amSongs', 'Uniques', 'Daily', '20210301', '1_0') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter._execute_itunes_reporter') def test_download_itunes_file(mock_execute_reporter): """Test download_itunes__event_file methods.""" reporter = itunes_reporter.ItunesReporter( 'jar', 199912, 1123131, '2015-01-01') reporter.download_itunes_file() mock_execute_reporter.assert_called_with( 'Sales', 'Detailed', 'Daily', '20150101', '1_3') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter._execute_itunes_reporter') def test_download_apple_podcasts_file(mock_execute_reporter): """Test download_apple_podcasts__event_file methods.""" reporter = itunes_reporter.ItunesReporter( 'jar', 199912, 1123131, '2021-03-01') reporter.download_apple_podcasts_sales_summary_file() mock_execute_reporter.assert_called_with( 'apSubscriptionsSales', 'Summary', 'Daily', '20210301', '1_0') reporter.download_apple_podcasts_sales_summary_weekly_file() mock_execute_reporter.assert_called_with( 'apSubscriptionsSales', 'Summary', 'Weekly', '20210301', '1_0') reporter.download_apple_podcasts_sales_summary_monthly_file() mock_execute_reporter.assert_called_with( 'apSubscriptionsSales', 'Summary', 'Monthly', '202103', '1_0') reporter.download_apple_podcasts_subscription_snapshot_file() mock_execute_reporter.assert_called_with( 'apSubscriptionsSnapshot', 'Summary', 'Daily', '20210301', '1_0') reporter.download_apple_podcasts_subscription_snapshot_weekly_file() mock_execute_reporter.assert_called_with( 'apSubscriptionsSnapshot', 'Summary', 'Weekly', '20210301', '1_0') reporter.download_apple_podcasts_subs_snapshot_monthly_file() mock_execute_reporter.assert_called_with( 'apSubscriptionsSnapshot', 'Summary', 'Monthly', '202103', '1_0') reporter.download_apple_podcasts_subscription_events_file() mock_execute_reporter.assert_called_with( 'apSubscriptionsEvents', 'Summary', 'Daily', '20210301', '1_0') reporter.download_apple_podcasts_subscription_events_weekly_file() mock_execute_reporter.assert_called_with( 'apSubscriptionsEvents', 'Summary', 'Weekly', '20210301', '1_0') reporter.download_apple_podcasts_subscription_events_monthly_file() mock_execute_reporter.assert_called_with( 'apSubscriptionsEvents', 'Summary', 'Monthly', '202103', '1_0') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.apple_podcasts_sales_summary_file') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.download_apple_music_container_file') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.download_apple_music_summary_non_royalty_streams_file') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.download_apple_music_summary_streams_file') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.download_apple_music_songs_file') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.download_apple_music_playlists_file') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.download_apple_music_artists_file') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.download_apple_music_totallibraryadds_file') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.download_apple_music_libraryevents_file') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.apple_music_non_royalty_streams_file') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.apple_music_event_file') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.apple_music_content_file') @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.apple_music_streams_file') def test_get_sales_report_file_name( mock_download_am_streams, mock_download_am_content, mock_download_am_event, mock_download_am_non_royalty_streams, mock_download_am_libraryevents, mock_download_am_totallibraryadds, mock_download_am_artists, mock_download_am_playlists, mock_download_am_songs, mock_download_am_summary_streams, mock_download_am_summary_non_royalty_streams, mock_download_am_container, mock_ap_sales_summary): """Test get_sales_report_file_name method.""" reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props', '2015-01-01') assert reporter.get_sales_report_file_name('amEvent') == ( reporter.apple_music_event_file) assert reporter.get_sales_report_file_name('amContent') == ( reporter.apple_music_content_file) assert reporter.get_sales_report_file_name('amStreams') == ( reporter.apple_music_streams_file) assert reporter.get_sales_report_file_name('amStreamsSummary') == ( reporter.apple_music_summary_streams_file) assert reporter.get_sales_report_file_name('itunes') == ( reporter.itunes_file) assert reporter.get_sales_report_file_name('amNonRoyaltyStreams') == ( reporter.apple_music_non_royalty_streams_file) assert reporter.get_sales_report_file_name('amLibraryEvents') == ( reporter.apple_music_libraryevents_file) assert reporter.get_sales_report_file_name('amTotalLibraryAdds') == ( reporter.apple_music_totallibraryadds_file) assert reporter.get_sales_report_file_name('amArtists') == ( reporter.apple_music_artists_file) assert reporter.get_sales_report_file_name('amPlaylists') == ( reporter.apple_music_playlists_file) assert reporter.get_sales_report_file_name('amSongs') == ( reporter.apple_music_songs_file) assert reporter.get_sales_report_file_name( 'amNonRoyaltySummaryStreams') == ( reporter.apple_music_summary_non_royalty_streams_file) assert reporter.get_sales_report_file_name('amContainer') == ( reporter.apple_music_container_file) assert reporter.get_sales_report_file_name('apSubscriptionsSales') == ( reporter.apple_podcasts_sales_summary_file) assert reporter.get_sales_report_file_name('apSubscriptionsSalesWeekly') \ == (reporter.apple_podcasts_sales_summary_weekly_file) assert reporter.get_sales_report_file_name('apSubscriptionsSalesMonthly') \ == (reporter.apple_podcasts_sales_summary_monthly_file) assert reporter.get_sales_report_file_name( 'apSubscriptionsSnapshot') == ( reporter.apple_podcasts_subscription_snapshot_file) assert reporter.get_sales_report_file_name('apSubscriptionsEvents') == ( reporter.apple_podcasts_subscription_events_file) with pytest.raises(Exception): reporter.get_sales_report_file_name('foo') @patch('feed_ingestion.util.itunes_reporter.subprocess.check_output') def test_execute_itunes_reporter(mock_check_output): """Test _execute_itunes_reporter method & error handling.""" mock_check_output.return_value = 'blah' reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props', '2015-01-01') output = reporter._execute_itunes_reporter( 'report_type', 'report_subtype', 'date_type', '20150101', '1_1') # expected command runs expected_command = [ 'java', '-jar', 'jar', 'p=vendor_Reporter.properties', 'Sales.getReport', 'vendor,', 'report_type,', 'report_subtype,', 'date_type,', '20150101,', '1_1'] mock_check_output.assert_called_with( expected_command, timeout=14000, universal_newlines=True) assert output == 'blah' # regular exception raised mock_check_output.side_effect = Exception('Boom!') with pytest.raises(Exception): reporter._execute_itunes_reporter( 'report_type', 'report_subtype', 'date_type', '20150101', '1_1') # subprocess exception raised mock_check_output.side_effect = subprocess.CalledProcessError( 1, 'cmd', 'output') with pytest.raises(subprocess.CalledProcessError): reporter._execute_itunes_reporter( 'report_type', 'report_subtype', 'date_type', '20150101', '1_1') # reporter exception raised output = """ 106 Hello World. """ mock_check_output.side_effect = subprocess.CalledProcessError( 1, 'cmd', output) with pytest.raises(itunes_reporter.ReporterException): reporter._execute_itunes_reporter( 'report_type', 'report_subtype', 'date_type', '20150101', '1_1') @patch('feed_ingestion.util.itunes_reporter.subprocess.check_output') def test_execute_itunes_reporter_with_version(mock_check_output): """Test _execute_itunes_reporter method & error handling.""" mock_check_output.return_value = 'blah' reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props', '2015-01-01') output = reporter._execute_itunes_reporter( 'report_type', 'report_subtype', 'date_type', '20150101', '1_1') # expected command runs expected_command = [ 'java', '-jar', 'jar', 'p=vendor_Reporter.properties', 'Sales.getReport', 'vendor,', 'report_type,', 'report_subtype,', 'date_type,', '20150101,', '1_1'] mock_check_output.assert_called_with( expected_command, timeout=14000, universal_newlines=True) assert output == 'blah' def test_parse_reporter_exception(): """Test _parse_reporter_exception method interpreting Exceptions.""" reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props', '2015-01-01') # non-reporter error e = Exception() return_val = reporter._parse_reporter_exception(e) assert return_val is None # reporter error (xml output) e.output = """ 106 Hello World. """ expected_exception = itunes_reporter.ReporterException('Hello World.', 106) return_error = reporter._parse_reporter_exception(e) assert str(expected_exception) == str(return_error) assert expected_exception.error_code == return_error.error_code def test_date_rm_dash(): """Test date_rm_dash property.""" reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props', '2015-01-01') assert reporter.date_rm_dash == '20150101' def test_date_mmyy(): """Test date_mmyy property.""" reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props', '2015-01-01') assert reporter.date_mmyy == '0115' def test_date_yymm(): """Test date_yymm property.""" reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props', '2015-01-05') assert reporter.date_yymm == '201501' def test_date_obj(): """Test date_obj property.""" reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props', '2015-01-01') res = reporter.date_obj assert res.year == 2015 assert res.month == 1 assert res.day == 1 @patch('secrets_manager.swf_ext.SWFSecretsManager.get_cred') @patch('feed_ingestion.util.itunes_reporter.ItunesReporter') def test_get_reporter(mock_itunes_reporter, mock_get_cred): """Test get_reporter method.""" for vendor_name, vendor in itunes_reporter.VENDORS.items(): mock_get_cred.return_value = 'some_access_token' itunes_reporter.get_reporter(vendor_name, '2015-01-01') mock_itunes_reporter.assert_called_with( reporter_jar=itunes_reporter.REPORTER_JAR, account=vendor['ACCOUNT'], vendor_id=vendor['VENDOR_ID'], access_token=None, date='2015-01-01', country=None) with pytest.raises(Exception): itunes_reporter.get_reporter('foo') def test_create_properties_file(): """Test create_properties_file method.""" reporter = itunes_reporter.ItunesReporter( 'jar', 111, 123, '2024-01-01') with reporter.create_properties_file() as properties_file: assert properties_file == '111_Reporter.properties' assert os.path.exists(properties_file) assert not os.path.exists(properties_file) def test_create_properties_file_deleted_externally(): """Test create_properties_file method.""" reporter = itunes_reporter.ItunesReporter( 'jar', 111, 123, '2024-01-01') with reporter.create_properties_file() as properties_file: assert os.path.exists(properties_file) os.unlink(properties_file) assert not os.path.exists(properties_file) # should not raise on context manager exit assert not os.path.exists(properties_file) @patch( 'feed_ingestion.util.itunes_reporter.' 'ItunesReporter.get_available_regions') def test_get_available_regions(mock_get_available_regions): """Test get_vendors_and_regions method.""" reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props') reporter.get_available_regions(report_type='AppleMusicSummary') mock_get_available_regions.assert_called @patch('feed_ingestion.util.itunes_reporter.subprocess.check_output') def test_get_available_regions_regions_reporter_exec(mock_check_output): """Test _execute_itunes_reporter method & error handling.""" mock_check_output.return_value = (""" 80012345 UK AppleMusicSummary """.strip()) reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props') output = reporter.get_available_regions(report_type='AppleMusicSummary') # expected command runs expected_command = [ 'java', '-jar', 'jar', 'p=vendor_Reporter.properties', 'Finance.getVendorsAndRegions'] mock_check_output.assert_called_with( expected_command, timeout=60*25, universal_newlines=True) assert output == ['UK'] # regular exception raised mock_check_output.side_effect = Exception('Boom!') with pytest.raises(Exception): reporter.get_available_regions(report_type='AppleMusicSummary') @patch('feed_ingestion.util.itunes_reporter.subprocess.check_output') def test_get_available_regions_regions_return_values(mock_check_output): """Test _execute_itunes_reporter method & error handling.""" mock_check_output.return_value = (""" 80012345 AE AppleMusicSummary RU Financial BG AppleMusicSummary """.strip()) reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props') output = reporter.get_available_regions(report_type='AppleMusicSummary') # expected command runs expected_command = [ 'java', '-jar', 'jar', 'p=vendor_Reporter.properties', 'Finance.getVendorsAndRegions'] mock_check_output.assert_called_with( expected_command, timeout=60*25, universal_newlines=True) reporter.get_available_regions( report_type='AppleMusicSummary') assert 'AE' in output assert 'BG' in output @patch('feed_ingestion.util.itunes_reporter.subprocess.check_output') def test_get_available_regions_regions_return_empty_list(mock_check_output): """Test _execute_itunes_reporter method & error handling.""" mock_check_output.return_value = (""" 80012345 AE Financial RU Financial BG Financial """.strip()) reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props') output = reporter.get_available_regions(report_type='AppleMusicSummary') assert output == [] # regular exception raised mock_check_output.side_effect = Exception('Boom!') with pytest.raises(Exception): reporter.get_available_regions(report_type='AppleMusicSummary') @patch('feed_ingestion.util.itunes_reporter.subprocess.check_output') def test_get_available_regions_regions_return_from_several_vendors( mock_check_output): """Test _execute_itunes_reporter method & error handling.""" mock_check_output.return_value = (""" 80012345 AE AppleMusicSummary UK AppleMusicSummary ZZ Financial 80067891 AE Financial TR AppleMusicSummary BG AppleMusicSummary """.strip()) reporter = itunes_reporter.ItunesReporter( 'jar', 'vendor', 'props') output = reporter.get_available_regions(report_type='AppleMusicSummary') assert 'AE' and 'UK' and 'TR' and 'BG' in output # regular exception raised mock_check_output.side_effect = Exception('Boom!') with pytest.raises(Exception): reporter.get_available_regions(report_type='AppleMusicSummary')