from pathlib import Path ROOT=Path(__file__).resolve().parents[1] def test_version(): assert (ROOT/'VERSION').read_text(encoding='utf-8').strip()=='4.6.20' 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 and "可跨设备同步" in js and "服务器会话" in js