"""Lambda test module.""" import json from unittest.mock import patch from content_utils.exceptions import InvalidMessageException import pytest from src import app def test_approval_success(request_engine, mock_approve_event): """Test handling an approval event with a successful response.""" review_queue_id = mock_approve_event['review_queue_id'] request_engine['ows-product-review'].add_spec( 'POST', f'/review-queue/{review_queue_id}/approval', status=200, response={} ) app.handler(mock_approve_event, None) def test_rejection_success(request_engine, mock_reject_event): """Test handling an reject event with a successful response.""" review_queue_id = mock_reject_event['review_queue_id'] request_engine['ows-product-review'].add_spec( 'POST', f'/review-queue/{review_queue_id}/rejection', status=200, response={} ) app.handler(mock_reject_event, None) def test_will_not_deliver_success(request_engine, mock_will_not_deliver): """Test handling an reject event with a successful response.""" review_queue_id = mock_will_not_deliver['review_queue_id'] request_engine['ows-product-review'].add_spec( 'POST', f'/review-queue/{review_queue_id}/rejection', status=200, response={} ) app.handler(mock_will_not_deliver, None) def test_ineligible_event(request_engine, mock_approve_event): """Test handling an already approved review queue item.""" review_queue_id = mock_approve_event['review_queue_id'] request_engine['ows-product-review'].add_spec( 'POST', f'/review-queue/{review_queue_id}/approval', status=400, response={ 'message': 'Cannot update completed review queue item' } ) app.handler(mock_approve_event, None) def test_unexpected_ows_response(request_engine, mock_approve_event): """Test handling an already approved review queue item.""" review_queue_id = mock_approve_event['review_queue_id'] response = {'message': 'foo'} request_engine['ows-product-review'].add_spec( 'POST', f'/review-queue/{review_queue_id}/approval', status=400, response=response ) with pytest.raises(InvalidMessageException) as e: app.handler(mock_approve_event, None) assert e.value.args[0] == json.dumps(response) @patch('src.logic.process_event') def test_logic_raises(mock_process): """Test exception handling.""" class MockException(Exception): pass mock_process.side_effect = MockException('foo') with pytest.raises(MockException) as e: app.handler({}, None) assert e.value.args[0] == 'foo' def test_unknown_resolution_raises_assertion_error(): """Test unknown resolution behavior.""" mock_event = {'resolution': 'foo'} with pytest.raises(AssertionError) as e: app.handler(mock_event, None) assert e.value.args[0] == mock_event @patch('src.logic.save_in_ows') def test_correct_args_to_ows(mock_ows, mock_approve_event, mock_reject_event): """Test that the correct data is sent to the ows, including a note.""" app.handler(mock_approve_event, None) mock_ows.assert_called_with( 10, 'approval', { 'user_id': mock_approve_event['user_uuid'], 'created_datetime': mock_approve_event['created_datetime'] } ) app.handler(mock_reject_event, None) mock_ows.assert_called_with( 10, 'rejection', { 'user_id': mock_reject_event['user_uuid'], 'created_datetime': mock_reject_event['created_datetime'], 'note': mock_reject_event['note'] } )