mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 02:55:58 +01:00 
			
		
		
		
	search tests
new method emptydb use emptydb instead of flushdb, flushdb removes indices for mongo which breaks search tests initialize meta.config properly in tests enable nodebb-plugin-dbsearch for tests
This commit is contained in:
		| @@ -53,7 +53,7 @@ | ||||
|     "mousetrap": "^1.5.3", | ||||
|     "nconf": "~0.8.2", | ||||
|     "nodebb-plugin-composer-default": "4.2.9", | ||||
|     "nodebb-plugin-dbsearch": "1.0.2", | ||||
|     "nodebb-plugin-dbsearch": "1.0.3", | ||||
|     "nodebb-plugin-emoji-extended": "1.1.1", | ||||
|     "nodebb-plugin-emoji-one": "1.1.5", | ||||
|     "nodebb-plugin-markdown": "6.0.2", | ||||
|   | ||||
| @@ -12,6 +12,13 @@ module.exports = function (db, module) { | ||||
| 		}); | ||||
| 	}; | ||||
|  | ||||
| 	module.emptydb = function (callback) { | ||||
| 		callback = callback || helpers.noop; | ||||
| 		db.collection('objects').remove({}, function (err) { | ||||
| 			callback(err); | ||||
| 		}); | ||||
| 	}; | ||||
|  | ||||
| 	module.exists = function (key, callback) { | ||||
| 		if (!key) { | ||||
| 			return callback(); | ||||
|   | ||||
| @@ -10,6 +10,10 @@ module.exports = function (redisClient, module) { | ||||
| 		}); | ||||
| 	}; | ||||
|  | ||||
| 	module.emptydb = function (callback) { | ||||
| 		module.flushdb(callback); | ||||
| 	}; | ||||
|  | ||||
| 	module.exists = function (key, callback) { | ||||
| 		redisClient.exists(key, function (err, exists) { | ||||
| 			callback(err, exists === 1); | ||||
|   | ||||
| @@ -127,7 +127,7 @@ describe('authentication', function () { | ||||
|  | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.flushdb(done); | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
|  | ||||
| }); | ||||
|   | ||||
| @@ -174,6 +174,6 @@ describe('Categories', function () { | ||||
| 	}); | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.flushdb(done); | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
| }); | ||||
|   | ||||
| @@ -375,6 +375,6 @@ describe('Hash methods', function () { | ||||
|  | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.flushdb(done); | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
| }); | ||||
|   | ||||
| @@ -143,6 +143,6 @@ describe('Key methods', function () { | ||||
|  | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.flushdb(done); | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
| }); | ||||
|   | ||||
| @@ -161,6 +161,6 @@ describe('List methods', function () { | ||||
|  | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.flushdb(done); | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
| }); | ||||
|   | ||||
| @@ -230,6 +230,6 @@ describe('Set methods', function () { | ||||
|  | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.flushdb(done); | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
| }); | ||||
|   | ||||
| @@ -696,6 +696,6 @@ describe('Sorted Set methods', function () { | ||||
|  | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.flushdb(done); | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
| }); | ||||
|   | ||||
| @@ -345,6 +345,6 @@ describe('Groups', function () { | ||||
| 	}); | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.flushdb(done); | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
| }); | ||||
|   | ||||
| @@ -13,9 +13,9 @@ describe('Messaging Library', function () { | ||||
| 	before(function (done) { | ||||
| 		// Create 3 users: 1 admin, 2 regular | ||||
| 		async.parallel([ | ||||
| 			async.apply(User.create, { username: 'foo', password: 'bar' }),	// admin | ||||
| 			async.apply(User.create, { username: 'baz', password: 'quux' }),	// restricted user | ||||
| 			async.apply(User.create, { username: 'herp', password: 'derp' })	// regular user | ||||
| 			async.apply(User.create, { username: 'foo', password: 'barbar' }),	// admin | ||||
| 			async.apply(User.create, { username: 'baz', password: 'quuxquux' }),	// restricted user | ||||
| 			async.apply(User.create, { username: 'herp', password: 'derpderp' })	// regular user | ||||
| 		], function (err, uids) { | ||||
| 			if (err) { | ||||
| 				return done(err); | ||||
| @@ -71,6 +71,6 @@ describe('Messaging Library', function () { | ||||
| 	}); | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.flushdb(done); | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
| }); | ||||
|   | ||||
| @@ -90,13 +90,23 @@ | ||||
| 				db.init(next); | ||||
| 			}, | ||||
| 			function (next) { | ||||
| 				db.flushdb(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')) { | ||||
| @@ -131,6 +141,26 @@ | ||||
| 		], 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)); | ||||
|   | ||||
| @@ -97,6 +97,6 @@ describe('Notifications', function () { | ||||
| 	}); | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.flushdb(done); | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
| }); | ||||
|   | ||||
| @@ -18,7 +18,7 @@ describe('Post\'s', function () { | ||||
| 	var cid; | ||||
|  | ||||
| 	before(function (done) { | ||||
| 		async.parallel({ | ||||
| 		async.series({ | ||||
| 			voterUid: function (next) { | ||||
| 				user.create({username: 'upvoter'}, next); | ||||
| 			}, | ||||
| @@ -206,6 +206,6 @@ describe('Post\'s', function () { | ||||
| 	}); | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.flushdb(done); | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
| }); | ||||
|   | ||||
							
								
								
									
										160
									
								
								test/search.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								test/search.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,160 @@ | ||||
| 'use strict'; | ||||
| /*global require, before, after*/ | ||||
|  | ||||
| var	assert = require('assert'); | ||||
| var async = require('async'); | ||||
| var request = require('request'); | ||||
| var nconf = require('nconf'); | ||||
|  | ||||
| var db = require('./mocks/databasemock'); | ||||
| var topics = require('../src/topics'); | ||||
| var categories = require('../src/categories'); | ||||
| var user = require('../src/user'); | ||||
| var search = require('../src/search'); | ||||
|  | ||||
| describe('Search', function () { | ||||
| 	var phoebeUid; | ||||
| 	var gingerUid; | ||||
|  | ||||
| 	var topic1Data; | ||||
| 	var topic2Data; | ||||
| 	var post1Data; | ||||
| 	var post2Data; | ||||
| 	var post3Data; | ||||
| 	var cid1; | ||||
| 	var cid2; | ||||
|  | ||||
| 	before(function (done) { | ||||
| 		async.waterfall([ | ||||
| 			function (next) { | ||||
| 				async.series({ | ||||
| 					phoebe: function (next) { | ||||
| 						user.create({username: 'phoebe'}, next); | ||||
| 					}, | ||||
| 					ginger: function (next) { | ||||
| 						user.create({username: 'ginger'}, next); | ||||
| 					}, | ||||
| 					category1: function (next) { | ||||
| 						categories.create({ | ||||
| 							name: 'Test Category', | ||||
| 							description: 'Test category created by testing script' | ||||
| 						}, next); | ||||
| 					}, | ||||
| 					category2: function (next) { | ||||
| 						categories.create({ | ||||
| 							name: 'Test Category', | ||||
| 							description: 'Test category created by testing script' | ||||
| 						}, next); | ||||
| 					} | ||||
| 				}, next); | ||||
| 			}, | ||||
| 			function (results, next) { | ||||
| 				phoebeUid = results.phoebe; | ||||
| 				gingerUid = results.ginger; | ||||
| 				cid1 = results.category1.cid; | ||||
| 				cid2 = results.category2.cid; | ||||
|  | ||||
| 				async.waterfall([ | ||||
| 					function (next) { | ||||
| 						topics.post({ | ||||
| 							uid: phoebeUid, | ||||
| 							cid: cid1, | ||||
| 							title: 'nodebb mongodb bugs', | ||||
| 							content: 'avocado cucumber apple orange fox', | ||||
| 							tags: ['nodebb', 'bug', 'plugin', 'nodebb-plugin'] | ||||
| 						}, next); | ||||
| 					}, | ||||
| 					function (results, next) { | ||||
| 						topic1Data = results.topicData; | ||||
| 						post1Data = results.postData; | ||||
|  | ||||
| 						topics.post({ | ||||
| 							uid: gingerUid, | ||||
| 							cid: cid2, | ||||
| 							title: 'java mongodb redis', | ||||
| 							content: 'avocado cucumber carrot armadillo', | ||||
| 							tags: ['nodebb', 'bug', 'plugin', 'nodebb-plugin'] | ||||
| 						}, next); | ||||
| 					}, | ||||
| 					function (results, next) { | ||||
| 						topic2Data = results.topicData; | ||||
| 						post2Data = results.postData; | ||||
| 						topics.reply({ | ||||
| 							uid: phoebeUid, | ||||
| 							content: 'reply post apple', | ||||
| 							tid: topic2Data.tid | ||||
| 						}, next); | ||||
| 					}, | ||||
| 					function (_post3Data, next) { | ||||
| 						post3Data = _post3Data; | ||||
| 						setTimeout(next, 500); | ||||
| 					} | ||||
| 				], next); | ||||
| 			} | ||||
| 		], done); | ||||
| 	}); | ||||
|  | ||||
| 	it('should search term in titles and posts', function (done) { | ||||
|  | ||||
| 		var meta = require('../src/meta'); | ||||
| 		meta.config.allowGuestSearching = 1; | ||||
|  | ||||
| 		request({ | ||||
| 			url: nconf.get('url') + '/api/search?term=cucumber&in=titlesposts&by=phoebe&replies=1&repliesFilter=atleast&sortBy=timestamp&sortDirection=desc&showAs=posts', | ||||
| 			json: true | ||||
| 		}, function (err, response, body) { | ||||
| 			assert.ifError(err); | ||||
| 			assert(body); | ||||
| 			assert.equal(body.matchCount, 1); | ||||
| 			assert.equal(body.posts.length, 1); | ||||
| 			assert.equal(body.posts[0].pid, post1Data.pid); | ||||
| 			assert.equal(body.posts[0].uid, phoebeUid); | ||||
|  | ||||
| 			done(); | ||||
| 		}); | ||||
| 	}); | ||||
|  | ||||
| 	it('should search for a user', function (done) { | ||||
| 		search.search({ | ||||
| 			query: 'gin', | ||||
| 			searchIn: 'users' | ||||
| 		}, function (err, data) { | ||||
| 			assert.ifError(err); | ||||
| 			assert(data); | ||||
| 			assert.equal(data.matchCount, 1); | ||||
| 			assert.equal(data.users.length, 1); | ||||
| 			assert.equal(data.users[0].uid, gingerUid); | ||||
| 			assert.equal(data.users[0].username, 'ginger'); | ||||
| 			done(); | ||||
| 		}); | ||||
| 	}); | ||||
|  | ||||
| 	it('should search for a tag', function (done) { | ||||
| 		search.search({ | ||||
| 			query: 'plug', | ||||
| 			searchIn: 'tags' | ||||
| 		}, function (err, data) { | ||||
| 			assert.ifError(err); | ||||
| 			assert(data); | ||||
| 			assert.equal(data.matchCount, 1); | ||||
| 			assert.equal(data.tags.length, 1); | ||||
| 			assert.equal(data.tags[0].value, 'plugin'); | ||||
| 			assert.equal(data.tags[0].score, 2); | ||||
| 			done(); | ||||
| 		}); | ||||
| 	}); | ||||
|  | ||||
| 	it('should fail if searchIn is wrong', function (done) { | ||||
| 		search.search({ | ||||
| 			query: 'plug', | ||||
| 			searchIn: 'invalidfilter' | ||||
| 		}, function (err) { | ||||
| 			assert.equal(err.message, '[[error:unknown-search-filter]]'); | ||||
| 			done(); | ||||
| 		}); | ||||
| 	}); | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
| }); | ||||
| @@ -102,7 +102,7 @@ describe('socket.io', function () { | ||||
| 	}); | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		done(); | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
|  | ||||
| }); | ||||
|   | ||||
| @@ -475,6 +475,6 @@ describe('Topic\'s', function () { | ||||
| 	}); | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.flushdb(done); | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
| }); | ||||
|   | ||||
| @@ -327,6 +327,6 @@ describe('User', function () { | ||||
| 	}); | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.flushdb(done); | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
| }); | ||||
		Reference in New Issue
	
	Block a user