UNPKG

apigeek-affirm

Version:

A BDD/Gherkin micro-framework for REST APIs

117 lines (87 loc) 4.02 kB
var assert = require('assert'); var request = require('request'); var _ = require('lodash'); var fs = require('fs'); var path = require('path'); var http = require('../helpers/http'); module.exports = function(learn, config) { var find = this.find = function(self, name) { var value = self.feature.vars[name]?self.feature.vars[name]:self; if (!value) throw new Error(name+" not a variable"); return http.findInPath(value, name); } // ***** GIVEN ***** learn.given(["I am testing a $thing","I am testing an $thing"], function(thing, done) { // No Op - Placeholder // TODO: dynamic loading of vocabulary done && done(); }); learn.given("I set $name to $value", function(name, value, done) { this.feature.vars[name]=value; done && done(); }); learn.given(["I set $name to CSV:\n$CSV", "some CSV as $name:\n$CSV"], function(name, csv, done) { this.feature.vars[name] = csv; done && done(); }); learn.given(["I set $name to JSON:\n$JSON", "some JSON as $name:\n$JSON"], function(name, json, done) { this.feature.vars[name] = json; done && done(); }); learn.given("I return $js as $var", function(js, name, done) { var fn = new Function("return "+js); var result = fn.apply(this, arguments); this.feature.vars[name] = result; done && done(); }); // ***** WHEN ***** learn.when(["I wait for $seconds seconds","I sleep for $seconds seconds","I wait for $seconds second","I sleep for $seconds second"], function(seconds, done) { // TODO: sleep for XXXX seconds setTimeout(done, 1000*seconds) }); // ***** THEN ***** learn.then("I assert $js", function(js, done) { var fn = new Function("return "+js); var result = fn.apply(this, arguments); assert(result, "Custom Assert failed: "+js+" --> "+result); done && done(); }); learn.then("variable $name should exist", function(name, done) { var value = find(this,name); assert(value, "Variable "+name+" does not exist"); assert(value!=undefined, "Variable "+name+" does not exist"); done && done(); }); learn.then(["variable $name should be $value", "$name should be $value"], function(name, value, done) { if (value=="true") value = true; else if (value=="false") value = false; assert(this.feature.vars[name] != undefined, "Variable "+name+" does not exist -> "+this.feature.vars[name]); assert(this.feature.vars[name]==value, "Variable "+name+" does not equal "+value); done && done(); }); learn.then("variable $name should contain $value", function(name, value, done) { assert(this.feature.vars[name], "Variable "+name+" does not exist"); assert(this.feature.vars[name].indexOf(value)>0, "Variable "+name+" does not contain "+value); done && done(); }); learn.then("variable $name should match $regex", function(name, regex, done) { assert(this.feature.vars[name], "Variable "+name+" does not exist"); var re = new RegExp(regex); assert(re.test(this.feature.vars[name]), "Variable "+name+" does not match "+regex); done && done(); }); learn.then("$path in $name should match $regex", function(path, name, regex, done) { assert(this.feature.vars[name], "Variable "+name+" does not exist"); var value = this.feature.vars[name]; var found = http.findInPath(value, path); assert(found, "Path "+path+" not found in "+JSON.stringify(value)); var re = new RegExp(regex); assert(re.test(found), "Variable "+name+" == "+found+" does not match "+regex); done && done(); }); learn.then("dump $name", function(name, done) { var found = find(this, name); console.log("DUMP: %s ==> %j", name, found?found:this.feature.vars[name] ); done && done(); }); }