mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-05 23:30:36 +01:00
more user search tests
This commit is contained in:
@@ -68,16 +68,17 @@ module.exports = function (User) {
|
||||
var resultsPerPage = parseInt(meta.config.userSearchResultsPerPage, 10) || 20;
|
||||
var hardCap = resultsPerPage * 10;
|
||||
|
||||
db.getSortedSetRangeByLex(searchBy + ':sorted', min, max, 0, hardCap, function (err, data) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
var uids = data.map(function (data) {
|
||||
return data.split(':')[1];
|
||||
});
|
||||
callback(null, uids);
|
||||
});
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
db.getSortedSetRangeByLex(searchBy + ':sorted', min, max, 0, hardCap, next);
|
||||
},
|
||||
function (data, next) {
|
||||
var uids = data.map(function (data) {
|
||||
return data.split(':')[1];
|
||||
});
|
||||
next(null, uids);
|
||||
},
|
||||
], callback);
|
||||
}
|
||||
|
||||
function filterAndSortUids(uids, data, callback) {
|
||||
@@ -94,37 +95,38 @@ module.exports = function (User) {
|
||||
fields.push('flags');
|
||||
}
|
||||
|
||||
User.getUsersFields(uids, fields, function (err, userData) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
User.getUsersFields(uids, fields, next);
|
||||
},
|
||||
function (userData, next) {
|
||||
if (data.onlineOnly) {
|
||||
userData = userData.filter(function (user) {
|
||||
return user && user.status !== 'offline' && (Date.now() - parseInt(user.lastonline, 10) < 300000);
|
||||
});
|
||||
}
|
||||
|
||||
if (data.onlineOnly) {
|
||||
userData = userData.filter(function (user) {
|
||||
return user && user.status !== 'offline' && (Date.now() - parseInt(user.lastonline, 10) < 300000);
|
||||
if (data.bannedOnly) {
|
||||
userData = userData.filter(function (user) {
|
||||
return user && parseInt(user.banned, 10) === 1;
|
||||
});
|
||||
}
|
||||
|
||||
if (data.flaggedOnly) {
|
||||
userData = userData.filter(function (user) {
|
||||
return user && parseInt(user.flags, 10) > 0;
|
||||
});
|
||||
}
|
||||
|
||||
sortUsers(userData, sortBy);
|
||||
|
||||
uids = userData.map(function (user) {
|
||||
return user && user.uid;
|
||||
});
|
||||
}
|
||||
|
||||
if (data.bannedOnly) {
|
||||
userData = userData.filter(function (user) {
|
||||
return user && user.banned;
|
||||
});
|
||||
}
|
||||
|
||||
if (data.flaggedOnly) {
|
||||
userData = userData.filter(function (user) {
|
||||
return user && parseInt(user.flags, 10) > 0;
|
||||
});
|
||||
}
|
||||
|
||||
sortUsers(userData, sortBy);
|
||||
|
||||
uids = userData.map(function (user) {
|
||||
return user && user.uid;
|
||||
});
|
||||
|
||||
callback(null, uids);
|
||||
});
|
||||
next(null, uids);
|
||||
},
|
||||
], callback);
|
||||
}
|
||||
|
||||
function sortUsers(userData, sortBy) {
|
||||
|
||||
64
test/user.js
64
test/user.js
@@ -237,6 +237,70 @@ describe('User', function () {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should search users by ip', function (done) {
|
||||
User.create({ username: 'ipsearch' }, function (err, uid) {
|
||||
assert.ifError(err);
|
||||
db.sortedSetAdd('ip:1.1.1.1:uid', [1, 1], [testUid, uid], function (err) {
|
||||
assert.ifError(err);
|
||||
socketUser.search({ uid: testUid }, { query: '1.1.1.1', searchBy: 'ip' }, function (err, data) {
|
||||
assert.ifError(err);
|
||||
assert(Array.isArray(data.users));
|
||||
assert.equal(data.users.length, 2);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should return empty array if query is empty', function (done) {
|
||||
socketUser.search({ uid: testUid }, { query: '' }, function (err, data) {
|
||||
assert.ifError(err);
|
||||
assert.equal(data.users.length, 0);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should filter users', function (done) {
|
||||
User.create({ username: 'ipsearch_filter' }, function (err, uid) {
|
||||
assert.ifError(err);
|
||||
User.setUserFields(uid, { banned: 1, flags: 10 }, function (err) {
|
||||
assert.ifError(err);
|
||||
socketUser.search({ uid: testUid }, {
|
||||
query: 'ipsearch',
|
||||
onlineOnly: true,
|
||||
bannedOnly: true,
|
||||
flaggedOnly: true,
|
||||
}, function (err, data) {
|
||||
assert.ifError(err);
|
||||
assert.equal(data.users[0].username, 'ipsearch_filter');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should sort results by username', function (done) {
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
User.create({ username: 'brian' }, next);
|
||||
},
|
||||
function (uid, next) {
|
||||
User.create({ username: 'baris' }, next);
|
||||
},
|
||||
function (uid, next) {
|
||||
socketUser.search({ uid: testUid }, {
|
||||
query: 'b',
|
||||
sortBy: 'username',
|
||||
}, next);
|
||||
},
|
||||
], function (err, data) {
|
||||
assert.ifError(err);
|
||||
assert.equal(data.users[0].username, 'baris');
|
||||
assert.equal(data.users[1].username, 'brian');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('.delete()', function () {
|
||||
|
||||
Reference in New Issue
Block a user