"""Test Abacus Event handlers.""" from unittest.mock import patch from owsresponse import response from abacus_event.schemas.abacus_event import AbacusEventSchema from tests.utils.factories import AbacusEventFactory @patch('abacus_event.blueprints.abacus_event.logic') def test_create_event(mock_logic, fixture_client): """Test endpoint passes request body to logic layer.""" abacus_event = AbacusEventFactory.create() post_body = AbacusEventSchema( exclude=( 'abacus_event_id', 'created_by', ) ).dump(abacus_event) res = fixture_client.post('/abacus-event', json=post_body) assert res.status_code == 201 mock_logic.create_event.assert_called_once() @patch('abacus_event.blueprints.abacus_event.logic') def test_get_payment_groups_approval_count(mock_logic, fixture_client): """Test endpoint to get payment group's approval count.""" mock_data = {'approval_count': 6, 'payment_group_payment_id': 1} mock_logic.get_payment_approval_count.return_value = mock_data endpoint = '/abacus-event/payment-group-payment/{}/approval-count' res = fixture_client.get(endpoint.format(mock_data.get('payment_group_payment_id'))) assert res.status_code == 200 assert res.json == mock_data mock_logic.get_payment_approval_count.assert_called_once() @patch('abacus_event.blueprints.abacus_event.logic') def test_rollback_events(mock_logic, fixture_client): """Test endpoint to rollback specified events.""" mock_data = [ { 'abacus_event_id': 1, 'event_date': '2020-08-18T07:31:30.164543', 'event_name': 'payment_approval', 'previous_abacus_event_id': None, 'rolled_back_at': '2020-08-20T11:55:39.000000', 'target_id': 1, 'target_type': 'payment_group_payment', } ] mock_logic.update_rollback_time.return_value = mock_data put_body = { 'event_name': 'payment_approval', 'target_id': 1, 'target_type': 'payment_group_payment', } res = fixture_client.put('/abacus-event/rollback/', json=put_body) assert res.status_code == 200 assert res.json == mock_data mock_logic.update_rollback_time.assert_called_once() @patch('abacus_event.blueprints.abacus_event.logic') def test_retry_events(mock_logic, fixture_client): """Test endpoint to retry specified events.""" mock_data = [ { 'abacus_event_id': 1, 'event_date': '2020-08-18T07:31:30.164543', 'event_name': 'generate_payments', 'previous_abacus_event_id': None, 'rolled_back_at': '2020-08-20T11:55:39.000000', 'target_id': 1, 'target_type': 'payment_group_payment', } ] mock_logic.retry_events.return_value = mock_data put_body = { 'event_name': 'generate_payments', 'target_id': 1, 'target_type': 'payment_group_payment', } res = fixture_client.put('/abacus-event/retry/', json=put_body) assert res.status_code == 200 assert res.json == mock_data mock_logic.retry_events.assert_called_once() @patch('abacus_event.blueprints.abacus_event.logic') def test_get_events_by_target_type(mock_logic, fixture_client): """Test endpoint to get events by target.""" endpoint = '/abacus-event/{}/{}' res = fixture_client.get(endpoint.format('payment-group-payment', 1)) assert res.status_code == 200 mock_logic.get_events_by_target_type.assert_called_once_with( 'payment_group_payment', 1 ) @patch('abacus_event.blueprints.abacus_event.logic') def test_dataloader_events_by_ids(mock_logic, fixture_client): """Test for the event dataloader handler.""" mock_data = [ { 'abacus_event_id': 1, 'event_date': '2020-08-18T07:31:30.164543', 'event_name': 'payment_approval', 'previous_abacus_event_id': None, 'rolled_back_at': '2020-08-20T11:55:39.000000', 'target_id': 1, 'target_type': 'payment_group_payment', } ] mock_response = response.Response( message={ 'items': [ {'data': mock_data}, {'data': None}, ] }, status=200, ) mock_logic.dataload_events_by_ids.return_value = mock_response post_data = [1, 2] res = fixture_client.post('/abacus-event/dataloader', json=post_data) assert res.status_code == 200 mock_logic.dataload_events_by_ids.assert_called_once_with(post_data)