mirror of
https://github.com/dograh-hq/dograh.git
synced 2026-06-22 08:38:13 +02:00
67 lines
2 KiB
Python
67 lines
2 KiB
Python
|
|
from unittest.mock import AsyncMock, MagicMock, patch
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
from api.mcp_server.tools.create_workflow import create_workflow
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_create_workflow_rejects_duplicate_api_triggers():
|
||
|
|
user = MagicMock()
|
||
|
|
user.id = 1
|
||
|
|
user.selected_organization_id = 1
|
||
|
|
payload = {
|
||
|
|
"nodes": [
|
||
|
|
{
|
||
|
|
"id": "start-1",
|
||
|
|
"type": "startCall",
|
||
|
|
"position": {"x": 0, "y": 0},
|
||
|
|
"data": {"name": "Start", "prompt": "Greet."},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "trigger-1",
|
||
|
|
"type": "trigger",
|
||
|
|
"position": {"x": 0, "y": 200},
|
||
|
|
"data": {"name": "Trigger A", "trigger_path": "support_west"},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "trigger-2",
|
||
|
|
"type": "trigger",
|
||
|
|
"position": {"x": 0, "y": 400},
|
||
|
|
"data": {"name": "Trigger B", "trigger_path": "support_east"},
|
||
|
|
},
|
||
|
|
],
|
||
|
|
"edges": [],
|
||
|
|
}
|
||
|
|
|
||
|
|
with (
|
||
|
|
patch(
|
||
|
|
"api.mcp_server.tools.create_workflow.authenticate_mcp_request",
|
||
|
|
AsyncMock(return_value=user),
|
||
|
|
),
|
||
|
|
patch(
|
||
|
|
"api.mcp_server.tools.create_workflow.parse_code",
|
||
|
|
AsyncMock(
|
||
|
|
return_value={
|
||
|
|
"ok": True,
|
||
|
|
"workflowName": "duplicate-trigger-test",
|
||
|
|
"workflow": payload,
|
||
|
|
}
|
||
|
|
),
|
||
|
|
),
|
||
|
|
patch(
|
||
|
|
"api.mcp_server.tools.create_workflow.reconcile_positions",
|
||
|
|
return_value=payload,
|
||
|
|
),
|
||
|
|
patch(
|
||
|
|
"api.mcp_server.tools.create_workflow.db_client.create_workflow",
|
||
|
|
AsyncMock(),
|
||
|
|
) as create_mock,
|
||
|
|
):
|
||
|
|
result = await create_workflow(code="ignored")
|
||
|
|
|
||
|
|
assert result["created"] is False
|
||
|
|
assert result["error_code"] == "graph_validation"
|
||
|
|
assert "at most one API Trigger" in result["error"]
|
||
|
|
create_mock.assert_not_awaited()
|