| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Database Mock - wrapper for database.js, makes system use separate test db, instead of production | 
					
						
							|  |  |  |  * ATTENTION: testing db is flushed before every use! | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | (function (module) { | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 	'use strict'; | 
					
						
							| 
									
										
										
										
											2016-10-16 06:03:02 +03:00
										 |  |  | 	/*global require, before, __dirname*/ | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-16 06:03:02 +03:00
										 |  |  | 	var async = require('async'); | 
					
						
							|  |  |  | 	var path  = require('path'); | 
					
						
							|  |  |  | 	var nconf = require('nconf'); | 
					
						
							|  |  |  | 	var winston = require('winston'); | 
					
						
							|  |  |  | 	var errorText; | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-24 13:53:11 -04:00
										 |  |  | 	nconf.file({ file: path.join(__dirname, '../../config.json') }); | 
					
						
							| 
									
										
										
										
											2014-04-08 16:52:50 -04:00
										 |  |  | 	nconf.defaults({ | 
					
						
							| 
									
										
										
										
											2014-09-24 13:53:11 -04:00
										 |  |  | 		base_dir: path.join(__dirname,'../..'), | 
					
						
							|  |  |  | 		themes_path: path.join(__dirname, '../../node_modules'), | 
					
						
							|  |  |  | 		upload_url: path.join(path.sep, '../../uploads', path.sep), | 
					
						
							| 
									
										
										
										
											2014-11-30 17:05:00 -05:00
										 |  |  | 		views_dir: path.join(__dirname, '../../public/templates'), | 
					
						
							|  |  |  | 		relative_path: '' | 
					
						
							| 
									
										
										
										
											2014-04-08 16:52:50 -04:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-16 06:03:02 +03:00
										 |  |  | 	var dbType = nconf.get('database'); | 
					
						
							|  |  |  | 	var testDbConfig = nconf.get('test_database'); | 
					
						
							|  |  |  | 	var productionDbConfig = nconf.get(dbType); | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-16 06:03:02 +03:00
										 |  |  | 	if (!testDbConfig){ | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 		errorText = 'test_database is not defined'; | 
					
						
							|  |  |  | 		winston.info( | 
					
						
							| 
									
										
										
										
											2016-10-13 11:42:29 +02:00
										 |  |  | 			'\n===========================================================\n' + | 
					
						
							|  |  |  | 			'Please, add parameters for test database in config.json\n' + | 
					
						
							|  |  |  | 			'For example (redis):\n' + | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 				'"test_database": {' + '\n' + | 
					
						
							| 
									
										
										
										
											2014-04-08 16:39:26 -04:00
										 |  |  | 				'    "host": "127.0.0.1",' + '\n' + | 
					
						
							|  |  |  | 				'    "port": "6379",' + '\n' + | 
					
						
							|  |  |  | 				'    "password": "",' + '\n' + | 
					
						
							|  |  |  | 				'    "database": "1"' + '\n' + | 
					
						
							| 
									
										
										
										
											2016-10-13 11:42:29 +02:00
										 |  |  | 			'}\n' + | 
					
						
							| 
									
										
										
										
											2015-01-03 20:10:08 -05:00
										 |  |  | 			' or (mongo):\n' + | 
					
						
							| 
									
										
										
										
											2014-04-11 12:45:22 -04:00
										 |  |  | 				'"test_database": {' + '\n' + | 
					
						
							| 
									
										
										
										
											2014-04-08 16:39:26 -04:00
										 |  |  | 				'    "host": "127.0.0.1",' + '\n' + | 
					
						
							|  |  |  | 				'    "port": "27017",' + '\n' + | 
					
						
							|  |  |  | 				'    "password": "",' + '\n' + | 
					
						
							|  |  |  | 				'    "database": "1"' + '\n' + | 
					
						
							| 
									
										
										
										
											2016-10-13 11:42:29 +02:00
										 |  |  | 			'}\n' + | 
					
						
							| 
									
										
										
										
											2015-04-25 08:05:33 -07:00
										 |  |  | 			' 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' + | 
					
						
							| 
									
										
										
										
											2016-10-13 11:42:29 +02:00
										 |  |  | 		    '}\n' + | 
					
						
							| 
									
										
										
										
											2015-01-03 20:10:08 -05:00
										 |  |  | 			'===========================================================' | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 		); | 
					
						
							|  |  |  | 		winston.error(errorText); | 
					
						
							|  |  |  | 		throw new Error(errorText); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-16 06:03:02 +03:00
										 |  |  | 	if (testDbConfig.database === productionDbConfig.database && | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 		testDbConfig.host === productionDbConfig.host && | 
					
						
							| 
									
										
										
										
											2016-10-16 06:03:02 +03:00
										 |  |  | 		testDbConfig.port === productionDbConfig.port) { | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 		errorText = 'test_database has the same config as production db'; | 
					
						
							|  |  |  | 		winston.error(errorText); | 
					
						
							|  |  |  | 		throw new Error(errorText); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	nconf.set(dbType, testDbConfig); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-16 06:03:02 +03:00
										 |  |  | 	var db = require('../../src/database'); | 
					
						
							|  |  |  | 	var meta = require('../../src/meta'); | 
					
						
							| 
									
										
										
										
											2014-03-06 15:11:29 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 	before(function (done) { | 
					
						
							| 
									
										
										
										
											2016-10-16 06:03:02 +03:00
										 |  |  | 		async.waterfall([ | 
					
						
							|  |  |  | 			function (next) { | 
					
						
							|  |  |  | 				db.init(next); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			function (next) { | 
					
						
							|  |  |  | 				db.flushdb(next); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			function (next) { | 
					
						
							| 
									
										
										
										
											2014-03-06 15:11:29 -05:00
										 |  |  | 				winston.info('test_database flushed'); | 
					
						
							| 
									
										
										
										
											2016-10-16 06:03:02 +03:00
										 |  |  | 				meta.configs.init(next); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			function (next) { | 
					
						
							|  |  |  | 				nconf.set('url', nconf.get('base_url') + (nconf.get('use_port') ? ':' + nconf.get('port') : '') + nconf.get('relative_path')); | 
					
						
							|  |  |  | 				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); | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	module.exports = db; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }(module)); |