"""Test tax details error handlers.""" from typing import Any from unittest.mock import MagicMock, patch import pytest from src.connectors.exceptions import OwsPayeeException from src.error_handlers import tax_details as tax_details_habdlers from src.models import Address, NewTaxDetails def test_flatten_fields() -> None: """Test flatten_fields.""" mock_data = MagicMock() mock_data.f1 = 'abc' mock_data.f2 = 11 mock_data_f3 = MagicMock() mock_data.f3 = mock_data_f3 mock_data_f3.f4 = None mock_data_f3.f5 = None fields: list[str] = [] data: dict[str, Any] = {} tax_details_habdlers.flatten_fields( {'f1': 'er1', 'f2': 'er2', 'f3': {'f4': 'e4', 'f5': {'f6': ['c', 'b']}}}, mock_data, fields, data, ) assert fields == ['f1: er1', 'f2: er2', 'f4: e4', 'f6: c, b'] assert data == {'f1': 'abc', 'f2': 11, 'f4': None, 'f6': None} @pytest.mark.parametrize( 'status_code,error_data,expected_code,expected_data', ( (500, {'a': 'b'}, 'TestEr1', {'account_payee_id': 1005}), (400, None, 'TestEr1', {'account_payee_id': 1005}), (400, {'a': 'b'}, 'TestEr1', {'account_payee_id': 1005}), (400, {'message': 'Msg1'}, 'Msg1', {'account_payee_id': 1005}), ( 400, {'message': {'business_number': 'Er1'}}, 'business_number: Er1', {'account_payee_id': 1005, 'business_number': 'TNum'}, ), ( 400, {'message': {'local_tax_id': 'Err1', 'address': {'city': 'Err2'}}}, 'city: Err2, local_tax_id: Err1', {'account_payee_id': 1005, 'local_tax_id': None, 'city': 'City17'}, ), ), ) @patch('src.error_handlers.tax_details.get_error_details') def test_handle_save_error( mock_get_error_details: MagicMock, status_code: int, error_data: dict[str, Any] | None, expected_code: str, expected_data: dict[str, Any], ) -> None: """Test handle_save_error.""" account_payee_id = 1005 tax_details = NewTaxDetails( business_name='TstNa1', business_number='TNum', country_of_tax_residency_code='CAN', address=Address(city='City17', country='GBR', postal_code='1900'), vat_number='AA123', ) mock_get_error_details.return_value = (status_code, error_data) with pytest.raises(OwsPayeeException, match='Failed to save tax details') as exc: tax_details_habdlers.handle_save_error( account_payee_id, tax_details, ValueError('TestEr1') ) assert exc.value.error_code == expected_code assert exc.value.additional_data == expected_data