mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 19:15:58 +01:00 
			
		
		
		
	flag controller tests
This commit is contained in:
		| @@ -7,18 +7,21 @@ var categories = require('../categories'); | ||||
| var flags = require('../flags'); | ||||
| var analytics = require('../analytics'); | ||||
|  | ||||
| var modsController = { | ||||
| 	flags: {}, | ||||
| }; | ||||
| var modsController = module.exports; | ||||
| modsController.flags = {}; | ||||
|  | ||||
| modsController.flags.list = function (req, res, next) { | ||||
| 	var filters; | ||||
| 	var hasFilter; | ||||
| 	async.waterfall([ | ||||
| 		function (next) { | ||||
| 			async.parallel({ | ||||
| 				isAdminOrGlobalMod: async.apply(user.isAdminOrGlobalMod, req.uid), | ||||
| 				moderatedCids: async.apply(user.getModeratedCids, req.uid), | ||||
| 	}, function (err, results) { | ||||
| 		if (err) { | ||||
| 			return next(err); | ||||
| 		} else if (!(results.isAdminOrGlobalMod || !!results.moderatedCids.length)) { | ||||
| 			}, next); | ||||
| 		}, | ||||
| 		function (results, next) { | ||||
| 			if (!(results.isAdminOrGlobalMod || !!results.moderatedCids.length)) { | ||||
| 				return next(new Error('[[error:no-privileges]]')); | ||||
| 			} | ||||
|  | ||||
| @@ -27,9 +30,9 @@ modsController.flags.list = function (req, res, next) { | ||||
| 			} | ||||
|  | ||||
| 			// Parse query string params for filters | ||||
| 		var hasFilter = false; | ||||
| 			hasFilter = false; | ||||
| 			var valid = ['assignee', 'state', 'reporterId', 'type', 'targetUid', 'cid', 'quick']; | ||||
| 		var filters = valid.reduce(function (memo, cur) { | ||||
| 			filters = valid.reduce(function (memo, cur) { | ||||
| 				if (req.query.hasOwnProperty(cur)) { | ||||
| 					memo[cur] = req.query[cur]; | ||||
| 				} | ||||
| @@ -57,11 +60,9 @@ modsController.flags.list = function (req, res, next) { | ||||
| 				flags: async.apply(flags.list, filters, req.uid), | ||||
| 				analytics: async.apply(analytics.getDailyStatsForSet, 'analytics:flags', Date.now(), 30), | ||||
| 				categories: async.apply(categories.buildForSelect, req.uid), | ||||
| 		}, function (err, data) { | ||||
| 			if (err) { | ||||
| 				return next(err); | ||||
| 			} | ||||
|  | ||||
| 			}, next); | ||||
| 		}, | ||||
| 		function (data) { | ||||
| 			// If res.locals.cids is populated, then slim down the categories list | ||||
| 			if (res.locals.cids) { | ||||
| 				data.categories = data.categories.filter(function (category) { | ||||
| @@ -92,8 +93,8 @@ modsController.flags.list = function (req, res, next) { | ||||
| 				filters: filters, | ||||
| 				title: '[[pages:flags]]', | ||||
| 			}); | ||||
| 		}); | ||||
| 	}); | ||||
| 		}, | ||||
| 	], next); | ||||
| }; | ||||
|  | ||||
| modsController.flags.detail = function (req, res, next) { | ||||
| @@ -124,5 +125,3 @@ modsController.flags.detail = function (req, res, next) { | ||||
| 		})); | ||||
| 	}); | ||||
| }; | ||||
|  | ||||
| module.exports = modsController; | ||||
|   | ||||
| @@ -5,7 +5,7 @@ var async = require('async'); | ||||
| var user = require('../user'); | ||||
| var flags = require('../flags'); | ||||
|  | ||||
| var SocketFlags = {}; | ||||
| var SocketFlags = module.exports; | ||||
|  | ||||
| SocketFlags.create = function (socket, data, callback) { | ||||
| 	if (!socket.uid) { | ||||
| @@ -98,5 +98,3 @@ SocketFlags.appendNote = function (socket, data, callback) { | ||||
| 		}, | ||||
| 	], callback); | ||||
| }; | ||||
|  | ||||
| module.exports = SocketFlags; | ||||
|   | ||||
| @@ -18,6 +18,7 @@ describe('Admin Controllers', function () { | ||||
| 	var pid; | ||||
| 	var adminUid; | ||||
| 	var regularUid; | ||||
| 	var moderatorUid; | ||||
| 	var jar; | ||||
|  | ||||
| 	before(function (done) { | ||||
| @@ -35,12 +36,16 @@ describe('Admin Controllers', function () { | ||||
| 			regularUid: function (next) { | ||||
| 				user.create({ username: 'regular' }, next); | ||||
| 			}, | ||||
| 			moderatorUid: function (next) { | ||||
| 				user.create({ username: 'moderator', password: 'modmod' }, next); | ||||
| 			}, | ||||
| 		}, function (err, results) { | ||||
| 			if (err) { | ||||
| 				return done(err); | ||||
| 			} | ||||
| 			adminUid = results.adminUid; | ||||
| 			regularUid = results.regularUid; | ||||
| 			moderatorUid = results.moderatorUid; | ||||
| 			cid = results.category.cid; | ||||
|  | ||||
| 			topics.post({ uid: adminUid, title: 'test topic title', content: 'test topic content', cid: results.category.cid }, function (err, result) { | ||||
| @@ -128,7 +133,7 @@ describe('Admin Controllers', function () { | ||||
| 	}); | ||||
|  | ||||
| 	it('should 404 for edit/email page if user does not exist', function (done) { | ||||
| 		request(nconf.get('url') + '/api/user/doesnotexist/edit/email', { jar: jar, json: true }, function (err, res, body) { | ||||
| 		request(nconf.get('url') + '/api/user/doesnotexist/edit/email', { jar: jar, json: true }, function (err, res) { | ||||
| 			assert.ifError(err); | ||||
| 			assert.equal(res.statusCode, 404); | ||||
| 			done(); | ||||
| @@ -446,6 +451,74 @@ describe('Admin Controllers', function () { | ||||
| 		}); | ||||
| 	}); | ||||
|  | ||||
| 	describe('mods page', function () { | ||||
| 		var moderatorJar; | ||||
|  | ||||
| 		before(function (done) { | ||||
| 			helpers.loginUser('moderator', 'modmod', function (err, _jar) { | ||||
| 				assert.ifError(err); | ||||
| 				moderatorJar = _jar; | ||||
|  | ||||
| 				groups.join('cid:' + cid + ':privileges:mods', moderatorUid, done); | ||||
| 			}); | ||||
| 		}); | ||||
|  | ||||
| 		it('should error with no privileges', function (done) { | ||||
| 			request(nconf.get('url') + '/api/flags', { json: true }, function (err, res, body) { | ||||
| 				assert.ifError(err); | ||||
| 				assert.equal(body.error, '[[error:no-privileges]]'); | ||||
| 				done(); | ||||
| 			}); | ||||
| 		}); | ||||
|  | ||||
| 		it('should load flags page data', function (done) { | ||||
| 			request(nconf.get('url') + '/api/flags', { jar: moderatorJar, json: true }, function (err, res, body) { | ||||
| 				assert.ifError(err); | ||||
| 				assert(body); | ||||
| 				assert(body.flags); | ||||
| 				assert(body.categories); | ||||
| 				assert(body.filters); | ||||
| 				assert.equal(body.categories[cid], 'Test Category'); | ||||
| 				assert.equal(body.filters.cid.indexOf(cid), -1); | ||||
| 				done(); | ||||
| 			}); | ||||
| 		}); | ||||
|  | ||||
| 		it('should return invalid data if flag does not exist', function (done) { | ||||
| 			request(nconf.get('url') + '/api/flags/123123123', { jar: moderatorJar, json: true }, function (err, res, body) { | ||||
| 				assert.ifError(err); | ||||
| 				assert.equal(body.error, '[[error:invalid-data]]'); | ||||
| 				done(); | ||||
| 			}); | ||||
| 		}); | ||||
|  | ||||
| 		it('should error with not enough reputation to flag', function (done) { | ||||
| 			var socketFlags = require('../src/socket.io/flags'); | ||||
|  | ||||
| 			socketFlags.create({ uid: regularUid }, { id: pid, type: 'post', reason: 'spam' }, function (err) { | ||||
| 				assert.equal(err.message, '[[error:not-enough-reputation-to-flag]]'); | ||||
| 				done(); | ||||
| 			}); | ||||
| 		}); | ||||
|  | ||||
| 		it('should return flag details', function (done) { | ||||
| 			var meta = require('../src/meta'); | ||||
| 			var socketFlags = require('../src/socket.io/flags'); | ||||
| 			var oldValue = meta.config['privileges:flag']; | ||||
| 			meta.config['privileges:flag'] = 0; | ||||
| 			socketFlags.create({ uid: regularUid }, { id: pid, type: 'post', reason: 'spam' }, function (err, data) { | ||||
| 				meta.config['privileges:flag'] = oldValue; | ||||
| 				assert.ifError(err); | ||||
| 				request(nconf.get('url') + '/api/flags/' + data.flagId, { jar: moderatorJar, json: true }, function (err, res, body) { | ||||
| 					assert.ifError(err); | ||||
| 					assert(body); | ||||
| 					assert.equal(body.reporter.username, 'regular'); | ||||
| 					done(); | ||||
| 				}); | ||||
| 			}); | ||||
| 		}); | ||||
| 	}); | ||||
|  | ||||
| 	after(function (done) { | ||||
| 		db.emptydb(done); | ||||
| 	}); | ||||
|   | ||||
| @@ -16,6 +16,7 @@ var Meta = require('../src/meta'); | ||||
|  | ||||
| describe('Flags', function () { | ||||
| 	before(function (done) { | ||||
| 		Groups.resetCache(); | ||||
| 		// Create some stuff to flag | ||||
| 		async.waterfall([ | ||||
| 			async.apply(User.create, { username: 'testUser', password: 'abcdef', email: 'b@c.com' }), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user