from types import SimpleNamespace from unittest.mock import patch from fastapi import FastAPI from fastapi.testclient import TestClient from api.routes.workflow import router from api.services.auth.depends import get_user def _make_test_app() -> FastAPI: app = FastAPI() app.include_router(router) app.dependency_overrides[get_user] = lambda: SimpleNamespace( id=1, provider_id="provider-1", selected_organization_id=11, ) return app def test_create_workflow_rejects_invalid_trigger_path_before_db_write(): app = _make_test_app() client = TestClient(app) with patch("api.routes.workflow.db_client") as mock_db: response = client.post( "/workflow/create/definition", json={ "name": "Support Agent", "workflow_definition": { "nodes": [ { "id": "trigger-1", "type": "trigger", "data": {"trigger_path": "support/west"}, } ], "edges": [], }, }, ) assert response.status_code == 422 detail = response.json()["detail"] assert detail["is_valid"] is False assert detail["errors"][0]["field"] == "data.trigger_path" assert "single URL path segment" in detail["errors"][0]["message"] assert mock_db.mock_calls == []