|
|
"""
|
|
|
模块接口测试 —— 插件模块 - task(任务调度)
|
|
|
|
|
|
动态路由映射:module_task → /task
|
|
|
包含 cronjob(调度器/任务/日志/节点)和 workflow(工作流定义/节点类型)。
|
|
|
|
|
|
每个接口一个测试用例,覆盖查询 / 新增 / 修改 / 删除 等操作。
|
|
|
"""
|
|
|
|
|
|
from conftest import assert_route
|
|
|
from fastapi.testclient import TestClient
|
|
|
|
|
|
# ============================================================
|
|
|
# /task/cronjob — 调度器与任务
|
|
|
# ============================================================
|
|
|
|
|
|
|
|
|
class TestCronjobScheduler:
|
|
|
"""调度器管理接口。"""
|
|
|
|
|
|
def test_scheduler_status(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "GET", "/task/cronjob/job/scheduler/status")
|
|
|
|
|
|
def test_scheduler_jobs(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "GET", "/task/cronjob/job/scheduler/jobs")
|
|
|
|
|
|
def test_scheduler_start(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "POST", "/task/cronjob/job/scheduler/start")
|
|
|
|
|
|
def test_scheduler_pause(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "POST", "/task/cronjob/job/scheduler/pause")
|
|
|
|
|
|
def test_scheduler_resume(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "POST", "/task/cronjob/job/scheduler/resume")
|
|
|
|
|
|
def test_scheduler_console(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "GET", "/task/cronjob/job/scheduler/console")
|
|
|
|
|
|
def test_scheduler_sync(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "POST", "/task/cronjob/job/scheduler/sync")
|
|
|
|
|
|
def test_scheduler_shutdown(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "POST", "/task/cronjob/job/scheduler/shutdown")
|
|
|
|
|
|
def test_scheduler_jobs_clear(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "DELETE", "/task/cronjob/job/scheduler/jobs/clear")
|
|
|
|
|
|
|
|
|
class TestCronjobTask:
|
|
|
"""任务管理接口。"""
|
|
|
|
|
|
def test_task_pause(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "POST", "/task/cronjob/job/task/pause/test_job")
|
|
|
|
|
|
def test_task_resume(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "POST", "/task/cronjob/job/task/resume/test_job")
|
|
|
|
|
|
def test_task_run(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "POST", "/task/cronjob/job/task/run/test_job")
|
|
|
|
|
|
def test_task_remove(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "DELETE", "/task/cronjob/job/task/remove/test_job")
|
|
|
|
|
|
|
|
|
class TestCronjobLog:
|
|
|
"""执行日志接口。"""
|
|
|
|
|
|
def test_job_log_list(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "GET", "/task/cronjob/job/log/list")
|
|
|
|
|
|
def test_job_log_detail(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "GET", "/task/cronjob/job/log/detail/1")
|
|
|
|
|
|
def test_job_log_delete(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "DELETE", "/task/cronjob/job/log/delete", json=[9999])
|
|
|
|
|
|
|
|
|
class TestCronjobNode:
|
|
|
"""节点管理接口。"""
|
|
|
|
|
|
def test_node_options(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "GET", "/task/cronjob/node/options")
|
|
|
|
|
|
def test_node_list(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "GET", "/task/cronjob/node/list")
|
|
|
|
|
|
def test_node_detail(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "GET", "/task/cronjob/node/detail/1")
|
|
|
|
|
|
def test_node_create(self, test_client: TestClient) -> None:
|
|
|
assert_route(
|
|
|
test_client,
|
|
|
"POST",
|
|
|
"/task/cronjob/node/create",
|
|
|
json={"name": "测试节点", "node_type": "http"},
|
|
|
)
|
|
|
|
|
|
def test_node_update(self, test_client: TestClient) -> None:
|
|
|
assert_route(
|
|
|
test_client,
|
|
|
"PUT",
|
|
|
"/task/cronjob/node/update/1",
|
|
|
json={"name": "更新节点"},
|
|
|
)
|
|
|
|
|
|
def test_node_delete(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "DELETE", "/task/cronjob/node/delete", json=[9999])
|
|
|
|
|
|
def test_node_execute(self, test_client: TestClient) -> None:
|
|
|
assert_route(
|
|
|
test_client,
|
|
|
"POST",
|
|
|
"/task/cronjob/node/execute/1",
|
|
|
json={},
|
|
|
)
|
|
|
|
|
|
def test_node_clear(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "DELETE", "/task/cronjob/node/clear")
|
|
|
|
|
|
def test_node_status_batch(self, test_client: TestClient) -> None:
|
|
|
assert_route(
|
|
|
test_client,
|
|
|
"PATCH",
|
|
|
"/task/cronjob/node/status/batch",
|
|
|
json={"ids": [1], "status": 1},
|
|
|
)
|
|
|
|
|
|
|
|
|
# ============================================================
|
|
|
# /task/workflow — 工作流
|
|
|
# ============================================================
|
|
|
|
|
|
|
|
|
class TestWorkflowDefinition:
|
|
|
"""工作流定义接口。"""
|
|
|
|
|
|
def test_workflow_list(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "GET", "/task/workflow/definition/list")
|
|
|
|
|
|
def test_workflow_detail(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "GET", "/task/workflow/definition/detail/1")
|
|
|
|
|
|
def test_workflow_create(self, test_client: TestClient) -> None:
|
|
|
assert_route(
|
|
|
test_client,
|
|
|
"POST",
|
|
|
"/task/workflow/definition/create",
|
|
|
json={"name": "测试工作流", "node_graph": {"nodes": [], "edges": []}},
|
|
|
)
|
|
|
|
|
|
def test_workflow_update(self, test_client: TestClient) -> None:
|
|
|
assert_route(
|
|
|
test_client,
|
|
|
"PUT",
|
|
|
"/task/workflow/definition/update/1",
|
|
|
json={"name": "更新工作流"},
|
|
|
)
|
|
|
|
|
|
def test_workflow_delete(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "DELETE", "/task/workflow/definition/delete", json=[9999])
|
|
|
|
|
|
def test_workflow_publish(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "POST", "/task/workflow/definition/publish/1")
|
|
|
|
|
|
def test_workflow_execute(self, test_client: TestClient) -> None:
|
|
|
assert_route(
|
|
|
test_client,
|
|
|
"POST",
|
|
|
"/task/workflow/definition/execute",
|
|
|
json={"definition_id": 1, "input_data": {}},
|
|
|
)
|
|
|
|
|
|
|
|
|
class TestWorkflowNodeType:
|
|
|
"""工作流节点类型接口。"""
|
|
|
|
|
|
def test_wf_node_type_options(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "GET", "/task/workflow/node-type/options")
|
|
|
|
|
|
def test_wf_node_type_list(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "GET", "/task/workflow/node-type/list")
|
|
|
|
|
|
def test_wf_node_type_detail(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "GET", "/task/workflow/node-type/detail/1")
|
|
|
|
|
|
def test_wf_node_type_create(self, test_client: TestClient) -> None:
|
|
|
assert_route(
|
|
|
test_client,
|
|
|
"POST",
|
|
|
"/task/workflow/node-type/create",
|
|
|
json={"name": "测试节点类型", "code": "test_type"},
|
|
|
)
|
|
|
|
|
|
def test_wf_node_type_update(self, test_client: TestClient) -> None:
|
|
|
assert_route(
|
|
|
test_client,
|
|
|
"PUT",
|
|
|
"/task/workflow/node-type/update/1",
|
|
|
json={"name": "更新节点类型"},
|
|
|
)
|
|
|
|
|
|
def test_wf_node_type_delete(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "DELETE", "/task/workflow/node-type/delete", json=[9999])
|
|
|
|
|
|
def test_wf_node_type_select(self, test_client: TestClient) -> None:
|
|
|
assert_route(test_client, "GET", "/task/workflow/node-type/select")
|