77 lines
2.6 KiB
Python
77 lines
2.6 KiB
Python
import io
|
|
|
|
from fastapi.testclient import TestClient
|
|
|
|
from app.main import app
|
|
from app.auth.security import get_current_user
|
|
|
|
|
|
def _csv_file(name: str, text: str):
|
|
return ("files", (name, io.BytesIO(text.encode("utf-8")), "text/csv"))
|
|
|
|
|
|
def test_batch_import_includes_pension_aux_files_and_read_endpoints():
|
|
# Auth override
|
|
app.dependency_overrides[get_current_user] = lambda: {
|
|
"id": 1,
|
|
"username": "tester",
|
|
"is_admin": True,
|
|
"is_active": True,
|
|
}
|
|
|
|
client = TestClient(app)
|
|
|
|
# Minimal seed for dependent data
|
|
rolodex_csv = "Id,Last\nR1,Alpha\n"
|
|
files_csv = "File_No,Id,File_Type,Regarding,Opened,Empl_Num,Status,Rate_Per_Hour\nF-1,R1,CIVIL,Test,2024-01-01,E01,ACTIVE,100\n"
|
|
|
|
schedule_csv = "File_No,Version,Vests_On,Vests_At\nF-1,01,2024-01-01,100\n"
|
|
marriage_csv = (
|
|
"File_No,Version,Married_From,Married_To,Married_Years,Service_From,Service_To,Service_Years,Marital_%\n"
|
|
"F-1,01,2000-01-01,2010-01-01,10,1995-01-01,2010-01-01,15,50\n"
|
|
)
|
|
death_csv = "File_No,Version,Lump1,Lump2,Growth1,Growth2,Disc1,Disc2\nF-1,01,1000,0,0,0,0,0\n"
|
|
separate_csv = "File_No,Version,Separation_Rate\nF-1,01,Terms\n"
|
|
|
|
payload = [
|
|
_csv_file("ROLODEX.csv", rolodex_csv),
|
|
_csv_file("FILES.csv", files_csv),
|
|
_csv_file("SCHEDULE.csv", schedule_csv),
|
|
_csv_file("MARRIAGE.csv", marriage_csv),
|
|
_csv_file("DEATH.csv", death_csv),
|
|
_csv_file("SEPARATE.csv", separate_csv),
|
|
]
|
|
|
|
# Batch upload
|
|
resp = client.post("/api/import/batch-upload", files=payload)
|
|
assert resp.status_code == 200
|
|
body = resp.json()
|
|
results = body.get("batch_results", [])
|
|
# Ensure each target file is reported as processed with at least one row
|
|
by_name = {r.get("file_type"): r for r in results}
|
|
for name in ("SCHEDULE.csv", "MARRIAGE.csv", "DEATH.csv", "SEPARATE.csv"):
|
|
assert name in by_name
|
|
assert by_name[name].get("imported_count", 0) >= 1
|
|
|
|
# Call read endpoints
|
|
r1 = client.get("/api/pensions/schedules", params={"file_no": "F-1"})
|
|
assert r1.status_code == 200
|
|
assert isinstance(r1.json(), list)
|
|
|
|
r2 = client.get("/api/pensions/marriages", params={"file_no": "F-1"})
|
|
assert r2.status_code == 200
|
|
assert isinstance(r2.json(), list)
|
|
|
|
r3 = client.get("/api/pensions/death-benefits", params={"file_no": "F-1"})
|
|
assert r3.status_code == 200
|
|
assert isinstance(r3.json(), list)
|
|
|
|
r4 = client.get("/api/pensions/separations", params={"file_no": "F-1"})
|
|
assert r4.status_code == 200
|
|
assert isinstance(r4.json(), list)
|
|
|
|
# Cleanup override
|
|
app.dependency_overrides.pop(get_current_user, None)
|
|
|
|
|