Can now modify a route, but only before it is called. Should only happen once call has happened

This commit is contained in:
Dan Hough
2014-08-07 12:05:46 +01:00
parent 839d2c948f
commit c6250f6b25
4 changed files with 22 additions and 10 deletions

View File

@@ -1,13 +1,10 @@
var url = require('url');
var merge = require('merge');
function FluentInterface(server, o) {
o = o || { debug: false };
var debug = require('./debug')('interfake-fluent', o.debug);
function forMethod(method, parent) {
return function (originalPath) {
var route;
var route, merge = false;
var routeDescriptor = {
request: {
url: originalPath,
@@ -33,8 +30,13 @@ function FluentInterface(server, o) {
return this;
},
body: function (body) {
if (merge) {
debug('Merging body for', route.simpleHash(), 'with', body);
route.mergeResponseBody(body);
} else {
debug('Changing body of', route.simpleHash(), 'to', body);
route.setResponseBody(body);
}
return this;
},
delay: function(delay) {
@@ -58,6 +60,7 @@ function FluentInterface(server, o) {
method: 'get',
url: path
});
merge = true;
return fluentInterface;
}
}

View File

@@ -1,6 +1,7 @@
var util = require('core-util-is');
var url = require('url');
var merge = require('merge');
var deepmerge = require('deepmerge');
function Route(descriptor, o) {
o = o || { debug: false };
@@ -61,6 +62,12 @@ Route.prototype.setResponseBody = function (body) {
this.response.body = body;
};
Route.prototype.mergeResponseBody = function (body) {
this.debug('Merging', body, 'into', this.response.body);
this.response.body = deepmerge(this.response.body, body);
this.debug('Respone body is now', this.response.body);
};
Route.prototype.setResponseDelay = function (delay) {
this.debug('New delay is', delay);
this.response.delay = delay;

View File

@@ -52,7 +52,8 @@
"merge": "^1.1.2",
"connect-json": "0.0.0",
"body-parser": "~1.0.2",
"pegjs": "^0.8.0"
"pegjs": "^0.8.0",
"deepmerge": "^0.2.7"
},
"license": "MIT",
"engines": {

View File

@@ -720,19 +720,20 @@ describe('Interfake JavaScript API', function () {
interfake.get('/fluent').body({ hello : 'there', goodbye: 'for now' }).modifies.get('/fluent').body({ what: 'ever' });
interfake.listen(3000);
get('http://localhost:3000/fluent')
get({url:'http://localhost:3000/fluent',json:true})
.then(function (results) {
console.log('Results are', results[1]);
assert.equal(results[0].statusCode, 200);
assert.equal(results[1].hello, 'there');
assert.equal(results[1].goodbye, 'for now');
assert.equal(results[2].what, undefined);
assert.equal(results[1].what, undefined);
return get('http://localhost:3000/fluent');
})
.then(function (results) {
assert.equal(results[0].statusCode, 200);
assert.equal(results[1].hello, 'there');
assert.equal(results[1].goodbye, 'for now');
assert.equal(results[2].what, 'ever');
assert.equal(results[1].what, 'ever');
done();
})
.done();