UNPKG

ivr-tester

Version:

An automated testing framework for IVR call flows

103 lines (102 loc) 4.29 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.consoleUserInterface = void 0; const chalk_1 = __importDefault(require("chalk")); const ivrTranscription = (callServer, testSession) => { let includeTestName = false; let totalTests = 0; callServer.on("testStarted", () => { totalTests++; if (totalTests >= 2) { includeTestName = true; } }); testSession.callFlowSession.on("progress", (event) => { const state = chalk_1.default.gray.bold("Transcribing: "); const testName = includeTestName ? `${testSession.scenario.name}: ` : ""; console.log(state + chalk_1.default.gray(`${testName}${event.transcription}`)); }); }; const ivrTestPassed = (testSession) => testSession.callFlowSession.on("allPromptsMatched", () => console.log(chalk_1.default.green(`Test Complete: ${testSession.scenario.name}...`))); const ivrTestFailed = (testSession) => testSession.callFlowSession.on("timeoutWaitingForMatch", (event) => { console.log(`${chalk_1.default.bold.blue("Test -")} ${chalk_1.default.bold.blue(testSession.scenario.name)}\n`, `Them: "${event.transcription}"\n`, chalk_1.default.red("Timed out waiting for prompt to complete\n")); console.log(chalk_1.default.bold.red(`Test Failed`)); }); const callConnected = (callServer) => { callServer.on("callConnected", () => { console.log("Call connected"); }); }; const callServerListening = (callServer) => { callServer.on("listening", ({ localUrl }) => { console.log(`Server is listening on ${localUrl.port} for the stream for the call`); }); }; const callServerStopped = (callServer) => { callServer.on("stopped", () => console.log("The server has closed")); }; const callServerErrored = (callServer) => { callServer.on("error", (event) => console.error("Server experienced an error", event.error.message)); }; const callRequested = (emitter) => emitter.on("callRequested", (event) => { switch (event.requestedCall.type) { case "audio-playback": console.log("Playing back audio to simulate call"); break; case "telephony": console.log(`Calling ${event.requestedCall.call.to}...`); break; } }); const callRequestErrored = (emitter) => emitter.on("callRequestErrored", (event) => console.error(`Call failed`, event.error.message)); const ivrTestConditionMet = (callServer, testSession) => { let includeTestName = false; let totalTests = 0; callServer.on("testStarted", () => { totalTests++; if (totalTests >= 2) { includeTestName = true; } }); testSession.callFlowSession.on("promptMatched", (event) => { const lines = []; if (includeTestName) { lines.push(`Test - ${testSession.scenario.name}`); } lines.push(`Them: "${event.transcription}"`); lines.push(`You: ${event.promptDefinition.then.describe()}`); console.log(chalk_1.default.bold.blue(lines.join(`\n`))); }); }; const callServerStarted = (eventEmitter) => { eventEmitter.on("callServerStarted", ({ callServer }) => { callConnected(callServer); callServerListening(callServer); callServerStopped(callServer); callServerErrored(callServer); callServer.on("testStarted", ({ testSession }) => { console.log(`Call using test '${testSession.scenario.name}'`); ivrTestPassed(testSession); ivrTestFailed(testSession); ivrTestConditionMet(callServer, testSession); ivrTranscription(callServer, testSession); }); }); }; const testAborting = (eventEmitter) => { eventEmitter.on("testsAborting", ({ reason }) => { console.log(chalk_1.default.bold.red(`Timed out: ${reason}`)); }); }; const consoleUserInterface = () => ({ initialise(eventEmitter) { callServerStarted(eventEmitter); callRequested(eventEmitter); callRequestErrored(eventEmitter); testAborting(eventEmitter); }, }); exports.consoleUserInterface = consoleUserInterface;