aibilly_backend_code/tests/integration/claim_api.test.py
2026-03-10 16:44:04 +05:30

236 lines
7.6 KiB
Python

"""
Integration Tests for Claim API
End-to-end tests for API endpoints
"""
import pytest
from fastapi.testclient import TestClient
from main import app
from src.models._model import Claim
from src.config.database import SessionLocal
client = TestClient(app)
@pytest.fixture(autouse=True)
def setup_db():
"""Setup and teardown database for each test"""
db = SessionLocal()
try:
yield db
finally:
db.query(Claim).delete()
db.commit()
db.close()
class TestClaimAPI:
def test_create__success(self, setup_db):
"""Test successful creation of """
data = {
"id": True,
"claim_number": "testclaim_number",
"patient_id": True,
"audio_recording_id": True,
"transcript_id": True,
"payer_id": True,
"encounter_id": "testencounter_id",
"service_date": True,
"created_by_user_id": True,
"status": True,
"claim_type": True,
"diagnosis_codes": True,
"procedure_codes": True,
"modifiers": True,
"mdm_level": True,
"medical_necessity_justification": True,
"total_charge_amount": True,
"expected_reimbursement": True,
"actual_reimbursement": True,
"scrubbing_status": True,
"scrubbing_results": True,
"scrubbing_failures": True,
"corrective_actions": True,
"confidence_score": True,
"is_template_based": True,
"template_id": True,
"reviewed_by_user_id": True,
"reviewed_at": True,
"submitted_at": True,
"paid_at": True,
"denial_reason": True,
"denial_code": "testdenial_code",
"notes": True,
"": True,
"": True,
}
response = client.post("/api/v1/s", json=data)
assert response.status_code == 201
assert response.json()["id"] is not None
for key, value in data.items():
assert response.json()[key] == value
def test_create__validation_error(self):
"""Test validation error on invalid data"""
invalid_data = {}
response = client.post("/api/v1/s", json=invalid_data)
assert response.status_code == 400
assert "errors" in response.json()
def test_get__by_id_success(self, setup_db):
"""Test successful retrieval by id"""
# Create a first
create_data = {
"id": True,
"claim_number": "testclaim_number",
"patient_id": True,
"audio_recording_id": True,
"transcript_id": True,
"payer_id": True,
"encounter_id": "testencounter_id",
"service_date": True,
"created_by_user_id": True,
"status": True,
"claim_type": True,
"diagnosis_codes": True,
"procedure_codes": True,
"modifiers": True,
"mdm_level": True,
"medical_necessity_justification": True,
"total_charge_amount": True,
"expected_reimbursement": True,
"actual_reimbursement": True,
"scrubbing_status": True,
"scrubbing_results": True,
"scrubbing_failures": True,
"corrective_actions": True,
"confidence_score": True,
"is_template_based": True,
"template_id": True,
"reviewed_by_user_id": True,
"reviewed_at": True,
"submitted_at": True,
"paid_at": True,
"denial_reason": True,
"denial_code": "testdenial_code",
"notes": True,
"": True,
"": True,
}
create_response = client.post("/api/v1/s", json=create_data)
_id = create_response.json()["id"]
response = client.get("/api/v1/s/" + str(_id))
assert response.status_code == 200
assert response.json()["id"] == _id
def test_get__not_found(self):
"""Test 404 when not found"""
response = client.get("/api/v1/s/999")
assert response.status_code == 404
assert "message" in response.json()
def test_update__success(self, setup_db):
"""Test successful update"""
# Create a first
create_data = {
"id": True,
"claim_number": "testclaim_number",
"patient_id": True,
"audio_recording_id": True,
"transcript_id": True,
"payer_id": True,
"encounter_id": "testencounter_id",
"service_date": True,
"created_by_user_id": True,
"status": True,
"claim_type": True,
"diagnosis_codes": True,
"procedure_codes": True,
"modifiers": True,
"mdm_level": True,
"medical_necessity_justification": True,
"total_charge_amount": True,
"expected_reimbursement": True,
"actual_reimbursement": True,
"scrubbing_status": True,
"scrubbing_results": True,
"scrubbing_failures": True,
"corrective_actions": True,
"confidence_score": True,
"is_template_based": True,
"template_id": True,
"reviewed_by_user_id": True,
"reviewed_at": True,
"submitted_at": True,
"paid_at": True,
"denial_reason": True,
"denial_code": "testdenial_code",
"notes": True,
"": True,
"": True,
}
create_response = client.post("/api/v1/s", json=create_data)
_id = create_response.json()["id"]
update_data = {"name": "Updated"}
response = client.put("/api/v1/s/" + str(_id), json=update_data)
assert response.status_code == 200
assert response.json()["name"] == update_data["name"]
def test_delete__success(self, setup_db):
"""Test successful deletion"""
# Create a first
create_data = {
"id": True,
"claim_number": "testclaim_number",
"patient_id": True,
"audio_recording_id": True,
"transcript_id": True,
"payer_id": True,
"encounter_id": "testencounter_id",
"service_date": True,
"created_by_user_id": True,
"status": True,
"claim_type": True,
"diagnosis_codes": True,
"procedure_codes": True,
"modifiers": True,
"mdm_level": True,
"medical_necessity_justification": True,
"total_charge_amount": True,
"expected_reimbursement": True,
"actual_reimbursement": True,
"scrubbing_status": True,
"scrubbing_results": True,
"scrubbing_failures": True,
"corrective_actions": True,
"confidence_score": True,
"is_template_based": True,
"template_id": True,
"reviewed_by_user_id": True,
"reviewed_at": True,
"submitted_at": True,
"paid_at": True,
"denial_reason": True,
"denial_code": "testdenial_code",
"notes": True,
"": True,
"": True,
}
create_response = client.post("/api/v1/s", json=create_data)
_id = create_response.json()["id"]
response = client.delete("/api/v1/s/" + str(_id))
assert response.status_code == 204
# Verify deletion
get_response = client.get("/api/v1/s/" + str(_id))
assert get_response.status_code == 404