import json import unittest from datetime import datetime from unittest.mock import Mock import pytest from db_schema.schemas import slz from slz_meta_manager.service import Service @unittest.mock.patch('slz_meta_manager.service.datetime') class ServiceSFNameGenTestCaseMS2(unittest.TestCase): def setUp(self): self._sf_client = Mock() self._env_config = { 'schema_bucket': 'schema_bucket', 'rds_secrets_key': 'rds_secrets_key', 'sf_arn': 'sf_arn', } self._pg_repo = Mock() self._service = Service( Mock(), self._env_config, {}, {}, self._sf_client, self._pg_repo, {"RDS_SECRET_KEY": "test/key"}, ) @unittest.mock.patch('slz_meta_manager.service.datetime') @pytest.mark.parametrize( 'params, expected', [ ( ( datetime(2020, 1, 15, 1, 2, 3, 4), 345, 'amazonadsupported-20200110-sme-playlist-v1', ), 'amazonadsupported-20200110-sme-playlist-v1_345_20200115T01.02.03.000004', ), ( ( datetime(2020, 1, 15, 1, 2, 3, 4), 345, 'amazonadsupported-20200110-sme-playlist-v1-rp20200120T015058', ), 'amazonadsupported-20200110-sme-playlist-v1-rp202001_345_20200115T01.02.03.000004', ), ( ( datetime(2020, 1, 15, 1, 2, 3, 4), 123456789123, 'gras-20200507-sme-dim_rec_project_product_version-v1-rp20190906T105504', ), 'gras-20200507-sme-dim_rec_project_product__123456789123_20200115T01.02.03.000004', ), ] ) def test_service__generate_sf_name(dt, params, expected, test_service): datestamp, uow_id, uow_code = params dt.today.return_value = datestamp got = test_service._generate_sf_name(uow_id, uow_code) assert got == expected @unittest.mock.patch('slz_meta_manager.service.datetime') @pytest.mark.parametrize( 'params, expected', [ ( ( datetime(2020, 1, 15, 1, 2, 3, 4), 345, 'amazonadsupported-20200110-sme-playlist-v1', ), 'amazonadsupported-20200110-sme-playlist-v1_345_20200115T010203000004', ), ( ( datetime(2020, 1, 15, 1, 2, 3, 4), 345, 'amazonadsupported-20200110-sme-playlist-v1-rp20200120T015058', ), 'amazonadsupported-20200110-sme-playlist-v1-rp20200120T015058_345_20200115T010203000004', ), ( ( datetime(2020, 1, 15, 1, 2, 3, 4), 123456789123, 'gras-20200507-sme-dim_rec_project_product_version-v1-rp20190906T105504', ), 'gras-20200507-sme-dim_rec_project_product_version-v1-rp20190906T105504_123456789123_20200115T010203000004', ), ] ) def test_service__generate_batch_job_name(dt, params, expected, test_service): datestamp, uow_id, uow_code = params dt.today.return_value = datestamp got = test_service._generate_batch_job_name(uow_id, uow_code) assert got == expected @unittest.mock.patch('slz_meta_manager.service.datetime') def test_service_start_sf(dt, test_pg_repo, test_sf_client, test_service): dt.today.return_value = datetime(2020, 1, 15, 1, 2, 3, 4) message_body = { 'UoWID': 'amazonadsupported-20200110-sme-playlist-v1-rp20200120T015058', 'Context': 'context', 'ContentName': 'content_name', 'CompressedPath': 'compress_path', 'DecompressedPaths': 'decompressed_path', } record = {'body': json.dumps(message_body)} test_pg_repo.get_uow_by_uow_id.return_value = slz.UnitOfWork(unit_of_work_id=1234) result = test_service.start_sf( record, max_sf_name_length=test_service.DEFAULT_MAX_SF_NAME_LENGTH ) assert result is True test_pg_repo.get_uow_by_uow_id.assert_called_with(message_body['UoWID']) command = [ "--environment test", "--uow amazonadsupported-20200110-sme-playlist-v1-rp20200120T015058", "--content-name content_name", "--context context", "--path-to-files decompressed_path", "--schema-bucket delphi-configs", "--rds-secrets-key some/key", "--path-to-archive compress_path", "--unit-of-work-id 1234", ] test_sf_client.start_execution.assert_called_with( stateMachineArn='test-arn', name='amazonadsupported-20200110-sme-playlist-v1-rp20200_1234_20200115T01.02.03.000004', input=json.dumps( { 'name': 'amazonadsupported-20200110-sme-playlist-v1-rp20200120T015058_1234_20200115T010203000004', 'uow_id': 'amazonadsupported-20200110-sme-playlist-v1-rp20200120T015058', 'unit_of_work_id': 1234, 'content_name': message_body['ContentName'], 'context': message_body['Context'], 'command': command, 'config': {}, 'hasher_task_type': 'HASHER_SHORT', "optional_config": { "RDS_SECRET_KEY": "test/key" } } ) ) @unittest.mock.patch('slz_meta_manager.service.datetime') def test_service_start_sf_not_found_uow(dt, test_pg_repo, test_sf_client, test_service): dt.today.return_value = datetime(2020, 1, 15, 1, 2, 3, 4) message_body = { 'UoWID': 'amazonadsupported-20200110-sme-playlist-v1-rp20200120T015058', 'Context': 'context', 'ContentName': 'content_name', 'CompressedPath': 'compress_path', 'DecompressedPaths': 'decompressed_path', } record = {'body': json.dumps(message_body)} test_pg_repo.get_uow_by_uow_id.return_value = None result = test_service.start_sf( record, max_sf_name_length=test_service.DEFAULT_MAX_SF_NAME_LENGTH ) assert result is False test_pg_repo.get_uow_by_uow_id.assert_called_with(message_body['UoWID']) test_sf_client.start_execution.assert_not_called()