|
|
|
/**
|
|
|
|
* Database Mock - wrapper for database.js, makes system use separate test db, instead of production
|
|
|
|
* ATTENTION: testing db is flushed before every use!
|
|
|
|
*/
|
|
|
|
|
|
|
|
(function (module) {
|
|
|
|
'use strict';
|
|
|
|
/*global require, before, __dirname*/
|
|
|
|
|
|
|
|
var async = require('async');
|
|
|
|
var winston = require('winston');
|
|
|
|
var path = require('path');
|
|
|
|
var nconf = require('nconf');
|
|
|
|
var url = require('url');
|
|
|
|
var errorText;
|
|
|
|
|
|
|
|
|
|
|
|
nconf.file({ file: path.join(__dirname, '../../config.json') });
|
|
|
|
nconf.defaults({
|
|
|
|
base_dir: path.join(__dirname,'../..'),
|
|
|
|
themes_path: path.join(__dirname, '../../node_modules'),
|
|
|
|
upload_url: path.join(path.sep, '../../uploads', path.sep),
|
|
|
|
views_dir: path.join(__dirname, '../../public/templates'),
|
|
|
|
relative_path: ''
|
|
|
|
});
|
|
|
|
|
|
|
|
if (!nconf.get('isCluster')) {
|
|
|
|
nconf.set('isPrimary', 'true');
|
|
|
|
nconf.set('isCluster', 'false');
|
|
|
|
}
|
|
|
|
|
|
|
|
var dbType = nconf.get('database');
|
|
|
|
var testDbConfig = nconf.get('test_database');
|
|
|
|
var productionDbConfig = nconf.get(dbType);
|
|
|
|
|
|
|
|
if (!testDbConfig){
|
|
|
|
errorText = 'test_database is not defined';
|
|
|
|
winston.info(
|
|
|
|
'\n===========================================================\n' +
|
|
|
|
'Please, add parameters for test database in config.json\n' +
|
|
|
|
'For example (redis):\n' +
|
|
|
|
'"test_database": {' + '\n' +
|
|
|
|
' "host": "127.0.0.1",' + '\n' +
|
|
|
|
' "port": "6379",' + '\n' +
|
|
|
|
' "password": "",' + '\n' +
|
|
|
|
' "database": "1"' + '\n' +
|
|
|
|
'}\n' +
|
|
|
|
' or (mongo):\n' +
|
|
|
|
'"test_database": {' + '\n' +
|
|
|
|
' "host": "127.0.0.1",' + '\n' +
|
|
|
|
' "port": "27017",' + '\n' +
|
|
|
|
' "password": "",' + '\n' +
|
|
|
|
' "database": "1"' + '\n' +
|
|
|
|
'}\n' +
|
|
|
|
' or (mongo) in a replicaset' + '\n' +
|
|
|
|
'"test_database": {' + '\n' +
|
|
|
|
' "host": "127.0.0.1,127.0.0.1,127.0.0.1",' + '\n' +
|
|
|
|
' "port": "27017,27018,27019",' + '\n' +
|
|
|
|
' "username": "",' + '\n' +
|
|
|
|
' "password": "",' + '\n' +
|
|
|
|
' "database": "nodebb_test"' + '\n' +
|
|
|
|
'}\n' +
|
|
|
|
'==========================================================='
|
|
|
|
);
|
|
|
|
winston.error(errorText);
|
|
|
|
throw new Error(errorText);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (testDbConfig.database === productionDbConfig.database &&
|
|
|
|
testDbConfig.host === productionDbConfig.host &&
|
|
|
|
testDbConfig.port === productionDbConfig.port) {
|
|
|
|
errorText = 'test_database has the same config as production db';
|
|
|
|
winston.error(errorText);
|
|
|
|
throw new Error(errorText);
|
|
|
|
}
|
|
|
|
|
|
|
|
nconf.set(dbType, testDbConfig);
|
|
|
|
|
|
|
|
winston.info('database config');
|
|
|
|
winston.info(dbType);
|
|
|
|
winston.info(testDbConfig);
|
|
|
|
|
|
|
|
var db = require('../../src/database');
|
|
|
|
|
|
|
|
before(function (done) {
|
|
|
|
this.timeout(30000);
|
|
|
|
var meta;
|
|
|
|
async.waterfall([
|
|
|
|
function (next) {
|
|
|
|
db.init(next);
|
|
|
|
},
|
|
|
|
function (next) {
|
|
|
|
db.emptydb(next);
|
|
|
|
},
|
|
|
|
function (next) {
|
|
|
|
winston.info('test_database flushed');
|
|
|
|
meta = require('../../src/meta');
|
|
|
|
setupDefaultConfigs(meta, next);
|
|
|
|
},
|
|
|
|
function (next) {
|
|
|
|
meta.configs.init(next);
|
|
|
|
},
|
|
|
|
function (next) {
|
|
|
|
meta.config.postDelay = 0;
|
|
|
|
meta.config.initialPostDelay = 0;
|
|
|
|
meta.config.newbiePostDelay = 0;
|
|
|
|
|
|
|
|
enableDefaultPlugins(next);
|
|
|
|
},
|
|
|
|
function (next) {
|
|
|
|
// nconf defaults, if not set in config
|
|
|
|
if (!nconf.get('upload_path')) {
|
|
|
|
nconf.set('upload_path', '/public/uploads');
|
|
|
|
}
|
|
|
|
if (!nconf.get('sessionKey')) {
|
|
|
|
nconf.set('sessionKey', 'express.sid');
|
|
|
|
}
|
|
|
|
// Parse out the relative_url and other goodies from the configured URL
|
|
|
|
var urlObject = url.parse(nconf.get('url'));
|
|
|
|
var relativePath = urlObject.pathname !== '/' ? urlObject.pathname : '';
|
|
|
|
nconf.set('base_url', urlObject.protocol + '//' + urlObject.host);
|
|
|
|
nconf.set('secure', urlObject.protocol === 'https:');
|
|
|
|
nconf.set('use_port', !!urlObject.port);
|
|
|
|
nconf.set('relative_path', relativePath);
|
|
|
|
nconf.set('port', urlObject.port || nconf.get('port') || nconf.get('PORT') || (nconf.get('PORT_ENV_VAR') ? nconf.get(nconf.get('PORT_ENV_VAR')) : false) || 4567);
|
|
|
|
nconf.set('upload_url', nconf.get('upload_path').replace(/^\/public/, ''));
|
|
|
|
|
|
|
|
nconf.set('core_templates_path', path.join(__dirname, '../../src/views'));
|
|
|
|
nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-vanilla/templates'));
|
|
|
|
nconf.set('theme_templates_path', meta.config['theme:templates'] ? path.join(nconf.get('themes_path'), meta.config['theme:id'], meta.config['theme:templates']) : nconf.get('base_templates_path'));
|
|
|
|
|
|
|
|
var webserver = require('../../src/webserver');
|
|
|
|
var sockets = require('../../src/socket.io');
|
|
|
|
sockets.init(webserver.server);
|
|
|
|
|
|
|
|
require('../../src/notifications').init();
|
|
|
|
require('../../src/user').startJobs();
|
|
|
|
|
|
|
|
webserver.listen(next);
|
|
|
|
}
|
|
|
|
], done);
|
|
|
|
});
|
|
|
|
|
|
|
|
function setupDefaultConfigs(meta, next) {
|
|
|
|
winston.info('Populating database with default configs, if not already set...\n');
|
|
|
|
|
|
|
|
var defaults = require(path.join(nconf.get('base_dir'), 'install/data/defaults.json'));
|
|
|
|
|
|
|
|
meta.configs.setOnEmpty(defaults, next);
|
|
|
|
}
|
|
|
|
|
|
|
|
function enableDefaultPlugins(callback) {
|
|
|
|
winston.info('Enabling default plugins\n');
|
|
|
|
|
|
|
|
var defaultEnabled = [
|
|
|
|
'nodebb-plugin-dbsearch'
|
|
|
|
];
|
|
|
|
|
|
|
|
winston.info('[install/enableDefaultPlugins] activating default plugins', defaultEnabled);
|
|
|
|
|
|
|
|
db.sortedSetAdd('plugins:active', [0], defaultEnabled, callback);
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = db;
|
|
|
|
|
|
|
|
}(module));
|