Skip to content

Commit 38fced2

Browse files
committed
script evaluation test
1 parent bb962ad commit 38fced2

4 files changed

Lines changed: 139 additions & 11 deletions

File tree

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
"description": "JSONScript interpreter in JavaScript",
55
"main": "lib/jsonscript.js",
66
"scripts": {
7-
"test": "mocha --recursive --reporter=spec spec"
7+
"test": "mocha spec/*.spec.js -R spec",
8+
"test-cov": "istanbul cover -x 'spec/**' node_modules/mocha/bin/_mocha -- spec/*.spec.js -R spec"
89
},
910
"repository": {
1011
"type": "git",
@@ -27,6 +28,7 @@
2728
"jsonscript": "^0.1.0"
2829
},
2930
"devDependencies": {
31+
"istanbul": "^0.4.2",
3032
"mocha": "^2.4.5"
3133
}
3234
}

spec/evaluate.spec.js

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
'use strict';
2+
3+
var JSONScript = require('../lib/jsonscript');
4+
var assert = require('assert');
5+
var Ajv = require('ajv');
6+
var getPromise = require('./testutil').getPromise;
7+
8+
9+
describe('script evaluation', function() {
10+
var js, callsResolutions;
11+
12+
before(function() {
13+
js = JSONScript();
14+
js.addExecutor('router', router);
15+
});
16+
17+
beforeEach(function(){
18+
callsResolutions = getPromise.callsResolutions = [];
19+
});
20+
21+
function router(args) {
22+
return router.get(args);
23+
}
24+
25+
router.get = function(args) {
26+
var path = args.path;
27+
callsResolutions.push({ call: 'get: ' + path });
28+
var result = path
29+
? 'you requested ' + path
30+
: new Error('path not specified');
31+
return getPromise(result, 10);
32+
}
33+
34+
router.post = function(args) {
35+
var path = args.path;
36+
var body = args.body;
37+
callsResolutions.push({ call: 'post: ' + path });
38+
var result = path && body
39+
? 'you posted ' + JSON.stringify(body) + ' to ' + path
40+
: new Error('path or body not specified');
41+
return getPromise(result, 10);
42+
}
43+
44+
45+
it('should evaluate router.get script', function() {
46+
var script = {
47+
$exec: 'router',
48+
$args: { path: '/resource' }
49+
};
50+
51+
return js.evaluate(script).then(function (res) {
52+
assert.equal(res, 'you requested /resource');
53+
});
54+
});
55+
56+
it('should evaluate parallel execution', function() {
57+
var script = {
58+
a: {
59+
$exec: 'router',
60+
$args: { path: '/resource' }
61+
},
62+
b: {
63+
$exec: 'router',
64+
$method: 'post',
65+
$args: { path: '/resource', body: { test: 'test' } }
66+
}
67+
};
68+
69+
return js.evaluate(script).then(function (res) {
70+
assert.deepEqual(res, {
71+
a: 'you requested /resource',
72+
b: 'you posted {"test":"test"} to /resource'
73+
});
74+
75+
assert.deepEqual(callsResolutions, [
76+
{ call: 'get: /resource' },
77+
{ call: 'post: /resource' },
78+
{ res: 'you requested /resource' },
79+
{ res: 'you posted {"test":"test"} to /resource' }
80+
]);
81+
});
82+
});
83+
84+
it('should evaluate sequential execution', function() {
85+
var script = [
86+
{
87+
$exec: 'router',
88+
$args: { path: '/resource' }
89+
},
90+
{
91+
$exec: 'router',
92+
$method: 'post',
93+
$args: { path: '/resource', body: { test: 'test' } }
94+
}
95+
];
96+
97+
return js.evaluate(script).then(function (res) {
98+
assert.deepEqual(res, [
99+
'you requested /resource',
100+
'you posted {"test":"test"} to /resource'
101+
]);
102+
103+
assert.deepEqual(callsResolutions, [
104+
{ call: 'get: /resource' },
105+
{ res: 'you requested /resource' },
106+
{ call: 'post: /resource' },
107+
{ res: 'you posted {"test":"test"} to /resource' }
108+
]);
109+
});
110+
});
111+
});

spec/testutil.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
'use strict';
2+
3+
module.exports = {
4+
getPromise: getPromise
5+
};
6+
7+
8+
function getPromise(value, delay) {
9+
return new Promise(function (resolve, reject) {
10+
setTimeout(function(){
11+
if (value instanceof Error) {
12+
getPromise.callsResolutions.push({ err: value });
13+
reject(value);
14+
} else {
15+
getPromise.callsResolutions.push({ res: value });
16+
resolve(value);
17+
}
18+
}, delay);
19+
});
20+
}
21+
22+
23+
getPromise.callsResolutions = [];

spec/util.spec.js

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
var util = require('../lib/util');
44
var assert = require('assert');
5+
var getPromise = require('./testutil').getPromise;
56

67

78
describe('util', function() {
@@ -46,18 +47,9 @@ describe('util', function() {
4647
var callsResolutions;
4748

4849
beforeEach(function() {
49-
callsResolutions = [];
50+
callsResolutions = getPromise.callsResolutions = [];
5051
});
5152

52-
function getPromise(value, delay) {
53-
return new Promise(function (resolve, reject) {
54-
setTimeout(function(){
55-
callsResolutions.push({ res: value });
56-
resolve(value);
57-
}, delay);
58-
});
59-
}
60-
6153
describe('map function is synchronous', function() {
6254
function syncMapper(data) {
6355
callsResolutions.push({ call: data });

0 commit comments

Comments
 (0)