Files
infra-docker-configs/servers/tools-pve/asr-pipeline/tests/test_control.py
T
Codex 3c70861463
Build image / build (push) Canceled after 0s
Build ASR Pipeline / image (push) Canceled after 0s
feat(asr-pipeline): merge PR #1 webauth/CSRF/locking hardening and web_password fallback
2026-11-02 06:37:33 -08:00

87 lines
3.3 KiB
Python

from __future__ import annotations
import json
import os
import tempfile
import unittest
from pathlib import Path
TMP = tempfile.TemporaryDirectory()
os.environ["ASR_STATE_DIR"] = str(Path(TMP.name) / "state")
os.environ["ASR_VAULT"] = str(Path(TMP.name) / "vault")
os.environ["ASR_RECORDINGS_ROOT"] = str(Path(TMP.name) / "recordings")
from asrpipe import control_web, review, segment # noqa: E402
class ControlWebTests(unittest.TestCase):
def setUp(self):
self.db_dir = Path(TMP.name) / "control-state"
self.db_dir.mkdir(parents=True, exist_ok=True)
control_web.DB = self.db_dir / "intake.db"
def test_job_state_is_persistent(self):
con = control_web._connect()
now = 100.0
con.execute(
"INSERT INTO intake_job(id,original_name,stored_name,title,context,size,"
"status,created_at,updated_at) VALUES(?,?,?,?,?,?,?,?,?)",
("j1", "call.mp3", "stored.mp3", "项目通话", "背景", 123,
"queued", now, now))
con.commit()
con.close()
self.assertTrue(control_web.update_job(
"j1", "transcribing", "正在转写"))
job = control_web._jobs(1)[0]
self.assertEqual(job["status"], "transcribing")
self.assertEqual(job["detail"], "正在转写")
def test_schema_migrates_task_review_fields(self):
con = control_web._connect()
columns = {row["name"] for row in con.execute(
"PRAGMA table_info(intake_job)")}
con.close()
self.assertIn("draft", columns)
self.assertIn("result", columns)
def test_review_queue_is_scoped_to_one_job(self):
con = control_web._connect()
now = 200.0
con.execute(
"INSERT INTO intake_job(id,original_name,stored_name,title,context,size,"
"status,detail,transcript,created_at,updated_at,draft,result) "
"VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)",
("job-scope", "scope.wav", "scope.wav", "范围测试", "", 10,
"review", "", "/archive/scope.txt", now, now,
"/draft/scope.md", ""))
con.commit()
con.close()
own = review.enqueue("/archive/scope.txt", "本任务问题?", {
"kind": "draft_question"})
review.enqueue("/archive/other.txt", "其他任务问题?", {
"kind": "draft_question"})
job = control_web._job("job-scope")
rows = control_web._pending_for_job(job)
self.assertEqual([row["id"] for row in rows], [own])
self.assertTrue(control_web._review_url("job-scope").endswith(
"/jobs/job-scope/review/"))
def test_intake_metadata_is_not_transcript_body(self):
metadata = {
"job_id": "abc", "title": "项目通话",
"context": "参与人是张三和李四",
}
raw = (
"<!-- intake: " + json.dumps(metadata, ensure_ascii=False) + " -->\n"
"<!-- voiceprint_session: sess clusters: 1 -->\n"
"# 转写(Qwen3-ASR 1.7B + CAM++ 分角色 + 声纹)\n\n"
"【speaker_0】测试正文。\n")
turns, meta = segment.parse(raw)
self.assertEqual(meta["intake"], metadata)
self.assertEqual(turns[0].text, "测试正文。")
self.assertNotIn("参与人", turns[0].text)
if __name__ == "__main__":
unittest.main()