"""Test ows-abacus-state requests.""" from http import HTTPStatus import httpx from owsclient.test import OwsClientMock import pytest from src.connectors import ows_abacus_state from src.connectors.exceptions import OwsPayeeException from src.models.payee import Payee, PayeeEntityType from tests.unit.factories import ( AbacusStateGetResponseItemFactory, AbacusStatePutResponseFactory, ) @pytest.mark.parametrize('expected_status', (HTTPStatus.OK, HTTPStatus.BAD_REQUEST)) def test_get_all_states( expected_status: HTTPStatus, ows_client_mock: OwsClientMock ) -> None: """Test get_all_states.""" payee = Payee(payee_type=PayeeEntityType.account_payee, payee_id='144') data_objects = { i.action_name: i for i in [AbacusStateGetResponseItemFactory.build() for _ in range(4)] } path = f'/abacus-state/{payee.payee_type}/{payee.payee_id}/' ows_client_mock.get('ows-abacus-state', path).mock( return_value=httpx.Response( expected_status, json=[i.model_dump(mode='json') for i in data_objects.values()], ) ) if expected_status == HTTPStatus.OK: result = ows_abacus_state.get_all_states(payee) assert result == data_objects else: with pytest.raises(OwsPayeeException): ows_abacus_state.get_all_states(payee) @pytest.mark.parametrize('expected_status', (HTTPStatus.OK, HTTPStatus.BAD_REQUEST)) def test_update_state( expected_status: HTTPStatus, ows_client_mock: OwsClientMock ) -> None: """Test update_state.""" data_obj = AbacusStatePutResponseFactory.build() abacus_state_id = data_obj.abacus_state_id data_dict = data_obj.model_dump(mode='json') request_fields = ('action_status', 'message') request_data = {key: data_dict[key] for key in request_fields} path = f'/abacus-state/{abacus_state_id}/' ows_client_mock.put('ows-abacus-state', path, json=request_data).mock( return_value=httpx.Response(expected_status, json=data_dict) ) if expected_status == HTTPStatus.OK: result = ows_abacus_state.update_state(abacus_state_id, **request_data) assert result == data_obj else: with pytest.raises(OwsPayeeException): ows_abacus_state.update_state(abacus_state_id, **request_data) @pytest.mark.parametrize('expected_status', (HTTPStatus.OK, HTTPStatus.BAD_REQUEST)) def test_create_states( expected_status: HTTPStatus, ows_client_mock: OwsClientMock ) -> None: """Test create_states.""" payee = Payee(payee_type=PayeeEntityType.account_payee, payee_id='151') data_objects = { i.action_name: i for i in [AbacusStateGetResponseItemFactory.build() for _ in range(3)] } data_dicts = [i.model_dump(mode='json') for i in data_objects.values()] action_names = [i.action_name for i in data_objects.values()] request_data = [ { 'action_name': action_name, 'parent_table_id': payee.payee_id, 'parent_table_name': str(payee.payee_type), } for action_name in action_names ] ows_client_mock.post('ows-abacus-state', '/abacus-states/', json=request_data).mock( return_value=httpx.Response(expected_status, json=data_dicts) ) if expected_status == HTTPStatus.OK: result = ows_abacus_state.create_states(payee, action_names) assert result == data_objects else: with pytest.raises(OwsPayeeException): ows_abacus_state.create_states(payee, action_names)