coming together
This commit is contained in:
79
tests/test_flexible_batch_import.py
Normal file
79
tests/test_flexible_batch_import.py
Normal file
@@ -0,0 +1,79 @@
|
||||
import io
|
||||
|
||||
from fastapi import FastAPI
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from app.api.import_data import router as import_router
|
||||
from app.database.base import engine, SessionLocal
|
||||
from app.models.base import BaseModel
|
||||
from app.models.user import User
|
||||
from app.models.flexible import FlexibleImport
|
||||
from app.auth.security import get_current_user
|
||||
|
||||
|
||||
def test_batch_upload_unknown_csv_saved_as_flexible_rows():
|
||||
# Fresh DB
|
||||
BaseModel.metadata.drop_all(bind=engine)
|
||||
BaseModel.metadata.create_all(bind=engine)
|
||||
|
||||
# Seed an admin user
|
||||
db = SessionLocal()
|
||||
try:
|
||||
user = User(
|
||||
username="tester",
|
||||
email="tester@example.com",
|
||||
hashed_password="x",
|
||||
is_active=True,
|
||||
is_admin=True,
|
||||
)
|
||||
db.add(user)
|
||||
db.commit()
|
||||
db.refresh(user)
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
# Minimal app with import router and auth override
|
||||
app = FastAPI()
|
||||
app.include_router(import_router, prefix="/api/import")
|
||||
|
||||
def _override_current_user():
|
||||
return user # type: ignore[return-value]
|
||||
|
||||
app.dependency_overrides[get_current_user] = _override_current_user
|
||||
|
||||
client = TestClient(app)
|
||||
|
||||
# Unknown CSV that should fall back to flexible import
|
||||
csv_bytes = b"alpha,beta\n1,2\n3,4\n"
|
||||
files = [("files", ("UNKNOWN.csv", io.BytesIO(csv_bytes), "text/csv"))]
|
||||
|
||||
resp = client.post("/api/import/batch-upload", files=files)
|
||||
assert resp.status_code == 200
|
||||
body = resp.json()
|
||||
|
||||
# Assert API result shows success and correct row count
|
||||
results = body.get("batch_results", [])
|
||||
assert any(
|
||||
r.get("file_type") == "UNKNOWN.csv"
|
||||
and r.get("status") == "success"
|
||||
and r.get("imported_count") == 2
|
||||
for r in results
|
||||
)
|
||||
|
||||
# Assert rows persisted in flexible storage
|
||||
db = SessionLocal()
|
||||
try:
|
||||
rows = (
|
||||
db.query(FlexibleImport)
|
||||
.filter(FlexibleImport.file_type == "UNKNOWN.csv")
|
||||
.order_by(FlexibleImport.id.asc())
|
||||
.all()
|
||||
)
|
||||
assert len(rows) == 2
|
||||
assert rows[0].target_table is None
|
||||
assert set(rows[0].extra_data.keys()) == {"alpha", "beta"}
|
||||
assert set(rows[1].extra_data.keys()) == {"alpha", "beta"}
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user