| 
									
										
										
										
											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! | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | (function(module) { | 
					
						
							|  |  |  | 	'use strict'; | 
					
						
							| 
									
										
										
										
											2015-01-03 20:10:08 -05:00
										 |  |  | 	/*global require, before*/ | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-03 20:10:08 -05:00
										 |  |  | 	var path  = require('path'), | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 		nconf = require('nconf'), | 
					
						
							|  |  |  | 		winston = require('winston'), | 
					
						
							|  |  |  | 		errorText; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							|  |  |  | 	var dbType = nconf.get('database'), | 
					
						
							|  |  |  | 		testDbConfig = nconf.get('test_database'), | 
					
						
							|  |  |  | 		productionDbConfig = nconf.get(dbType); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(!testDbConfig){ | 
					
						
							|  |  |  | 		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); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	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); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-24 13:53:11 -04:00
										 |  |  | 	var db = require('../../src/database'), | 
					
						
							|  |  |  | 		meta = require('../../src/meta'); | 
					
						
							| 
									
										
										
										
											2014-03-06 15:11:29 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 	before(function(done) { | 
					
						
							|  |  |  | 		db.init(function(err) { | 
					
						
							| 
									
										
										
										
											2016-08-16 19:46:59 +02:00
										 |  |  | 			if (err) { | 
					
						
							|  |  |  | 				return done(err); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 			//Clean up
 | 
					
						
							|  |  |  | 			db.flushdb(function(err) { | 
					
						
							| 
									
										
										
										
											2014-03-06 14:51:43 -05:00
										 |  |  | 				if(err) { | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 					winston.error(err); | 
					
						
							|  |  |  | 					throw new Error(err); | 
					
						
							| 
									
										
										
										
											2014-03-06 15:11:29 -05:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-06 15:11:29 -05:00
										 |  |  | 				winston.info('test_database flushed'); | 
					
						
							| 
									
										
										
										
											2014-04-16 15:22:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-06 15:11:29 -05:00
										 |  |  | 				meta.configs.init(function () { | 
					
						
							| 
									
										
										
										
											2014-04-08 16:52:50 -04:00
										 |  |  | 					nconf.set('url', nconf.get('base_url') + (nconf.get('use_port') ? ':' + nconf.get('port') : '') + nconf.get('relative_path')); | 
					
						
							| 
									
										
										
										
											2014-09-24 13:53:11 -04:00
										 |  |  | 					nconf.set('core_templates_path', path.join(__dirname, '../../src/views')); | 
					
						
							| 
									
										
										
										
											2014-04-08 16:52:50 -04:00
										 |  |  | 					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')); | 
					
						
							| 
									
										
										
										
											2014-03-06 14:51:43 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-24 13:53:11 -04:00
										 |  |  | 					var	webserver = require('../../src/webserver'), | 
					
						
							|  |  |  | 						sockets = require('../../src/socket.io'); | 
					
						
							| 
									
										
										
										
											2014-03-06 14:51:43 -05:00
										 |  |  | 						sockets.init(webserver.server); | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-06 15:11:29 -05:00
										 |  |  | 					done(); | 
					
						
							| 
									
										
										
										
											2014-04-16 15:22:39 -04:00
										 |  |  | 				}); | 
					
						
							| 
									
										
										
										
											2013-12-06 13:21:21 -05:00
										 |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	module.exports = db; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }(module)); |