import unittest from unittest.mock import MagicMock, Mock from slz_downloader.dsp import exceptions from slz_downloader.dsp.amazon import AmazonPrimeClient, AmazonPrimeTheorchardClient from slz_downloader.entities import Job class AmazonSmeClientTestCase(unittest.TestCase): def setUp(self) -> None: self.__content_status_repository_mock = Mock() self.__boto_client = Mock() self.__client = AmazonPrimeClient(logger=Mock()) self.__client.client = Mock() self.__client.client.list_objects_v2 = MagicMock( return_value={ 'IsTruncated': False, 'Contents': [{ 'Key': 'PMN9_A_US_20190908_20190908_User_20190909.txt.zip', }, ] } ) self.job = Job( uow_id='amazonprime-20190906-sme-playlist-v1', unit_of_work_id=0, dsp='amazonprime', report_type='playlist', subtype='Summary', version='v1', report_date='2019-09-06', licensor='sme', extension='txt', config_bucket='delphi-configs', context=['US'], context_params=None, job_id="test_job_id", ) def test_original_content_name(self): self.__client._get_file_name = MagicMock( return_value='PMN9_A_ROW_NA_20190908_20190908_User_20190909.txt.zip' ) self.assertEqual( 'PMN9_A_ROW_NA_20190908_20190908_User_20190909.txt.zip', self.__client.get_original_content_name(self.job) ) def test_diff_job_context_filename_changed(self): # if job context switches, old file name not cached self.job = Job( uow_id='amazonprime-20190906-sme-playlist-v1', unit_of_work_id=0, dsp='amazonprime', report_type='user', subtype='Summary', version='v1', report_date='2019-09-06', licensor='sme', extension='txt', config_bucket='delphi-configs', context='US', context_params=None, job_id="test_job_id", ) self.__client._original_file_name = 'PMN9_A_ROW_NA_20190908_20190908_User_20190909.txt.zip' self.__client.get_original_content_name(self.job) self.__client.client.list_objects_v2.assert_called() def test_original_content_name_raises_error(self): self.job.context = 'AT' self.assertRaises( exceptions.StreamNotFoundError, self.__client.get_original_content_name, self.job ) class AmazonTheorchardClientTestCase(unittest.TestCase): def setUp(self) -> None: self.__content_status_repository_mock = Mock() self.__boto_client = Mock() self.__client = AmazonPrimeTheorchardClient(logger=Mock()) self.__client.client = Mock() self.__client.client.list_objects_v2 = MagicMock( return_value={ 'IsTruncated': False, 'Contents': [ { 'Key': 'ORCA_DE_20190906_Daily_Playlist_Report.txt.zip', }, { 'Key': 'ORCA_US_20190906_Daily_Playlist_Report.txt.zip', }, ] } ) self.job = Job( uow_id='amazonprime-20190906-sme-playlist-v1', unit_of_work_id=0, dsp='amazonprime', report_type='playlist', subtype='Summary', version='v1', report_date='2019-09-06', licensor='theorchard', extension='txt', config_bucket='delphi-configs', context='US', context_params=None, job_id="test_job_id", ) def test_original_content_name(self): self.assertEqual( 'ORCA_US_20190906_Daily_Playlist_Report.txt.zip', self.__client.get_original_content_name(self.job) ) def test_original_content_name_raises_error(self): self.job.context = 'AT' self.assertRaises( exceptions.StreamNotFoundError, self.__client.get_original_content_name, self.job )