ivr-tester
Version:
An automated testing framework for IVR call flows
103 lines (102 loc) • 4.29 kB
JavaScript
;
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;