from fastapi.testclient import TestClient
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import StaticPool
import io

from app.db.base import Base
from app.api.main import app
from app.api.routers import designs as designs_router

engine = create_engine(
    "sqlite://",
    connect_args={"check_same_thread": False},
    poolclass=StaticPool,
    future=True,
)
TestingSessionLocal = sessionmaker(bind=engine)
Base.metadata.create_all(bind=engine)


def override_get_db():
    db = TestingSessionLocal()
    try:
        yield db
    finally:
        db.close()

app.dependency_overrides[designs_router.get_db] = override_get_db
client = TestClient(app)


def test_upload_design():
    file_content = b"hello-design"
    files = {"file": ("design.png", io.BytesIO(file_content), "image/png")}
    r = client.post("/designs/upload", files=files)
    assert r.status_code == 200
    data = r.json()
    assert data["id"] is not None
    assert data["original_filename"] == "design.png"

    # retrieve list
    r2 = client.get("/designs/")
    assert r2.status_code == 200
    assert len(r2.json()) >= 1
