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)