"""Test statement_period schema.""" import copy import pytest from account.validation.schemas.statement_period import StatementPeriodDetailsSchema valid_payload = { 'statement_period_id': 1, 'statement_period_name': 'January 2024', 'statement_year': 2024, 'statement_month': 1, 'statement_period_status': 'Open', 'closed_date': '2024-01-31', 'exchange_rates_delivered': True, } @pytest.mark.parametrize( 'override, expected_errors', [ pytest.param({}, {}, id='valid input'), pytest.param( {'statement_period_id': 'invalid'}, {'statement_period_id': ['Not a valid integer.']}, id='statement period id must be integer', ), pytest.param( {'statement_period_name': 1}, {'statement_period_name': ['Not a valid string.']}, id='statement period name must be string', ), pytest.param( {'statement_period_status': 1}, {'statement_period_status': ['Not a valid string.']}, id='statement period status must be string', ), pytest.param( {'closed_date': 1}, {'closed_date': ['Not a valid string.']}, id='closed date must be string', ), pytest.param( {'statement_year': 'invalid'}, {'statement_year': ['Not a valid integer.']}, id='statement year must be integer', ), pytest.param( {'statement_month': 'invalid'}, {'statement_month': ['Not a valid integer.']}, id='statement_month must be integer', ), pytest.param( {'exchange_rates_delivered': 'Not a valid boolean'}, {'exchange_rates_delivered': ['Not a valid boolean.']}, id='exchange_rates_delivered must be boolean', ), ], ) def test_validate_statement_period_details_schema(override, expected_errors): schema = StatementPeriodDetailsSchema() payload = copy.deepcopy(valid_payload) payload.update(override) errors = schema.validate(payload) assert errors == expected_errors @pytest.mark.parametrize( 'payload, expected_errors', [ pytest.param( {k: v for k, v in valid_payload.items() if k != 'statement_period_id'}, {'statement_period_id': ['Missing data for required field.']}, id='missing statement period_id', ), pytest.param( {k: v for k, v in valid_payload.items() if k != 'statement_year'}, {'statement_year': ['Missing data for required field.']}, id='missing statement year', ), pytest.param( {k: v for k, v in valid_payload.items() if k != 'statement_month'}, {'statement_month': ['Missing data for required field.']}, id='missing statement month', ), pytest.param( {}, { 'statement_period_id': ['Missing data for required field.'], 'statement_year': ['Missing data for required field.'], 'statement_month': ['Missing data for required field.'], }, id='missing all required fields', ), ], ) def test_validate_statement_period_required_fields(payload, expected_errors): schema = StatementPeriodDetailsSchema() errors = schema.validate(payload) assert errors == expected_errors