from pathlib import Path ROOT=Path(__file__).resolve().parents[1] def test_version(): assert (ROOT/"VERSION").read_text(encoding="utf-8").strip()=="4.6.15" def test_manual_task_backend_exists(): service=(ROOT/"services/manual_tasks.py").read_text(encoding="utf-8") routes=(ROOT/"routes/manual_tasks.py").read_text(encoding="utf-8") assert "class ManualTaskStore" in service assert "VALID_STATUSES" in service assert "/api/sidebar/tasks/manual" in routes assert 'methods=["POST"]' in routes assert 'methods=["PATCH"]' in routes assert 'methods=["DELETE"]' in routes def test_ui_server_lists_manual_tasks(): py=(ROOT/"ui_server.py").read_text(encoding="utf-8") assert "MANUAL_TASK_STORE.list_user" in py assert '"kind":"manual"' in py assert "register_manual_task_routes" in py def test_frontend_new_task_controls(): js=(ROOT/"static/js/app.js").read_text(encoding="utf-8") assert "+ 新建任务" in js assert "openManualTaskEditor" in js assert "标记完成" in js assert "重新打开" in js assert "manual-delete" in js assert "账号服务器持久化(可跨设备)" in js