From 220e4fab27b7f419b3e89e2f2d28ae789aac09d7 Mon Sep 17 00:00:00 2001
From: wangzhibo <wangzhibo@shsening.com>
Date: 星期四, 08 十月 2026 16:29:55 +0800
Subject: [PATCH] 5种场景模式家长端ok

---
 xiaozhi-esp32-server/main/xiaozhi-server/tests/test_audio_archive.py |   48 ++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 44 insertions(+), 4 deletions(-)

diff --git a/xiaozhi-esp32-server/main/xiaozhi-server/tests/test_audio_archive.py b/xiaozhi-esp32-server/main/xiaozhi-server/tests/test_audio_archive.py
index 0ed7d39..10643ba 100644
--- a/xiaozhi-esp32-server/main/xiaozhi-server/tests/test_audio_archive.py
+++ b/xiaozhi-esp32-server/main/xiaozhi-server/tests/test_audio_archive.py
@@ -3,7 +3,7 @@
 from pathlib import Path
 from types import SimpleNamespace
 
-from core.audio_archive import archive_pcm_snapshot, archive_wav
+from core.audio_archive import archive_pcm_snapshot, archive_wav, plain_transcript
 from core.app_runtime.assessment import pcm_snapshot_to_wav, save_turn_wav
 
 
@@ -30,7 +30,7 @@
         config={"audio_archive": {"enabled": False}},
     )
     wav = pcm_snapshot_to_wav([b"\x00\x00" * 80])
-    assert archive_wav(conn, wav) is None
+    assert archive_wav(conn, wav, text="hello") is None
 
 
 def test_save_turn_wav_uses_archive_layout(tmp_path, monkeypatch):
@@ -41,10 +41,12 @@
         config={"audio_archive": {"enabled": True, "dir": "data/recordings"}},
     )
     wav = pcm_snapshot_to_wav([b"\x00\x00" * 160])
-    audio_id = save_turn_wav("sess", 3, wav, conn=conn)
+    audio_id = save_turn_wav("sess", 3, wav, conn=conn, text="hello world")
     assert audio_id is not None
     assert "mac1/shadowing/" in audio_id
     assert audio_id.endswith(".wav")
+    txt = tmp_path / "data" / "recordings" / Path(audio_id).with_suffix(".txt")
+    assert txt.read_text(encoding="utf-8").strip() == "hello world"
 
 
 def test_chat_pcm_archive_uses_chat_dir(tmp_path, monkeypatch):
@@ -54,6 +56,44 @@
         interaction_mode="CHAT",
         config={"audio_archive": {"enabled": True, "dir": "data/recordings"}},
     )
-    relative = archive_pcm_snapshot(conn, [b"\x00\x00" * 80])
+    relative = archive_pcm_snapshot(conn, [b"\x00\x00" * 80], text="浣犲ソ灏忔櫤")
     assert relative is not None
     assert relative.startswith("dev2/chat/")
+    txt = tmp_path / "data" / "recordings" / Path(relative).with_suffix(".txt")
+    assert txt.read_text(encoding="utf-8").strip() == "浣犲ソ灏忔櫤"
+
+
+def test_archive_writes_sidecar_txt_for_asr_and_tts(tmp_path, monkeypatch):
+    monkeypatch.setattr("core.audio_archive.get_project_dir", lambda: str(tmp_path))
+    conn = SimpleNamespace(
+        device_id="dev3",
+        interaction_mode="CHAT",
+        config={"audio_archive": {"enabled": True, "dir": "data/recordings"}},
+    )
+    wav = pcm_snapshot_to_wav([b"\x00\x00" * 80])
+    asr_rel = archive_wav(conn, wav, kind="asr", text="鐢ㄦ埛璇寸殑璇�")
+    tts_rel = archive_wav(conn, wav, kind="tts", text="娉涘惉缁撴潫銆傛垜浠潵鑱婂ぉ鍚с��")
+    asr_txt = tmp_path / "data" / "recordings" / Path(asr_rel).with_suffix(".txt")
+    tts_txt = tmp_path / "data" / "recordings" / Path(tts_rel).with_suffix(".txt")
+    assert asr_txt.read_text(encoding="utf-8").strip() == "鐢ㄦ埛璇寸殑璇�"
+    assert tts_txt.read_text(encoding="utf-8").strip() == "娉涘惉缁撴潫銆傛垜浠潵鑱婂ぉ鍚с��"
+
+
+def test_plain_transcript_unwraps_funasr_json():
+    wrapped = '{"speaker": "tom", "content": "浠婂ぉ澶╂皵涓嶉敊"}'
+    assert plain_transcript(wrapped) == "浠婂ぉ澶╂皵涓嶉敊"
+    assert plain_transcript("鐩存帴鏂囨湰") == "鐩存帴鏂囨湰"
+
+
+def test_empty_asr_still_writes_sidecar(tmp_path, monkeypatch):
+    monkeypatch.setattr("core.audio_archive.get_project_dir", lambda: str(tmp_path))
+    conn = SimpleNamespace(
+        device_id="dev4",
+        interaction_mode="SHADOWING",
+        config={"audio_archive": {"enabled": True, "dir": "data/recordings"}},
+    )
+    wav = pcm_snapshot_to_wav([b"\x00\x00" * 80])
+    relative = archive_wav(conn, wav, kind="asr", extra="sess_0", text="")
+    txt = tmp_path / "data" / "recordings" / Path(relative).with_suffix(".txt")
+    assert txt.is_file()
+    assert txt.read_text(encoding="utf-8") == ""

--
Gitblit v1.9.1