refactor(db)!: finalize pooled WNDB v2 migration
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
from threading import get_ident
|
||||
from uuid import uuid4
|
||||
|
||||
from fastapi import FastAPI
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from app.api.v1.endpoints.components import curves
|
||||
from app.api.v1.rest_router import api_router
|
||||
from app.auth.project_dependencies import (
|
||||
ProjectContext,
|
||||
get_project_business_routing,
|
||||
get_project_context,
|
||||
)
|
||||
from app.infra.db.project_routing import ActiveProjectRouting, get_active_project_routing
|
||||
|
||||
|
||||
def test_sync_wndb_endpoint_parses_body_and_runs_in_worker_thread(monkeypatch) -> None:
|
||||
call: dict[str, object] = {}
|
||||
project_id = uuid4()
|
||||
user_id = uuid4()
|
||||
context = ProjectContext(
|
||||
project_id=project_id,
|
||||
project_code="project_a",
|
||||
user_id=user_id,
|
||||
project_role="member",
|
||||
)
|
||||
routing = ActiveProjectRouting(
|
||||
project_code="project_a",
|
||||
business_dsn="postgresql://user:password@db.example/project_a",
|
||||
)
|
||||
|
||||
async def override_context() -> ProjectContext:
|
||||
call["event_loop_thread"] = get_ident()
|
||||
return context
|
||||
|
||||
async def override_routing() -> ActiveProjectRouting:
|
||||
return routing
|
||||
|
||||
def fake_add_curve(network, changes):
|
||||
call["worker_thread"] = get_ident()
|
||||
call["network"] = network
|
||||
call["operations"] = changes.operations
|
||||
call["routing"] = get_active_project_routing()
|
||||
return {"ok": True}
|
||||
|
||||
monkeypatch.setattr(curves, "add_curve", fake_add_curve)
|
||||
app = FastAPI()
|
||||
app.include_router(api_router)
|
||||
app.dependency_overrides[get_project_context] = override_context
|
||||
app.dependency_overrides[get_project_business_routing] = override_routing
|
||||
|
||||
with TestClient(app) as client:
|
||||
response = client.post(
|
||||
"/curves",
|
||||
params={"curve": "C-1"},
|
||||
json={"points": [[0, 10], [1, 20]]},
|
||||
)
|
||||
|
||||
assert response.status_code == 201
|
||||
assert response.json() == {"ok": True}
|
||||
assert call == {
|
||||
"event_loop_thread": call["event_loop_thread"],
|
||||
"worker_thread": call["worker_thread"],
|
||||
"network": "project_a",
|
||||
"operations": [{"id": "C-1", "points": [[0, 10], [1, 20]]}],
|
||||
"routing": routing,
|
||||
}
|
||||
assert call["worker_thread"] != call["event_loop_thread"]
|
||||
Reference in New Issue
Block a user