import unittest from unittest.mock import Mock import boto3 from moto import mock_dynamodb2, mock_s3 from slz_api_service.v1.view_models.content_status import ContentStatusViewModel from tests.base import BaseTestCase from tests.mocks import patch_decode_token from tests.v1.constants import FILES_PARAMS_APPLE, FILES_PARAMS_SPOTIFY @mock_s3 class TestS3ContentStatus(unittest.TestCase): def setUp(self) -> None: self.mock_decode = patch_decode_token() self.mock_decode.start() self.s3 = boto3.client('s3') self.s3.create_bucket( Bucket='testing', ) self.item_prefix = 'apple/event/v1_2/report_date=2019-08-11/report_licensor=sme/' self.item_filename = 'AppleMusic_Event_86759344_20190811_V1_2.txt.gz' self.item_key = self.item_prefix + self.item_filename self.s3.put_object( Body=bytearray(123), Bucket='testing', ContentEncoding='utf-8', ContentLength=123, Key=self.item_key, ) self.model = ContentStatusViewModel(FILES_PARAMS_APPLE, use_s3=True) def test_get_s3_prefix(self): expected = self.item_prefix assert self.model.get_s3_prefix() == expected def test_get_files_by_report_date_returns_correct_format(self): result = self.model.get_files_by_report_date() expected = { 'items': [{ 'file_size_bytes': 123, 'uri': f's3://testing/{self.item_key}', }], 'count': 1, } self.assertEqual(result, expected) def tearDown(self): self.mock_decode.stop() super().tearDown() @mock_dynamodb2 class TestDynamodbContentStatus(BaseTestCase): def setUp(self): super().setUp() self.mock_decode = patch_decode_token() self.mock_decode.start() self.logger = Mock() self.client = boto3.client('dynamodb') data = FILES_PARAMS_APPLE self.service = ContentStatusViewModel(data, use_s3=False) self.context = Mock() def tearDown(self): self.mock_decode.stop() super().tearDown() def test_generate_uow_id(self): self.assertEqual(self.service.uow_id, 'apple-20190811-sme-amEvent-v1_2') def test_get_context(self): self.assertEqual(self.service.get_context('123::456'), '456') self.assertEqual(self.service.get_context('event'), None) def test_get_files_by_report_date_returns_correct_format(self): result = self.service.get_files_by_report_date() expected = { 'items': [{ 'file_size_bytes': 123, 'uri': f's3://testing/apple/event/v1_2/report_date=2019-08-11' '/report_licensor=sme/AppleMusic_Event_86759344_20190811_V1_2.txt.gz', }], 'count': 1, } self.assertEqual(result, expected) def test_get_files_by_report_date_context_should_be_null(self): data = FILES_PARAMS_SPOTIFY service = ContentStatusViewModel(data) result = service.get_files_by_report_date() expected = { 'items': [{ 'file_size_bytes': self.item_3.get('FileSize'), 'uri': f's3://testing/spotify/tracks/v1/report_date=2019-09-17' '/report_licensor=sme/tracks_20190917.gz', }], 'count': 1, } self.assertEqual(result, expected) def test_pagination_config_with_token(self): token = 'sometoken' result = self.service._get_pagination_config(token) self.assertEquals(result.get('StartingToken'), token)