from unittest import TestCase from unittest.mock import Mock from apollo_delphi_migration.renaming import ( SpotifyRenamingStrategy, ApolloAppleMusicRenamingStrategy, TheOrchardAppleMusicRenamingStrategy ) from tests import logger class SpotifyRenamingStrategyTestCase(TestCase): def setUp(self) -> None: self.__logger_mock = Mock() self.__strategy = SpotifyRenamingStrategy(self.__logger_mock) def test_rename_should_raise_error_when_key_is_empty(self): self.assertRaises(ValueError, self.__strategy.rename, '') def test_rename_should_raise_error_when_not_match(self): self.assertRaises(ValueError, self.__strategy.rename, 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_1_amContent.tsv') def test_rename_streams_v1_should_return_new_key(self): expected = 'spotify/streams/v1/report_date=2014-12-01/report_licensor=sme/streams_20141201_US.gz' original = 'spotify/2014-12-01/spotify_2014-12-01_sony_v1.0_us_streams.ndjson' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_streams_v2_should_return_new_key(self): expected = 'spotify/streams/v2/report_date=2019-01-01/report_licensor=smejp/streams_20190101_JP.gz' original = 'spotify/2019-01-01/spotify_2019-01-01_smej_v2.0_jp_streams.ndjson' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_tracks_v1_should_return_new_key(self): expected = 'spotify/tracks/v1/report_date=2019-01-01/report_licensor=theorchard/tracks_20190101.gz' original = 'spotify/2019-01-01/spotify_2019-01-01_theorchard_v1.0_tracks.ndjson' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_users_v1_should_return_new_key(self): expected = 'spotify/users/v1/report_date=2019-01-01/report_licensor=theorchard/users_20190101.gz' original = 'spotify/2019-01-01/spotify_2019-01-01_theorchard_v1.0_users.ndjson' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_users_v2_should_return_new_key(self): expected = 'spotify/users/v2/report_date=2019-01-01/report_licensor=theorchard/users_20190101.gz' original = 'spotify/2019-01-01/spotify_2019-01-01_theorchard_v2.0_users.ndjson' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_sub_30_sec_streams_v2_should_return_new_key(self): expected = 'spotify/sub_30_sec_streams/v2/report_date=2019-01-01/report_licensor=sme/sub_30_sec_streams_20190101_RU.gz' original = 'spotify/2019-01-01/spotify_2019-01-01_sony_v2.4_ru_sub_30_sec_streams.ndjson' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_aggregatedstreams_v2_should_return_new_key(self): expected = 'spotify/aggregatedstreams/v2/report_date=2019-01-01/report_licensor=smejpintl/aggregatedstreams_20190101.gz' original = 'spotify/2019-01-01/spotify_2019-01-01_smejintl_v2.0_aggregatedstreams.ndjson' self.assertEqual(expected, self.__strategy.rename(original)) def can_handler_should_return_true(self): key = 'spotify/streams/v1/report_date=2014-12-01/report_licensor=sme/streams_20141201_US.gz' self.assertTrue(self.__strategy.can_handle(key)) def can_handler_should_return_false(self): key = 'unknown/streams/v1/report_date=2014-12-01/report_licensor=sme/streams_20141201_US.gz' self.assertTrue(self.__strategy.can_handle(key)) class ApolloAppleMusicRenamingStrategyTestCase(TestCase): def setUp(self) -> None: self.__logger_mock = Mock() self.__strategy = ApolloAppleMusicRenamingStrategy(self.__logger_mock) def test_rename_should_raise_error_when_key_is_empty(self): self.assertRaises(ValueError, self.__strategy.rename, '') def test_rename_should_raise_error_when_not_match(self): self.assertRaises(ValueError, self.__strategy.rename, 'spotify/streams/v1/report_date=2014-12-01/report_licensor=sme/streams_20141201_US.gz') def test_rename_streams_v1_0_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_0_amStreams.tsv' expected = 'apple/streams/v1_0/report_date=2019-01-01/report_licensor=smejp/AppleMusic_Streams_86780702_20190101_V1_0.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_streams_v1_1_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_1_amStreams.tsv' expected = 'apple/streams/v1_1/report_date=2019-01-01/report_licensor=smejp/AppleMusic_Streams_86780702_20190101_V1_1.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_streams_v1_2_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_2_amStreams.tsv' expected = 'apple/streams/v1_2/report_date=2019-01-01/report_licensor=smejp/AppleMusic_Streams_86780702_20190101_V1_2.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_content_v1_0_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_0_amContent.tsv' expected = 'apple/content/v1_0/report_date=2019-01-01/report_licensor=smejp/AppleMusic_Content_86780702_20190101_V1_0.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_content_v1_1_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_1_amContent.tsv' expected = 'apple/content/v1_1/report_date=2019-01-01/report_licensor=smejp/AppleMusic_Content_86780702_20190101_V1_1.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_content_v1_2_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_2_amContent.tsv' expected = 'apple/content/v1_2/report_date=2019-01-01/report_licensor=smejp/AppleMusic_Content_86780702_20190101_V1_2.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_event_v1_0_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_0_amEvent.tsv' expected = 'apple/event/v1_0/report_date=2019-01-01/report_licensor=smejp/AppleMusic_Event_86780702_20190101_V1_0.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_event_v1_1_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_1_amEvent.tsv' expected = 'apple/event/v1_1/report_date=2019-01-01/report_licensor=smejp/AppleMusic_Event_86780702_20190101_V1_1.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_event_v1_2_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_2_amEvent.tsv' expected = 'apple/event/v1_2/report_date=2019-01-01/report_licensor=smejp/AppleMusic_Event_86780702_20190101_V1_2.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_contentdemographics_v1_0_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_0_amContentDemographics.tsv' expected = 'apple/contentdemographics/v1_0/report_date=2019-01-01/report_licensor=smejp/AppleMusic_ContentDemographics_86780702_20190101_V1_0.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_contentdemographics_v1_1_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_1_amContentDemographics.tsv' expected = 'apple/contentdemographics/v1_1/report_date=2019-01-01/report_licensor=smejp/AppleMusic_ContentDemographics_86780702_20190101_V1_1.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_artistdemographics_v1_0_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_0_amArtistDemographics.tsv' expected = 'apple/artistdemographics/v1_0/report_date=2019-01-01/report_licensor=smejp/AppleMusic_ArtistDemographics_86780702_20190101_V1_0.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_artistdemographics_v1_1_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_1_amArtistDemographics.tsv' expected = 'apple/artistdemographics/v1_1/report_date=2019-01-01/report_licensor=smejp/AppleMusic_ArtistDemographics_86780702_20190101_V1_1.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_nonroyaltystreams_v1_0_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_0_amNonRoyaltyStreams.tsv' expected = 'apple/nonroyaltystreams/v1_0/report_date=2019-01-01/report_licensor=smejp/AppleMusic_NonRoyaltyStreams_86780702_20190101_V1_0.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_nonroyaltystreams_v1_1_should_return_new_key(self): original = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_1_amNonRoyaltyStreams.tsv' expected = 'apple/nonroyaltystreams/v1_1/report_date=2019-01-01/report_licensor=smejp/AppleMusic_NonRoyaltyStreams_86780702_20190101_V1_1.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def can_handler_should_return_true(self): key = 'apple/2019-01-01/apple_2019-01-01_smej_86780702_v1_1_amNonRoyaltyStreams.tsv' self.assertTrue(self.__strategy.can_handle(key)) def can_handler_should_return_false(self): key = 'unknown/2019-01-01/apple_2019-01-01_smej_86780702_v1_1_amNonRoyaltyStreams.tsv' self.assertTrue(self.__strategy.can_handle(key)) class TheOrchardAppleMusicRenamingStrategyTestCase(TestCase): def setUp(self) -> None: self.__strategy = TheOrchardAppleMusicRenamingStrategy(logger) def test_rename_streams_should_return_new_key(self): original = 'apple/2016-06-13/AppleMusic_Streams_80029727_20160613.txt.gz' expected = 'apple/streams/v1_0/report_date=2016-06-13/report_licensor=theorchard/AppleMusic_Streams_80029727_20160613_V1_0.txt.gz' self.assertEqual(expected, self.__strategy.rename(original)) def test_rename_content_should_return_new_key(self): original = 'apple/2016-06-13/AppleMusic_Content_80029727_20160613.txt.gz' expected = 'apple/content/v1_0/report_date=2016-06-13/report_licensor=theorchard/AppleMusic_Content_80029727_20160613_V1_0.txt.gz' self.assertEqual(expected, self.__strategy.rename(original))