74 lines
2.3 KiB
Python
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() == []
|