darvin-testing-framework
Advanced tools
Comparing version 1.7.0 to 1.8.0
45
index.js
'use strict'; | ||
const Handlebars = require('handlebars'); | ||
const BbPromise = require('bluebird'); | ||
@@ -15,2 +16,3 @@ const deepAssign = require('deep-assign'); | ||
this._apiUrl = config.apiUrl; | ||
this._handlebars = Handlebars.create(); | ||
} | ||
@@ -37,4 +39,18 @@ | ||
if (spec.parameters) { | ||
this._validateParameters(spec.parameters); | ||
} | ||
spec.scenarios.forEach(scenario => { | ||
that._validateScenario(spec, scenario); | ||
if (scenario.parameters) { | ||
this._validateParameters(scenario.parameters); | ||
Object.assign(scenario.parameters, parameters); | ||
} | ||
if (spec.parameters) { | ||
scenario.parameters = Object.assign({}, spec.parameters, scenario.parameters); | ||
} | ||
Object.keys(scenario).forEach(key => { | ||
@@ -66,2 +82,10 @@ switch (key) { | ||
_validateParameters(parameters) { | ||
Object.keys(parameters).forEach(parameter => { | ||
if (typeof parameters[parameter] !== 'string') { | ||
throw Error(`Only string parameters are allowed, the invalid parameter is "${parameter}".`) | ||
} | ||
}); | ||
} | ||
_validateScenario(spec, scenario) { | ||
@@ -105,3 +129,3 @@ if (!scenario.it && !scenario.fit && !scenario.xit) { | ||
_executeStep(spec, scenario, step, sender) { | ||
const message = Object.assign({}, step.user, { | ||
let message = Object.assign({}, step.user, { | ||
mocks: deepAssign({}, spec.mocks, scenario.mocks, step.mocks), | ||
@@ -111,4 +135,6 @@ contextMock: deepAssign({}, spec.contextMock, scenario.contextMock, step.contextMock) | ||
message = this._formatMessage(message, scenario.parameters); | ||
return this._send(spec, sender, message) | ||
.then(response => this._verifyStep(step, response)); | ||
.then(response => this._verifyStep(step, response, scenario.parameters)); | ||
} | ||
@@ -142,3 +168,3 @@ | ||
_verifyStep(step, response) { | ||
_verifyStep(step, response, context) { | ||
if (step.bot) { | ||
@@ -156,4 +182,5 @@ let index = response.findIndex(m => m.type === 'event'); | ||
return expectedResponses.every((expectedResponse, i) => | ||
this._verify(expectedResponse, response[i], this._verifyResponse.bind(this))); | ||
return expectedResponses.map(response => this._formatMessage(response, context)) | ||
.every((expectedResponse, i) => | ||
this._verify(expectedResponse, response[i], this._verifyResponse.bind(this))); | ||
}); | ||
@@ -222,4 +249,12 @@ | ||
} | ||
_formatMessage(message, context) { | ||
if (!context || Object.keys(context) === 0) { | ||
return message; | ||
} | ||
return JSON.parse(this._handlebars.compile(JSON.stringify(message), { noEscape: true })(context)); | ||
} | ||
} | ||
module.exports = TestingFramework; |
{ | ||
"name": "darvin-testing-framework", | ||
"version": "1.7.0", | ||
"version": "1.8.0", | ||
"description": "A framework for testing Darvin.ai bots.", | ||
@@ -25,2 +25,3 @@ "main": "index.js", | ||
"deep-assign": "^2.0.0", | ||
"handlebars": "^4.0.11", | ||
"node-fetch": "^1.7.1", | ||
@@ -27,0 +28,0 @@ "uuid": "^3.1.0" |
18580
224
5
+ Addedhandlebars@^4.0.11
+ Addedhandlebars@4.7.8(transitive)
+ Addedminimist@1.2.8(transitive)
+ Addedneo-async@2.6.2(transitive)
+ Addedsource-map@0.6.1(transitive)
+ Addeduglify-js@3.18.0(transitive)
+ Addedwordwrap@1.0.0(transitive)