refactor(storage): route project DSNs and remove legacy backends
This commit is contained in:
@@ -10,6 +10,8 @@ from app.auth.metadata_dependencies import (
|
||||
get_current_metadata_admin,
|
||||
get_metadata_repository,
|
||||
)
|
||||
from app.infra.db.metadb.repositories.metadata_repository import ProjectDbRouting
|
||||
from app.infra.db.project_routing import get_project_pgconn_string
|
||||
from tests.conftest import build_test_app
|
||||
|
||||
|
||||
@@ -98,3 +100,47 @@ def test_model_import_rejects_non_inp_file(monkeypatch):
|
||||
assert response.status_code == 400
|
||||
assert response.json()["detail"] == "Only .inp model files are accepted"
|
||||
model_import.log_audit_event.assert_not_awaited()
|
||||
|
||||
|
||||
def test_model_update_uses_project_business_routing(monkeypatch):
|
||||
project_id = uuid4()
|
||||
project = SimpleNamespace(id=project_id, code="demo", status="active")
|
||||
repo = SimpleNamespace(
|
||||
session=object(),
|
||||
get_project_by_id=AsyncMock(return_value=project),
|
||||
get_project_db_routing=AsyncMock(
|
||||
return_value=ProjectDbRouting(
|
||||
project_id=project_id,
|
||||
db_role="biz_data",
|
||||
db_type="postgresql",
|
||||
dsn="postgresql://user:password@biz.example/routed_business",
|
||||
pool_min_size=1,
|
||||
pool_max_size=5,
|
||||
)
|
||||
),
|
||||
)
|
||||
captured: dict[str, str] = {}
|
||||
|
||||
async def fake_apply_model_update(content: bytes, project_code: str) -> None:
|
||||
assert content == VALID_INP
|
||||
captured["project_code"] = project_code
|
||||
captured["dsn"] = get_project_pgconn_string(project_code)
|
||||
|
||||
monkeypatch.setattr(model_import, "_apply_model_update", fake_apply_model_update)
|
||||
monkeypatch.setattr(model_import, "log_audit_event", AsyncMock())
|
||||
client = _client(
|
||||
admin=SimpleNamespace(id=uuid4(), role="admin", is_superuser=False),
|
||||
repo=repo,
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
f"/api/v1/admin/projects/{project_id}/model-imports",
|
||||
files={"file": ("desktop-model.inp", VALID_INP)},
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert captured == {
|
||||
"project_code": "demo",
|
||||
"dsn": "postgresql://user:password@biz.example/routed_business",
|
||||
}
|
||||
repo.get_project_db_routing.assert_awaited_once_with(project_id, "biz_data")
|
||||
|
||||
Reference in New Issue
Block a user