ClaimsGPT / tests /test_validation.py
Bader Alabddan
Add all production modules (schemas, logic, utils, tests)
21f1a73
"""Tests for validation utilities."""
import pytest
import json
from utils.validators import validate_json_input, validate_claim_schema, validate_required_fields
from schemas.motor_claim import MotorClaim
from schemas.medical_claim import MedicalClaim
class TestJSONValidation:
"""Test JSON validation."""
def test_valid_json(self):
"""Test valid JSON input."""
valid_json = '{"claim_type": "motor", "amount": 1000}'
result = validate_json_input(valid_json)
assert result.is_valid is True
assert result.data is not None
def test_invalid_json(self):
"""Test invalid JSON input."""
invalid_json = '{"claim_type": "motor", "amount": }'
result = validate_json_input(invalid_json)
assert result.is_valid is False
assert len(result.errors) > 0
def test_empty_string(self):
"""Test empty string input."""
result = validate_json_input('')
assert result.is_valid is False
class TestMotorClaimValidation:
"""Test motor claim schema validation."""
def test_valid_motor_claim(self):
"""Test valid motor claim."""
claim_data = {
"claim_type": "motor",
"policy_number": "MOT-2025-12345",
"incident_date": "2025-12-20",
"claim_amount": 5000.00,
"description": "Vehicle collision at intersection with significant damage",
"claimant_name": "John Doe",
"vehicle_make": "Toyota",
"vehicle_model": "Camry",
"vehicle_year": 2022,
"license_plate": "ABC-1234",
"accident_type": "collision",
"location": "Main St & 5th Ave, Seattle, WA",
"police_report_filed": True,
"police_report_number": "SPD-12345",
"other_party_involved": True,
"injuries_reported": False
}
result = validate_claim_schema(claim_data, MotorClaim)
assert result.is_valid is True
def test_missing_required_fields(self):
"""Test motor claim with missing fields."""
claim_data = {
"claim_type": "motor",
"policy_number": "MOT-2025-12345"
}
result = validate_claim_schema(claim_data, MotorClaim)
assert result.is_valid is False
assert len(result.errors) > 0
def test_invalid_date_format(self):
"""Test motor claim with invalid date."""
claim_data = {
"claim_type": "motor",
"policy_number": "MOT-2025-12345",
"incident_date": "2025-13-45", # Invalid date
"claim_amount": 5000.00,
"description": "Vehicle collision at intersection",
"claimant_name": "John Doe",
"vehicle_make": "Toyota",
"vehicle_model": "Camry",
"vehicle_year": 2022,
"license_plate": "ABC-1234",
"accident_type": "collision",
"location": "Main St & 5th Ave",
"police_report_filed": False,
"other_party_involved": False,
"injuries_reported": False
}
result = validate_claim_schema(claim_data, MotorClaim)
assert result.is_valid is False
class TestMedicalClaimValidation:
"""Test medical claim schema validation."""
def test_valid_medical_claim(self):
"""Test valid medical claim."""
claim_data = {
"claim_type": "medical",
"policy_number": "MED-2025-54321",
"incident_date": "2025-12-18",
"claim_amount": 12500.00,
"description": "Emergency appendectomy surgery with hospital stay",
"claimant_name": "Robert Johnson",
"patient_name": "Robert Johnson",
"patient_dob": "1985-06-15",
"diagnosis_code": "K35.80",
"treatment_type": "surgery",
"provider_name": "Seattle General Hospital",
"treatment_date": "2025-12-18",
"prescription_required": True,
"hospitalization_required": True,
"hospitalization_days": 2,
"pre_existing_condition": False
}
result = validate_claim_schema(claim_data, MedicalClaim)
assert result.is_valid is True
def test_hospitalization_validation(self):
"""Test hospitalization days validation."""
claim_data = {
"claim_type": "medical",
"policy_number": "MED-2025-54321",
"incident_date": "2025-12-18",
"claim_amount": 12500.00,
"description": "Emergency surgery with hospital stay",
"claimant_name": "Robert Johnson",
"patient_name": "Robert Johnson",
"patient_dob": "1985-06-15",
"diagnosis_code": "K35.80",
"treatment_type": "surgery",
"provider_name": "Seattle General Hospital",
"treatment_date": "2025-12-18",
"prescription_required": True,
"hospitalization_required": True,
"hospitalization_days": 0, # Invalid: required but 0
"pre_existing_condition": False
}
result = validate_claim_schema(claim_data, MedicalClaim)
assert result.is_valid is False