coming together

This commit is contained in:
HotSwapp
2025-08-13 18:53:35 -05:00
parent acc5155bf7
commit 5111079149
51 changed files with 14457 additions and 588 deletions

View 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()