fix(bot-bridge): subjects 写入端点编码长度收敛到 DB 列宽20 — 21~32字符编码原穿过校验触发 MySQL 1406 整批500, 改为400拒绝 (dama-cma-subjects-write-endpoint-20260912 复核)

This commit is contained in:
Hermes CI Fix
2026-09-12 10:46:57 +08:00
parent 840d98765d
commit ca2832b698
2 changed files with 23 additions and 2 deletions
+18
View File
@@ -493,6 +493,24 @@ class TestSubjectsWrite:
assert resp.status_code == 400
assert "subject_name" in str(resp.json())
def test_code_too_long_400(self, client: TestClient, db: Session):
"""编码长度上限 = min(任务规格 32, DB varchar(20)) = 20
生产实测(2026-09-12):按 32 放行时 21 字符编码穿过校验 → MySQL 1406 Data too long
→ 整批 500;收敛到 DB 列宽后应 400 拒绝且零落库。
"""
resp = client.post(self.URL, json={"subjects": [
self._row("9" * 21, "验证科目")]}, headers=BOT_KEY)
assert resp.status_code == 400, resp.json()
assert "超长" in str(resp.json())
assert db.query(Subject).filter(Subject.subject_code == "9" * 21).count() == 0
def test_parent_code_too_long_400(self, client: TestClient):
resp = client.post(self.URL, json={"subjects": [
self._row("9402", "验证子科目", parent_code="9" * 21, level=2)]}, headers=BOT_KEY)
assert resp.status_code == 400, resp.json()
assert "超长" in str(resp.json())
# ── 落库语义 ──
def test_dry_run_zero_write(self, client: TestClient, db: Session):
before = db.query(Subject).count()