"""Lambda test module.""" from unittest.mock import Mock import pytest import requests from src import app # noqa class TestApp: """Test class for app module.""" @pytest.fixture def get_business_units_and_triggered_send_definitions_mock(self, mocker): """Mock the get_business_units_and_triggered_send_definitions function.""" return mocker.patch('src.app.get_business_units_and_triggered_send_definitions') def test_handler_success( self, get_business_units_and_triggered_send_definitions_mock, business_unit_xml, triggered_send_definitions_xml): """Test handler function.""" get_business_units_and_triggered_send_definitions_mock.return_value = ( business_unit_xml, triggered_send_definitions_xml) result = app.handler(None, None) assert result['statusCode'] == 200 assert result['headers']['Content-Type'] == 'application/json' def test_handler_failure(self, get_business_units_and_triggered_send_definitions_mock): """Test handler function.""" get_business_units_and_triggered_send_definitions_mock.side_effect = Exception('Test exception') result = app.handler(None, None) assert result['statusCode'] == 500 class TestSendMarketingCloudRequest: """Test class for get_triggered_send_definitions function.""" @pytest.fixture def requests_post_mock(self, mocker): """Mock requests.post.""" return mocker.patch('src.app.requests.post') @pytest.fixture def mc_request_mock(self, mocker): """Mock requests.post.""" return '' def test_get_triggered_send_definitions(self, requests_post_mock, mc_request_mock): """Test get_triggered_send_definitions function.""" expected_result = '' requests_post_mock.return_value = Mock(text=expected_result) result = app.send_marketing_cloud_request(mc_request_mock) assert result == expected_result def test_get_triggered_send_definitions_failure(self, requests_post_mock, mc_request_mock): """Test get_triggered_send_definitions function.""" retry_attempts = 2 requests_post_mock.side_effect = [requests.RequestException('Test exception')] * (retry_attempts + 1) with pytest.raises(RuntimeError): app.send_marketing_cloud_request(mc_request_mock) assert requests_post_mock.call_count == retry_attempts + 1 class TestGetBusinessUnitsAndTriggeredSendDefinitions: """Test class for get_business_units_and_triggered_send_definitions function.""" @pytest.fixture def send_marketing_cloud_request_mock(self, mocker): """Mock the send_marketing_cloud_request function.""" return mocker.patch('src.app.send_marketing_cloud_request') def test_get_business_units_and_triggered_send_definitions(self, send_marketing_cloud_request_mock): """Test get_business_units_and_triggered_send_definitions function.""" send_marketing_cloud_request_mock.side_effect = ['', ''] result = app.get_business_units_and_triggered_send_definitions() assert result == ('', '') assert send_marketing_cloud_request_mock.call_count == 2 send_marketing_cloud_request_mock.assert_any_call(app.marketing_cloud_messages.BUSINESS_UNITS_MESSAGE) send_marketing_cloud_request_mock.assert_any_call(app.marketing_cloud_messages.TRIGGERED_SENDS_MESSAGE) def test_get_business_units_and_triggered_send_definitions_failure(self, send_marketing_cloud_request_mock): """Test get_business_units_and_triggered_send_definitions function failure.""" send_marketing_cloud_request_mock.side_effect = Exception('Test failure') with pytest.raises(Exception, match='Test failure'): app.get_business_units_and_triggered_send_definitions() class TestGetTriggeredSendDefinitionsResponse: """Test class for prepare_triggered_send_definitions_response function.""" def test_prepare_triggered_send_definitions_response( self, business_unit_xml, triggered_send_definitions_xml, triggered_send_definitions_full_response): """Test prepare_triggered_send_definitions_response function.""" result = app.prepare_response(business_unit_xml, triggered_send_definitions_xml) assert result == triggered_send_definitions_full_response