PayrollManagementSystem/backend/tests/unit/test_tplus_sql_compatibility.py

41 lines
1.5 KiB
Python

"""限制 T+ 源查询语法;真实 2008 R2 的驱动/引擎实测仍是最终验收条件。"""
import re
from pathlib import Path
import pytest
QUERY_ROOT = Path(__file__).resolve().parents[3] / "db" / "queries" / "tplus"
@pytest.mark.parametrize("path", sorted(QUERY_ROOT.glob("*.sql")), ids=lambda p: p.stem)
def test_源查询只使用旧版本分页并保持只读(path):
sql = re.sub(r"--[^\n]*", "", path.read_text(encoding="utf-8"))
assert not re.search(
r"\b(OFFSET|FETCH|OPENJSON|JSON_VALUE|STRING_AGG|TRY_CONVERT|TRY_CAST|"
r"INSERT|UPDATE|DELETE|MERGE|CREATE|ALTER|DROP|TRUNCATE)\b",
sql,
re.I,
)
assert "TOP (:batch_size)" in sql
assert ":after_id" in sql
assert not re.search(r"SELECT\s+\*", sql, re.I)
def test_收付款主表没有更新时间时不虚构水位():
sql = (QUERY_ROOT / "receipts.sql").read_text(encoding="utf-8")
assert "CAST(NULL AS datetime) AS source_updated_at" in sql
assert not re.search(r"h\.updated\b", sql, re.I)
def test_关联核验保持只读且不使用新版函数():
sql = re.sub(r"--[^\n]*", "", (QUERY_ROOT / "audit/queries.sql").read_text(encoding="utf-8"))
assert not re.search(
r"\b(OFFSET|FETCH|OPENJSON|JSON_VALUE|STRING_AGG|TRY_CONVERT|TRY_CAST|"
r"INSERT|UPDATE|DELETE|MERGE|CREATE|ALTER|DROP|TRUNCATE)\b",
sql,
re.I,
)
assert not re.search(r"SELECT\s+\*", sql, re.I)
assert ":sale_delivery_type_id" in sql and ":receive_flag" in sql