import unittest from unittest.mock import patch from app import create_app class RouteMessageTest(unittest.TestCase): def setUp(self): self.app = create_app("testing") self.client = self.app.test_client() def test_success_messages_include_business_action(self): response = self.client.get("/api/health") self.assertEqual(response.status_code, 200) self.assertEqual(response.get_json()["message"], "健康检查成功") def test_failure_messages_include_business_action(self): response = self.client.get("/api/rules/status") self.assertEqual(response.status_code, 400) self.assertEqual(response.get_json()["message"], "查询失败:缺少 task_id") def test_clear_domains_message_is_delete_success(self): with patch("app.routes.domain.DomainStorage") as domain_storage_cls: with patch("app.routes.domain.SchemaStorage") as schema_storage_cls: domain_storage_cls.return_value.clear_all.return_value = 3 schema_storage_cls.return_value.delete_file.return_value = True response = self.client.post("/api/domains/clear") self.assertEqual(response.status_code, 200) self.assertEqual(response.get_json()["message"], "删除成功") self.assertEqual(response.get_json()["data"]["deleted_count"], 3) def test_generate_rules_returns_compact_async_task_info(self): with patch("app.routes.rules.RuleGenerationService") as service_cls: service_cls.return_value.start.return_value = { "task_id": "task-1", "status": "running", "limit": 3, "generated_count": 0, "output_file": "/app/output/rules-task-1/rules-task-1.xlsx", "markdown_file": "/app/output/rules-task-1/rules-task-1.md", "files": { "excel": "/app/output/rules-task-1/rules-task-1.xlsx", "markdown": "/app/output/rules-task-1/rules-task-1.md", }, } response = self.client.post("/api/rules/generate", json={"limit": 3}) body = response.get_json() self.assertEqual(response.status_code, 200) self.assertEqual(body["message"], "规则生成任务创建成功") self.assertEqual(body["data"], { "task_id": "task-1", "status": "running", "async": True, "limit": 3, "status_url": "/api/rules/status?task_id=task-1", }) if __name__ == "__main__": unittest.main()