context("with no displayElementSelected handler", function() { describe("outputSpeech", function() { it("responds with NO_DISPLAY_ELEMENT_SELECTED message", function() { var subject = testApp.request(mockRequest).then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>" + testApp.messages.NO_DISPLAY_ELEMENT_SELECTED_FUNCTION + "</speak>", type: "SSML" }); }); }); });
it("retrieves a slot confirmation status", function() { testApp.intent("airportInfoIntent", {}, function(req, res) { res.say(req.slots["AirportCode"].confirmationStatus); return true; }); var request = testApp.request(mockRequest); var subject = request.then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>NONE</speak>", type: "SSML" }); });
describe("intent handler with AccountLink called on res", function() { it("responds with a account link card", function() { testApp.intent("airportInfoIntent", {}, function(req, res) { res.linkAccount(); }); var subject = testApp.request(mockRequest); var cardResponse = subject.then(function(response) { return response.response.card; }); return expect(cardResponse).to.eventually.become({ "type": "LinkAccount" }); }); });
it("clears output when clear is called and say is then called", function() { testApp.intent("airportInfoIntent", {}, function(req, res) { res.say(expectedMessage) .say(expectedMessage) .clear().say(expectedMessage); return true; }); var request = testApp.request(mockRequest); var subject = request.then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>tubular!</speak>", type: "SSML" }); });
context("when a slot's confirmationStatus is not CONFIRMED", function() { var mockRequest = mockHelper.load("intent_request_airport_info.json"); mockRequest.request.intent.slots['AirportCode'].confirmationStatus = "NONE"; it("reports no confirmation", function() { testApp.intent("airportInfoIntent", {}, function(req, res) { res.say(req.slots["AirportCode"].isConfirmed() ? "yes" : "no"); return true; }); var request = testApp.request(mockRequest); var subject = request.then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>no</speak>", type: "SSML" }); }); });
context("route request to undefined intent", function() { it("output speech contains NO_INTENT_FOUND response", function() { testApp.intent("airportInfoIntent", {}, function (req, res) { return req.getRouter().intent("noSuchIntent"); }); var speech = testApp.request(mockRequest).then(function (response) { return response.response.outputSpeech; }); return Promise.all([ expect(speech).to.eventually.become({ ssml: "<speak>" + testApp.messages.NO_INTENT_FOUND + "</speak>", type: "SSML" }) ]); }); });
it("responds with expected message", function() { testApp.intent("airportInfoIntent", {}, function(req, res) { res.say(expectedMessage); return true; }); var request = testApp.request(mockRequest); var subject = request.then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>" + expectedMessage + "</speak>", type: "SSML" }); });
context("with no intent handler", function() { var request = testApp.request(mockRequest); beforeEach(function() { request = testApp.request(mockRequest); }) describe("outputSpeech", function() { it("responds with NO_INTENT_FOUND message", function() { var subject = request.then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>" + testApp.messages.NO_INTENT_FOUND + "</speak>", type: "SSML" }); }); }); });
it("combines says into a larger response", function() { testApp.intent("airportInfoIntent", {}, function(req, res) { res.say(expectedMessage).say(expectedMessage); return true; }); var request = testApp.request(mockRequest); var subject = request.then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>" + expectedMessage + " " + expectedMessage + "</speak>", type: "SSML" }); });
context("when an intent's confirmationStatus is not CONFIRMED", function() { it("reports no confirmation", function() { testApp.intent("airportInfoIntent", {}, function(req, res) { res.say(req.isConfirmed() ? "yes" : "no"); return true; }); var request = testApp.request(mockRequest); var subject = request.then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>no</speak>", type: "SSML" }); }); });
it("responds with expected message for promise", function() { testApp.intent("airportInfoIntent", {}, function(req, res) { return Promise.resolve().then(function() { res.say(expectedMessage); }); }); var request = testApp.request(mockRequest); var subject = request.then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>" + expectedMessage + "</speak>", type: "SSML" }); });
it("retrieves a slot value", function() { testApp.intent("airportInfoIntent", {}, function(req, res) { res.say(req.slot("AirportCode")); return true; }); var request = testApp.request(mockRequest); var subject = request.then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>JFK</speak>", type: "SSML" }); });
it("clears output when clear is called", function() { testApp.intent("airportInfoIntent", {}, function(req, res) { res.say(expectedMessage).say(expectedMessage).clear(); return true; }); var request = testApp.request(mockRequest); var subject = request.then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak></speak>", type: "SSML" }); });
it("retrieves an intent confirmation status", function() { testApp.intent("airportInfoIntent", {}, function(req, res) { res.say(req.confirmationStatus); return true; }); var request = testApp.request(mockRequest); var subject = request.then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>NONE</speak>", type: "SSML" }); });
it("retrieves default slot value", function() { testApp.intent("airportInfoIntent", {}, function(req, res) { res.say(req.slot("InvalidSlotName", "default value")); return true; }); var request = testApp.request(mockRequest); var subject = request.then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>default value</speak>", type: "SSML" }); });