ai-pronunciation-trainer / static /tests_broken /test-app-7860-rec-de.spec.ts
alessandro trinca tornidor
test: add more e2e test cases
ab57dda
raw
history blame
3.87 kB
import { test, expect, chromium } from "@playwright/test";
import { writeFile } from 'node:fs/promises'
import { Readable } from 'node:stream'
import {readFileSync} from "fs"
test("XXX - test: get a phonetic accuracy evaluation from a recorded audio.", async () => {
/**
* - DE:
* - random choice (random, easy, medium, hard)
* - choice from the examples accordion
* - record a fake new audio
* - upload
* - EN:
* - random choice (random, easy, medium, hard)
*/
// todo: upload del file test_de.wav dalla cartella corrente senza
// todo: download del file audio
// todo: test online, https://mictests.com/
const urlAudio = "https://huggingface.co/spaces/aletrn/ai-pronunciation-trainer/resolve/main/tests/events/test_de.wav"
console.log("import.meta dir", import.meta.dirname, "#");
const dirname = import.meta.dirname;
const testAudioEnvPath = `${dirname}/test_de.wav%%noloop`
console.log("urlAudio", urlAudio, "#");
console.log("testAudioEnvPath", testAudioEnvPath, "#");
console.log("testAudioEnvPath", testAudioEnvPath, "#");
const response = await fetch(urlAudio)
const stream = Readable.fromWeb(response.body)
await writeFile(testAudioEnvPath, stream)
const string_output = readFileSync(testAudioEnvPath, 'utf8')
if (string_output.length > 0) {
console.log("testAudioEnvPath", testAudioEnvPath, "#");
console.log("testAudioEnvPath", testAudioEnvPath, "#");
} else {
console.log("empty testAudioEnvPath", testAudioEnvPath, "#");
throw new Error("File is empty!");
}
// const testAudioEnvPath = `${basedirAudioFiles}/test_de.wav`
console.log("start");
console.log("testAudioEnvPath", testAudioEnvPath, "#");
const browser = await chromium.launch({
args: [
"--use-fake-device-for-media-stream",
"--use-fake-ui-for-media-stream",
`--use-file-for-fake-audio-capture=${testAudioEnvPath}`,
],
ignoreDefaultArgs: ['--mute-audio']
})
const context = await browser.newContext();
context.grantPermissions(["microphone"]);
const page = await browser.newPage({});
await page.goto('http://localhost:7860/');
const radioLanguageSelectedDE = page.getByRole('radio', { name: 'de' })
await radioLanguageSelectedDE.check();
const textboxInput = page.getByLabel('Learner Transcription')
await textboxInput.fill('Ich bin Alex, wer bist du?');
const buttonTTS = page.getByRole('button', { name: 'Run TTS' })
await buttonTTS.click();
// todo: improve this hardcoded timeout
await page.waitForTimeout(3000);
const buttonPlay = page.getByLabel('Play', { exact: true })
await buttonPlay.click();
const waveFormTTS = page.locator('.scroll > .wrapper').first();
await waveFormTTS.waitFor({ state: 'attached' });
await waveFormTTS.waitFor({ state: 'visible' });
await expect(waveFormTTS).toBeVisible();
console.log("waveFormTTS??");
const buttonRecordTTS = page.getByRole('button', { name: 'Record', exact: true })
await buttonRecordTTS.click();
console.log("buttonRecordTTS??");
const buttonStopTTS = page.getByRole('button', { name: 'Stop', exact: true })
await buttonStopTTS.click();
console.log("buttonStopTTS??");
const buttonRecognizeSpeechAccuracy = page.getByRole('button', { name: 'Recognize speech accuracy' })
console.log("buttonRecognizeSpeechAccuracy??");
console.log("buttonRecognizeSpeechAccuracy??");
await buttonRecognizeSpeechAccuracy.click();
console.log("buttonRecognizeSpeechAccuracy=>click!");
console.log("buttonRecognizeSpeechAccuracy=>click!");
await page.waitForTimeout(300);
const errorsElements = page.getByText(/Error/);
const ErrorText = errorsElements.all()
console.log("ErrorText:", (await ErrorText).length, "#");
await expect(errorsElements).toHaveCount(0);
console.log("end");
await page.close();
});