-
Notifications
You must be signed in to change notification settings - Fork 321
/
server.js
104 lines (92 loc) · 2.83 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
var _ = require('underscore');
var colors = require('colors');
var koa = require('koa');
var bodyParser = require('koa-bodyparser');
var app = koa();
app.use(bodyParser());
var mockRoutes = {};
var MockApp = {
before: function() {
// before each test
mockRoutes = {};
},
after: function() {
// after each test
mockRoutes = {};
},
get: function(path, response, params = null) {
this.stub('GET', path, response, params);
},
post: function(path, response, params = null) {
this.stub('POST', path, response, params);
},
put: function(path, response, params = null) {
this.stub('PUT', path, response, params);
},
delete: function(path, response, params = null) {
this.stub('DELETE', path, response, params);
},
stub: function(method, path, response, params = null) {
if (path[0]!=='/') path = '/' + path;
console.log('KOA stubbing: %s %s'.magenta, method.blue, path.green);
if (typeof response === 'string') {
response = {body: response, params: params};
}
if (!response.body) {
// assume it's a json object
response = {body: response, params: params};
}
response.params = params;
mockRoutes[method + ':' + path] = response;
},
pageNotFound: function(req) {
console.log('KOA ERROR: URL not registered: %s %s'.red, req.method.blue, req.url.green);
req.status = 404;
switch (req.accepts('html', 'json')) {
case 'html':
req.type = 'html';
req.body = '<p>Test Page Not Found</p>';
break;
case 'json':
// TODO: error message json format from v3?
req.body = {
message: 'Test Page Not Found'
};
break;
default:
req.type = 'text';
req.body = 'Test Page Not Found';
}
},
process: function(req) {
var key = req.method + ':' + req.url;
var found = mockRoutes[key];
if (found) {
if (found.params) {
if (!_.isEqual(req.request.body, found.params)) {
console.log('KOA: %s %s received with wrong params'.red, req.method.blue, req.url.green);
console.log('expected: %s'.red, JSON.stringify(found.params));
console.log('received: %s'.red, JSON.stringify(req.request.body));
return this.pageNotFound(req);
}
}
if (found.body) req.body = found.body;
if (found.status) req.status = found.status;
console.log('KOA: %s %s'.red, req.method.blue, req.url.green);
// console.log('==== %s', JSON.stringify(found.body).blue);
} else {
this.pageNotFound(req);
}
},
};
app.use(function *(){
// look up in current app
if (this.path === '/test/console.json') {
console[this.request.body.level](...["App Log:", ...this.request.body.arguments]);
}
else {
MockApp.process(this);
}
});
app.listen(3001);
module.exports = MockApp;