import json import unittest import uuid from dataclasses import asdict, replace from datetime import datetime from unittest.mock import Mock import pytest from slz_config.const import OPTIONAL_CONFIG from slz_job_executor.entities import JobPayload from slz_job_executor.services.sf_starter import StepFunctionStarter @pytest.mark.parametrize( 'uow_id, unit_of_work_id, expected', [ ( 'apple-20190903-sme-amContent-v1_2', 22212, 'apple-20190903-sme-amContent-v1_2_22212_20190809T01.01.01' ), ( 'apple-20190903-sme-amContent-v1_2-rp20190906T105504', 22212, 'apple-20190903-sme-amContent-v1_2-rp20190906T105504_22212_20190809T01.01.01' ), ( 'gras-20200507-sme-dim_rec_project_product_version-v1-rp20190906T105504', 123456789123, 'gras-20200507-sme-dim_rec_project_product_version_123456789123_20190809T01.01.01' ), ] ) def test_generate_sf_name(uow_id, unit_of_work_id, expected, logger_test, test_job_payload): now = datetime(2019, 8, 9, 1, 1, 1, 1) test_job_payload = replace(test_job_payload, uow_id=uow_id, unit_of_work_id=unit_of_work_id) sf_starter = StepFunctionStarter(logger=logger_test, now=now, sf_client=Mock(), payload={}) result = sf_starter._generate_sf_name(test_job_payload) assert expected == result @unittest.mock.patch( 'slz_job_executor.services.sf_starter.uuid', wraps=uuid, uuid4=lambda: '123123' ) def test_start_sf_ok(uuid_mock, logger_test, test_job_payload): sf_client = Mock() now = datetime(2019, 8, 9, 1, 1, 1, 1) sf_starter = StepFunctionStarter(logger=logger_test, now=now, sf_client=sf_client, payload={}) sf_starter.start_sf(test_job_payload) sf_input = asdict(test_job_payload) sf_input.update({'trace_id': '123123', OPTIONAL_CONFIG: {}}) sf_client.start_execution.assert_called_with( input=json.dumps(sf_input), name=f'{test_job_payload.uow_id}_{test_job_payload.unit_of_work_id}_20190809T01.01.01', stateMachineArn=test_job_payload.sf_arn, )