Files
2026-07-13 12:45:58 +08:00

74 lines
2.3 KiB
Python

"""Tests for the GUI-driven `create_automation` path (the "New automation" / template flow).
No network and no LLM: this exercises validation + that a valid create lands in the task store
with a freshly provisioned scratch workspace.
"""
from __future__ import annotations
from pathlib import Path
from coworker.server.manager import SessionManager
def _manager(tmp_path, monkeypatch) -> SessionManager:
monkeypatch.setenv("COWORKER_STATE_DIR", str(tmp_path / "state"))
return SessionManager(data_dir=tmp_path / "data")
def test_create_automation_success(tmp_path, monkeypatch):
manager = _manager(tmp_path, monkeypatch)
out = manager.create_automation(
{
"title": "Morning news briefing",
"instructions": "Search the web and write a 5-bullet briefing.",
"cron": "0 8 * * *",
}
)
assert out["ok"] is True
task = out["task"]
assert task["title"] == "Morning news briefing"
assert task["schedule"] == "Every day at ~8:00 AM"
# it really landed in the store and is bound to a fresh scratch workspace
saved = manager.task_store.get(task["id"])
assert saved is not None
assert saved.agent == "cowork"
assert Path(saved.workspace).is_dir()
def test_create_automation_invalid_cron(tmp_path, monkeypatch):
manager = _manager(tmp_path, monkeypatch)
out = manager.create_automation(
{
"title": "Bad",
"instructions": "do something",
"cron": "not-a-cron",
}
)
assert out["ok"] is False
assert "invalid cron" in out["error"]
assert manager.task_store.list() == []
def test_create_automation_missing_instructions(tmp_path, monkeypatch):
manager = _manager(tmp_path, monkeypatch)
out = manager.create_automation(
{
"title": "No instructions",
"instructions": " ",
"cron": "0 8 * * *",
}
)
assert out["ok"] is False
assert "instructions" in out["error"]
assert manager.task_store.list() == []
def test_create_automation_requires_schedule(tmp_path, monkeypatch):
manager = _manager(tmp_path, monkeypatch)
out = manager.create_automation(
{"title": "No schedule", "instructions": "do something"}
)
assert out["ok"] is False
assert manager.task_store.list() == []