chore: auto release commit (2026-09-15 00:49:52)
All checks were successful
技能自动化发布 / release (push) Successful in 4s

This commit is contained in:
2026-09-15 00:49:52 +08:00
parent 293b7d1591
commit 44088336b4
5 changed files with 167 additions and 5 deletions

View File

@@ -1192,6 +1192,85 @@ def test_download_tasks_count_by_status() -> tuple[bool, str]:
conn.close()
def test_enqueue_download_tasks_safe_basic() -> tuple[bool, str]:
"""_enqueue_download_tasks_safe: 全部成功入队。"""
from service.platform_collector import _enqueue_download_tasks_safe
# 准备 3 个合同(in-memory DB,函数不会关闭)
conn = _make_conn()
for i in range(3):
conn.execute(
f"""INSERT INTO contracts
(contract_id, employee_id, teacher_name, unit_id, unit_name,
position, contract_type, contract_start, contract_end,
trial_period_end, status)
VALUES ('ENQ-{i}', 'T{i}', 'X', 'U{i}', 'Y', '', '',
'2024-01-01', '2026-04-15', '2024-04-15', '可续聘')"""
)
conn.commit()
summary = _enqueue_download_tasks_safe(["ENQ-0", "ENQ-1", "ENQ-2"], conn=conn)
if summary["enqueued"] != 3:
return False, f"enqueued={summary['enqueued']} (want 3) - {summary}"
if summary["failed"] != 0:
return False, f"failed={summary['failed']} - {summary}"
if summary["errors"]:
return False, f"errors={summary['errors']}"
return True, f"3 个合同全部入队: {summary}"
def test_enqueue_download_tasks_safe_idempotent() -> tuple[bool, str]:
"""_enqueue_download_tasks_safe: 同 contract_id 第二次调用 → skipped。"""
from service.platform_collector import _enqueue_download_tasks_safe
conn = _make_conn()
conn.execute(
f"""INSERT INTO contracts
(contract_id, employee_id, teacher_name, unit_id, unit_name,
position, contract_type, contract_start, contract_end,
trial_period_end, status)
VALUES ('ENQ-IDM', 'T1', 'X', 'U1', 'Y', '', '',
'2024-01-01', '2026-04-15', '2024-04-15', '可续聘')"""
)
conn.commit()
s1 = _enqueue_download_tasks_safe(["ENQ-IDM"], conn=conn)
s2 = _enqueue_download_tasks_safe(["ENQ-IDM"], conn=conn)
if s1["enqueued"] != 1:
return False, f"第一次 enqueued={s1['enqueued']} (want 1) - {s1}"
if s2["skipped"] != 1:
return False, f"第二次 skipped={s2['skipped']} (want 1) - {s2}"
if s2["enqueued"] != 0:
return False, f"第二次不应新增 enqueued={s2['enqueued']} - {s2}"
return True, f"幂等 OK: 第一次 {s1}, 第二次 {s2}"
def test_enqueue_download_tasks_safe_fk_failure() -> tuple[bool, str]:
"""_enqueue_download_tasks_safe: contract_id 不存在 → 计入 failed,不抛异常。"""
from service.platform_collector import _enqueue_download_tasks_safe
# 不插入合同,直接入队 → FK 失败(in-memory DB,函数不关闭)
conn = _make_conn()
summary = _enqueue_download_tasks_safe(["DOES-NOT-EXIST"], conn=conn)
if summary["failed"] != 1:
return False, f"failed={summary['failed']} (want 1) - {summary}"
if not summary["errors"]:
return False, f"errors 应非空: {summary}"
if "FOREIGN KEY" not in summary["errors"][0] and "foreign key" not in summary["errors"][0].lower():
return False, f"错误信息应提及 FOREIGN KEY: {summary['errors'][0]}"
return True, f"FK 失败被吞掉: failed=1, errors[0]={summary['errors'][0][:80]}"
def test_enqueue_download_tasks_safe_empty_list() -> tuple[bool, str]:
"""_enqueue_download_tasks_safe: 空列表 → no-op,不开 DB 连接。"""
from service.platform_collector import _enqueue_download_tasks_safe
summary = _enqueue_download_tasks_safe([])
if summary != {"enqueued": 0, "skipped": 0, "failed": 0, "errors": []}:
return False, f"空列表返回值异常: {summary}"
return True, "空列表 no-op OK"
# ---------- v1.1.18: show-config / logs-list ----------
@@ -1457,6 +1536,10 @@ def main() -> int:
_run("download_tasks/claim_atomic", test_download_tasks_claim_atomic)
_run("download_tasks/mark_success_and_failed", test_download_tasks_mark_success_and_failed)
_run("download_tasks/count_by_status", test_download_tasks_count_by_status)
_run("download_tasks/enqueue_safe_basic", test_enqueue_download_tasks_safe_basic)
_run("download_tasks/enqueue_safe_idempotent", test_enqueue_download_tasks_safe_idempotent)
_run("download_tasks/enqueue_safe_fk_failure", test_enqueue_download_tasks_safe_fk_failure)
_run("download_tasks/enqueue_safe_empty_list", test_enqueue_download_tasks_safe_empty_list)
_run("show_config/masks_tokens", test_show_config_masks_tokens)
_run("show_config/skips_empty", test_show_config_skips_empty)
_run("show_config/skips_comments", test_show_config_skips_comments)