feat(asr-pipeline): merge PR #1 webauth/CSRF/locking hardening and web_password fallback
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user