-
Notifications
You must be signed in to change notification settings - Fork 55
/
common.js
99 lines (86 loc) · 2.91 KB
/
common.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
'use strict';
require('nodestrum');
Error.stackTraceLimit = 100;
var Path = require('path');
global.MONGOOSE_DRIVER_PATH = Path.dirname(require.resolve('grist/driver'));
global.CONN_STR_PREFIX = 'grist://.tmp/formage-test-data---';
var _ = require('lodash-contrib');
var chai = require('chai');
var MPromise = require('mpromise');
var fs = require('fs');
global.framework = process.env.TEST_ON_OPINION ? require('opinion') : require('express');
process.env.FORMAGE_DISABLE_DOMAINS = true;
process.env.MONGOOSE_DISABLE_STABILITY_WARNING = true;
global.mock_req_proto = {
method: "get",
session: {},
params: {},
query: {},
headers: {},
connection: {},
on: _.noop,
admin_user: {hasPermissions: function () {return true;}}
};
function magic_throw() {
if (process.domain) process.domain.dispose();
var arg_str = JSON.stringify(arguments, null, 2);
process.nextTick(function () {
throw new Error(arg_str);
});
}
var mock_res_proto = {
setHeader: _.identity,
status: function (val) {
this.setHeader(val);
this._status = val;
},
locals: {},
output: {push: _.identity},
outputEncodings: {push: _.identity},
render: magic_throw,
redirect: magic_throw,
once: _.noop
};
global._ = _;
global.should = chai.should();
global.expect = chai.expect;
global.mock_res_proto = mock_res_proto;
global.makeRes = function makeRes(req, done) {
return _.defaults({
req: req,
send: function (status, err) {done(err);},
end: function (msg) { done(msg.replace(/(<br>)|(\\n)/g, '\n')); }
}, mock_res_proto);
};
global.test_post_body_multipart = fs.readFileSync('test/fixtures/test-post-body.mime', 'utf-8');
global.renderedEmbeded = fs.readFileSync('test/fixtures/rendered-embed-form.txt', 'utf-8');
global.mockFind = function mockFindFactory(arr) {
return function mockFind() {
return {
populate: function mockLimit() { return this; },
skip: function mockLimit() { return this; },
limit: function mockLimit() { return this; },
sort: function mockLimit() { return this; },
exec: function mockExec(cb) {
var p = new MPromise(cb);
p.fulfill(arr);
return p;
}
};
};
};
global.sanitizeRequireCache = function sanitizeRequireCache(name, done) {
_.each(require.cache, function (mod, modName) {
if (~modName.indexOf('formage') || ~modName.indexOf('mongoose') || ~modName.indexOf('jugglingdb') || ~modName.indexOf('grist'))
delete require.cache[modName];
});
if (name) {
var mongoose = require("mongoose");
var conn_str = global.CONN_STR_PREFIX + name.replace(/\s/g, '_');
mongoose.connect(conn_str, function (err) {
if (err) return done(err);
return mongoose.connection.db.dropDatabase(done);
});
return mongoose;
}
};