from urllib.parse import urlencode from flask import json from mock import patch from moto import mock_dynamodb2 from tests.base import BaseTestCase from tests.mocks import patch_decode_token from tests.v1.constants import FILES_PARAMS_AMAZON_ADS, FILES_PARAMS_APPLE, MOCK_SERVER_NAME @mock_dynamodb2 class FilesTestCase(BaseTestCase): def setUp(self): super().setUp() self.mock_decode = patch_decode_token() self.mock_decode.start() from slz_api_service.core.app import get_app self.app = get_app().app self.app.testing = True self.app.config['SOURCE_DATA_TABLE_NAME'] = self.table_name self.app.config['SERVER_NAME'] = MOCK_SERVER_NAME self.client = self.app.test_client() def test_files_missing_required_data(self): headers = {'Authorization': 'Bearer 100'} response = self.client.get(path='/v1/files', headers=headers) self.assertEqual(response.status_code, 400) def test_files_missing_auth_header(self): headers = {} response = self.client.get(path='/v1/files', headers=headers) self.assertEqual(response.status_code, 401) def test_files_by_report_date_correct(self): input_data = FILES_PARAMS_APPLE headers = {'Authorization': 'Bearer 100'} response = self.client.get(path='/v1/files?' + urlencode(input_data.to_dict()), headers=headers) self.assertEqual(response.status_code, 200) expected = { 'items': [{ 'file_size_bytes': 123, 'uri': 's3://testing/apple/event/v1_2/report_date=2019-08-11' '/report_licensor=sme/AppleMusic_Event_86759344_20190811_V1_2.txt.gz', }], 'count': 1, 'status': 'OK' } self.assertEqual(json.loads(response.data), expected) def test_files_amazon_ads(self): input_data = FILES_PARAMS_AMAZON_ADS headers = {'Authorization': 'Bearer 100'} response = self.client.get(path='/v1/files?' + urlencode(input_data.to_dict()), headers=headers) self.assertEqual(response.status_code, 200) expected = { 'count': 1, 'items': [ { 'file_size_bytes': 144166018, 'uri': 's3://testing/amazonadsupported/activity/v1/report_date' '=2019-04-20/report_licensor' '=sme/PRU0_A_US_20190420_20190420_Activity_20190723.txt.zip' } ], 'status': 'OK' } self.assertEqual(json.loads(response.data), expected) def test_oauth_token_response(self): mock_request_body = { 'client_id': 'fakeid', 'client_secret': 'fakesecret', 'grant_type': 'client_credentials' } mock_token = { 'access_token': 'faketoken', 'scope': 'read:files', 'expires_in': 86400, 'token_type': 'Bearer' } with patch('authlib.integrations.requests_client.OAuth2Session.fetch_access_token', return_value=mock_token): response = self.client.post(path='/v1/oauth/token', json=mock_request_body) self.assertTrue(response.is_json) def tearDown(self) -> None: super().tearDown() self.mock_decode.stop()