import assert from "node:assert/strict"; // The voice engine panel in Settings -> Audio: renders its Swedish/English voice status, // and the engine choice persists to the backend and survives a reload. Whether Piper is // actually installed on the test machine doesn't matter here - generation and fallback // are covered by tests/tts.test.js, tests/piper_speech.test.js and the integration test. export async function runTtsSettingsSmoke({ evaluate, navigate, savedState, waitFor }) { const openAudioTab = async () => { await navigate("settings", "settingsForm"); await evaluate(`document.querySelector('[data-settings-tab="audio"]').click()`); await waitFor(async () => Boolean(await evaluate(`document.getElementById("ttsEngine")`)), "voice engine panel rendered"); }; await openAudioTab(); const panelText = await evaluate(`document.getElementById("ttsSettings").textContent`); assert.match(panelText, /Svenska/); assert.match(panelText, /English/); assert.equal(await evaluate(`document.getElementById("ttsEngine").value`), "browser", "the browser voice stays the default"); await evaluate(`(() => { const select = document.getElementById("ttsEngine"); select.value = "piper"; select.dispatchEvent(new Event("change")); })()`); await waitFor(async () => (await savedState()).settings.ttsEngine === "piper", "engine choice saved to the backend"); await openAudioTab(); assert.equal(await evaluate(`document.getElementById("ttsEngine").value`), "piper", "the choice survives a reload"); console.log("PASS the voice engine panel shows Swedish/English status and the Piper choice persists across a reload"); await evaluate(`(() => { const select = document.getElementById("ttsEngine"); select.value = "browser"; select.dispatchEvent(new Event("change")); })()`); await waitFor(async () => (await savedState()).settings.ttsEngine === "browser", "engine reset for the rest of the suite"); }