Skip to content

Commit 8482656

Browse files
committed
Add JSGI stack tests, to test each part of the stack (for performance)
1 parent dc0eb61 commit 8482656

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

tests/stack.js

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
require("commonjs-utils/settings").admins = ["user"];// must do this first
2+
var MockRequest = require("jack/mock").MockRequest,
3+
mock = new MockRequest(require("pintura").app),
4+
assert = require("assert"),
5+
TestStore = require("perstore/stores").DefaultStore();
6+
var config = require("pintura").config;
7+
var parse = require("commonjs-utils/json-ext").parse;
8+
TestStore.setPath("TestStore");
9+
10+
11+
var emptyApp = function(){
12+
return {
13+
headers:{},
14+
status:200,
15+
body:[]
16+
}
17+
};
18+
var lowerAppMock = new MockRequest(require("jsgi/context").SetContext({},
19+
// We detect if the request could have been forged from another site
20+
require("jsgi/csrf").CSRFDetect(emptyApp)));
21+
// Support handling various cross-site request mechanisms like JSONP, window.name, CS-XHR
22+
var lowerApp2Mock = new MockRequest(require("jsgi/xsite").CrossSite(
23+
// Handle header emulation through query parameters (useful for cross-site and links)
24+
require("jsgi/http-params").HttpParams(emptyApp)));
25+
// Handle HEAD requests
26+
var lowerApp3Mock = new MockRequest(require("jsgi/head").Head(
27+
// Add some useful headers
28+
require("jsgi/pintura-headers").PinturaHeaders(config.serverName,
29+
// Handle conditional requests
30+
require("jsgi/conditional").Conditional(true,emptyApp
31+
))));
32+
var middleAppMock = new MockRequest(require("jsgi/media").Serialize(config.mediaSelector,
33+
// Handle errors that are thrown, converting to appropriate status codes
34+
require("jsgi/error").ErrorHandler(
35+
// Handle transactions
36+
require("perstore/jsgi/transactional").Transactional(
37+
// Handle sessions
38+
require("jsgi/session").Session({},
39+
// Do authentication
40+
require("jsgi/auth").Authentication(config.security, emptyApp))))));
41+
var upperAppMock = new MockRequest(require("jsgi/media").Deserialize(config.mediaSelector,
42+
// Non-REST custom handlers
43+
require('jsgi/routes').Routes(config.customRoutes,
44+
// Add and retrieve metadata from objects
45+
exports.directApp = require("jsgi/metadata").Metadata(
46+
// Final REST handler
47+
require("jsgi/rest-store").RestStore(config)))));
48+
var emptyMock = new MockRequest(emptyApp);
49+
config.getDataModel = function(){
50+
return {
51+
TestStore: TestStore
52+
};
53+
};
54+
exports.testUpperApp = function(){
55+
var body = upperAppMock.GET("/TestStore/", {
56+
}).body;
57+
assert.equal(body.length, 45);
58+
};
59+
exports.testMiddleAppWithAuth = function(){
60+
var body = middleAppMock.GET("/TestStore/", {
61+
headers:{
62+
authorization: "user:pass"
63+
}
64+
}).body;
65+
assert.equal(body.length, 2);
66+
};
67+
exports.testMiddleApp = function(){
68+
var body = middleAppMock.GET("/TestStore/", {
69+
}).body;
70+
assert.equal(body.length, 2);
71+
};
72+
exports.testLowerApp = function(){
73+
var body = lowerAppMock.GET("/TestStore/", {
74+
}).body;
75+
assert.equal(body.length, 0);
76+
};
77+
exports.testLowerApp2 = function(){
78+
var body = lowerApp2Mock.GET("/TestStore/", {
79+
}).body;
80+
assert.equal(body.length, 0);
81+
};
82+
exports.testLowerApp3 = function(){
83+
var body = lowerApp3Mock.GET("/TestStore/", {
84+
}).body;
85+
assert.equal(body.length, 0);
86+
};
87+
exports.testEmpty = function(){
88+
var body = emptyMock.GET("/TestStore/", {
89+
headers:{
90+
authorization: "user:pass"
91+
}
92+
}).body;
93+
assert.equal(body.length, 0);
94+
};
95+
96+
if (require.main === module)
97+
require("patr/runner").run(exports);
98+

0 commit comments

Comments
 (0)