"""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