test_ddl_parser_view.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. """Tests for DDL parser with CREATE VIEW SQL files."""
  2. from pathlib import Path
  3. from app.core.llm.ddl_parser import DDLParser
  4. SQL_FILE = Path(__file__).with_name("TB_JC_SFXM表ddl.sql")
  5. def test_parse_create_view_fallback():
  6. sql_content = SQL_FILE.read_text(encoding="utf-8")
  7. parser = DDLParser(api_key="test-key")
  8. result = parser._parse_sql_ddl_fallback(sql_content)
  9. assert len(result) == 1
  10. table_info = result[0]["table_info"]
  11. assert table_info["name_en"] == "TB_JC_SFXM"
  12. assert len(result[0]["columns"]) == 23
  13. assert result[0]["columns"][0]["name_en"] == "YLJGDM"
  14. assert result[0]["columns"][1]["name_en"] == "XMDM"
  15. def test_parse_ddl_prefers_local_sql_before_llm(monkeypatch):
  16. sql_content = SQL_FILE.read_text(encoding="utf-8")
  17. parser = DDLParser(api_key="test-key")
  18. def fail_if_called(_sql):
  19. raise AssertionError("LLM should not be called when local SQL parse succeeds")
  20. monkeypatch.setattr(parser, "_parse_ddl_with_llm", fail_if_called)
  21. result = parser.parse_ddl(sql_content)
  22. assert isinstance(result, list)
  23. assert result[0]["table_info"]["name_en"] == "TB_JC_SFXM"
  24. def test_normalize_empty_llm_list_uses_fallback(monkeypatch):
  25. sql_content = "SELECT 1"
  26. parser = DDLParser(api_key="test-key")
  27. monkeypatch.setattr(parser, "_parse_ddl_with_llm", lambda _sql: [])
  28. result = parser.parse_ddl(sql_content)
  29. assert result == []
  30. def test_normalize_error_dict_without_table_info():
  31. raw = {"code": 500, "message": "API请求失败"}
  32. assert DDLParser.normalize_ddl_parse_result(raw) == []