]> git.giacomolli.uk - onechat/blobdiff - voice_transcriber_test.go
Receive voice notes from both chat services
[onechat] / voice_transcriber_test.go
index 58df9ea1cfb5bb235a69050515d71ac54875c8cc..48732f7a76691c468450223d089a87f98f728b3d 100644 (file)
@@ -107,6 +107,46 @@ func TestVoiceUnavailableAndStorageFailuresDoNotStopIntake(t *testing.T) {
        require.Equal(t, "(voice not stored)", transcriber.Text(t.Context(), store, []byte("audio")))
 }
 
        require.Equal(t, "(voice not stored)", transcriber.Text(t.Context(), store, []byte("audio")))
 }
 
+func TestVoiceBackupsKeepAudioButNotTemporaryTranscripts(t *testing.T) {
+       root := t.TempDir()
+       store := &VoiceStore{dir: filepath.Join(root, voiceDirName)}
+       name, err := store.Save([]byte("made-up backed-up audio"))
+       require.NoError(t, err)
+
+       temp := filepath.Join(store.dir, ".transcript-in-progress")
+       require.NoError(t, os.Mkdir(temp, 0o700))
+       require.NoError(t, os.WriteFile(filepath.Join(temp, "text.txt"), []byte("private temporary text"), 0o600))
+
+       target := t.TempDir()
+       require.NoError(t, backupCopy(t.Context(), root, target, filepath.Join(t.TempDir(), "backup.tar.gz")))
+       require.FileExists(t, filepath.Join(target, voiceDirName, name))
+       require.NoDirExists(t, filepath.Join(target, voiceDirName, ".transcript-in-progress"))
+
+       archive := filepath.Join(t.TempDir(), "voice.tar.gz")
+       _, err = backupArchive(t.Context(), target, archive)
+       require.NoError(t, err)
+
+       restored := t.TempDir()
+       require.NoError(t, backupExtract(t.Context(), archive, restored))
+
+       audio, err := os.ReadFile(filepath.Join(restored, voiceDirName, name))
+       require.NoError(t, err)
+       require.Equal(t, []byte("made-up backed-up audio"), audio)
+
+       info, err := os.Stat(filepath.Join(restored, voiceDirName, name))
+       require.NoError(t, err)
+       require.Equal(t, os.FileMode(0o600), info.Mode().Perm())
+}
+
+func TestVoiceConfigReadsExplicitLocalPaths(t *testing.T) {
+       dir := t.TempDir()
+       configWriteTest(t, dir, `{"voice":{"transcriber":"local-whisper","model":"model.bin"}}`)
+
+       config, err := loadConfig(dir)
+       require.NoError(t, err)
+       require.Equal(t, VoiceConfig{Transcriber: "local-whisper", Model: "model.bin"}, config.Voice)
+}
+
 func TestVoiceLookupHonorsExplicitThenNixThenPath(t *testing.T) {
        _, transcriber := voiceTestInput(t, "exit 0")
        valid := transcriber.config
 func TestVoiceLookupHonorsExplicitThenNixThenPath(t *testing.T) {
        _, transcriber := voiceTestInput(t, "exit 0")
        valid := transcriber.config