from unittest.mock import MagicMock, patch import pytest from account.constants import error from account.models import ows_royalties from account.utils.exception import ExceptionDictOwsResponse @pytest.mark.parametrize( 'status_code, expected_response, expected_output', [ pytest.param( 200, { 'statement_period_id': 11, 'statement_period_name': 'Test 2030', 'statement_period_status': 'closed', 'statement_year': 2222, 'statement_month': 5, 'closed_date': '2025-01-23', 'exchange_rates_delivered': True, }, { 'statement_period_id': 11, 'statement_period_name': 'Test 2030', 'statement_period_status': 'closed', 'statement_year': 2222, 'statement_month': 5, 'closed_date': '2025-01-23', 'exchange_rates_delivered': True, }, id='successful response', ), pytest.param( 500, 'Internal Server Error', {'status': 500, 'code': 'OWS_ROYALTIES_REQUEST', 'message': 'Internal Server Error'}, id='error response', ), ], ) @patch('account.models.ows_royalties.requests.get') @patch('account.models.ows_royalties.response.create_error_response') def test_get_statement_period( mock_create_error_response, mock_requests_get, status_code, expected_response, expected_output ): """Test get_statement_period.""" mock_response = MagicMock(status_code=status_code) if status_code == 200: mock_response.json.return_value = expected_response else: mock_response.text = expected_response mock_requests_get.return_value = mock_response mock_create_error_response.return_value = expected_output result = ows_royalties.get_statement_period(11) assert result == expected_output @patch('account.models.ows_royalties.requests.get') @pytest.mark.parametrize( 'statement_period, body', [ pytest.param( 111, { 'statement_period_id': 111, 'statement_period_name': 'Test 2025', 'statement_year': 'invalid', 'statement_month': 2, 'statement_period_status': 'open', 'closed_date': '2025-01-23', 'exchange_rates_delivered': True, }, id='invalid statement_year as str', ), pytest.param( 222, { 'statement_period_id': 222, 'statement_period_name': 'Test 2025', 'statement_year': 2025, 'statement_month': 'invalid', 'statement_period_status': 'open', 'closed_date': '2025-01-23', 'exchange_rates_delivered': True, }, id='invalid statement_month as str', ), ], ) def test_get_statement_period_invalid_schema(mock_requests_get, statement_period, body): """Should raise ExceptionDictOwsResponse when required fields are missing.""" mock_response = MagicMock(status_code=200) mock_response.json.return_value = body mock_requests_get.return_value = mock_response with pytest.raises(ExceptionDictOwsResponse) as exc: ows_royalties.get_statement_period(statement_period) assert exc.value.status == 500 assert exc.value.code == error.ERROR_CODE_OWS_ROYALTIES_REQUEST assert 'Invalid response schema' in str(exc.value)