mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-01 19:46:01 +01:00
upgrade scripts
upgrade groups to sorted set(groups:createtime) upgrade upgrade groups:<name>:members to sorted set new database methods tests
This commit is contained in:
@@ -400,6 +400,50 @@ module.exports = function(db, module) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module.isMemberOfSortedSets = function(keys, value, callback) {
|
||||||
|
if (!Array.isArray(keys)) {
|
||||||
|
return callback();
|
||||||
|
}
|
||||||
|
value = helpers.valueToString(value);
|
||||||
|
db.collection('objects').find({_key: {$in: keys}, value: value}, {fields: {_id: 0, _key: 1, value: 1}}).toArray(function(err, results) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
results = results.map(function(item) {
|
||||||
|
return item._key;
|
||||||
|
});
|
||||||
|
|
||||||
|
results = keys.map(function(key) {
|
||||||
|
return results.indexOf(key) !== -1;
|
||||||
|
});
|
||||||
|
callback(null, results);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
module.getSortedSetsMembers = function(keys, callback) {
|
||||||
|
if (!Array.isArray(keys) || !keys.length) {
|
||||||
|
return callback(null, []);
|
||||||
|
}
|
||||||
|
db.collection('objects').find({_key: {$in: keys}}, {_id: 0, _key: 1, value: 1}).toArray(function(err, data) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
var sets = {};
|
||||||
|
data.forEach(function(set) {
|
||||||
|
sets[set._key] = sets[set._key] || [];
|
||||||
|
sets[set._key].push(set.value);
|
||||||
|
});
|
||||||
|
|
||||||
|
var returnData = new Array(keys.length);
|
||||||
|
for(var i=0; i<keys.length; ++i) {
|
||||||
|
returnData[i] = sets[keys[i]] || [];
|
||||||
|
}
|
||||||
|
callback(null, returnData);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
module.getSortedSetUnion = function(sets, start, stop, callback) {
|
module.getSortedSetUnion = function(sets, start, stop, callback) {
|
||||||
getSortedSetUnion(sets, 1, start, stop, callback);
|
getSortedSetUnion(sets, 1, start, stop, callback);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -214,6 +214,32 @@ module.exports = function(redisClient, module) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module.isMemberOfSortedSets = function(keys, value, callback) {
|
||||||
|
var multi = redisClient.multi();
|
||||||
|
for (var i=0; i<keys.length; ++i) {
|
||||||
|
multi.zscore(keys[i], value);
|
||||||
|
}
|
||||||
|
multi.exec(function(err, results) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
results = results.map(function(score) {
|
||||||
|
return !!score;
|
||||||
|
});
|
||||||
|
callback(null, results);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
module.getSortedSetsMembers = function(keys, callback) {
|
||||||
|
var multi = redisClient.multi();
|
||||||
|
for (var i=0; i<keys.length; ++i) {
|
||||||
|
multi.zrange(keys[i], 0, -1);
|
||||||
|
}
|
||||||
|
multi.exec(function(err, results) {
|
||||||
|
callback(err, results);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
function multi(command, keys, value, callback) {
|
function multi(command, keys, value, callback) {
|
||||||
var m = redisClient.multi();
|
var m = redisClient.multi();
|
||||||
|
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ var async = require('async'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
Groups.list = function(options, callback) {
|
Groups.list = function(options, callback) {
|
||||||
db.getSetMembers('groups', function (err, groupNames) {
|
db.getSortedSetRevRange('groups:createtime', 0, -1, function (err, groupNames) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
@@ -103,7 +103,7 @@ var async = require('async'),
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
users: function (next) {
|
users: function (next) {
|
||||||
db.getSetMembers('group:' + groupName + ':members', function (err, uids) {
|
db.getSortedSetRevRange('group:' + groupName + ':members', 0, -1, function (err, uids) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
@@ -208,6 +208,7 @@ var async = require('async'),
|
|||||||
results.base.name = validator.escape(results.base.name);
|
results.base.name = validator.escape(results.base.name);
|
||||||
results.base.description = validator.escape(results.base.description);
|
results.base.description = validator.escape(results.base.description);
|
||||||
results.base.userTitle = validator.escape(results.base.userTitle);
|
results.base.userTitle = validator.escape(results.base.userTitle);
|
||||||
|
results.base.createtime = utils.toISOString(results.base.createtime);
|
||||||
results.base.members = results.users.filter(Boolean);
|
results.base.members = results.users.filter(Boolean);
|
||||||
results.base.pending = results.pending.filter(Boolean);
|
results.base.pending = results.pending.filter(Boolean);
|
||||||
results.base.count = numUsers || results.base.members.length;
|
results.base.count = numUsers || results.base.members.length;
|
||||||
@@ -222,6 +223,7 @@ var async = require('async'),
|
|||||||
results.base.isPending = results.isPending;
|
results.base.isPending = results.isPending;
|
||||||
results.base.isOwner = results.isOwner;
|
results.base.isOwner = results.isOwner;
|
||||||
|
|
||||||
|
|
||||||
plugins.fireHook('filter:group.get', {group: results.base}, function(err, data) {
|
plugins.fireHook('filter:group.get', {group: results.base}, function(err, data) {
|
||||||
callback(err, data ? data.group : null);
|
callback(err, data ? data.group : null);
|
||||||
});
|
});
|
||||||
@@ -262,18 +264,18 @@ var async = require('async'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
Groups.getMembers = function(groupName, callback) {
|
Groups.getMembers = function(groupName, callback) {
|
||||||
db.getSetMembers('group:' + groupName + ':members', callback);
|
db.getSortedSetRevRange('group:' + groupName + ':members', 0, -1, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
Groups.isMember = function(uid, groupName, callback) {
|
Groups.isMember = function(uid, groupName, callback) {
|
||||||
if (!uid || parseInt(uid, 10) <= 0) {
|
if (!uid || parseInt(uid, 10) <= 0) {
|
||||||
return callback(null, false);
|
return callback(null, false);
|
||||||
}
|
}
|
||||||
db.isSetMember('group:' + groupName + ':members', uid, callback);
|
db.isSortedSetMember('group:' + groupName + ':members', uid, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
Groups.isMembers = function(uids, groupName, callback) {
|
Groups.isMembers = function(uids, groupName, callback) {
|
||||||
db.isSetMembers('group:' + groupName + ':members', uids, callback);
|
db.isSortedSetMembers('group:' + groupName + ':members', uids, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
Groups.isMemberOfGroups = function(uid, groups, callback) {
|
Groups.isMemberOfGroups = function(uid, groups, callback) {
|
||||||
@@ -283,15 +285,16 @@ var async = require('async'),
|
|||||||
groups = groups.map(function(groupName) {
|
groups = groups.map(function(groupName) {
|
||||||
return 'group:' + groupName + ':members';
|
return 'group:' + groupName + ':members';
|
||||||
});
|
});
|
||||||
db.isMemberOfSets(groups, uid, callback);
|
|
||||||
|
db.isMemberOfSortedSets(groups, uid, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
Groups.getMemberCount = function(groupName, callback) {
|
Groups.getMemberCount = function(groupName, callback) {
|
||||||
db.setCount('group:' + groupName + ':members', callback);
|
db.sortedSetCard('group:' + groupName + ':members', callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
Groups.isMemberOfGroupList = function(uid, groupListKey, callback) {
|
Groups.isMemberOfGroupList = function(uid, groupListKey, callback) {
|
||||||
db.getSetMembers('group:' + groupListKey + ':members', function(err, groupNames) {
|
db.getSortedSetRange('group:' + groupListKey + ':members', 0, -1, function(err, groupNames) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
@@ -315,7 +318,7 @@ var async = require('async'),
|
|||||||
return 'group:' + groupName + ':members';
|
return 'group:' + groupName + ':members';
|
||||||
});
|
});
|
||||||
|
|
||||||
db.getSetsMembers(sets, function(err, members) {
|
db.getSortedSetsMembers(sets, function(err, members) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
@@ -349,7 +352,7 @@ var async = require('async'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
Groups.isMembersOfGroupList = function(uids, groupListKey, callback) {
|
Groups.isMembersOfGroupList = function(uids, groupListKey, callback) {
|
||||||
db.getSetMembers('group:' + groupListKey + ':members', function(err, groupNames) {
|
db.getSortedSetRange('group:' + groupListKey + ':members', 0, -1, function(err, groupNames) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
@@ -389,7 +392,7 @@ var async = require('async'),
|
|||||||
});
|
});
|
||||||
async.parallel([
|
async.parallel([
|
||||||
async.apply(db.isObjectFields, 'groupslug:groupname', slugs),
|
async.apply(db.isObjectFields, 'groupslug:groupname', slugs),
|
||||||
async.apply(db.isSetMembers, 'groups', name)
|
async.apply(db.isSortedSetMember, 'groups:createtime', name)
|
||||||
], function(err, results) {
|
], function(err, results) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
@@ -403,7 +406,7 @@ var async = require('async'),
|
|||||||
var slug = utils.slugify(name);
|
var slug = utils.slugify(name);
|
||||||
async.parallel([
|
async.parallel([
|
||||||
async.apply(db.isObjectField, 'groupslug:groupname', slug),
|
async.apply(db.isObjectField, 'groupslug:groupname', slug),
|
||||||
async.apply(db.isSetMember, 'groups', name)
|
async.apply(db.isSortedSetMember, 'groups:createtime', name)
|
||||||
], function(err, results) {
|
], function(err, results) {
|
||||||
callback(err, !err ? (results[0] || results[1]) : null);
|
callback(err, !err ? (results[0] || results[1]) : null);
|
||||||
});
|
});
|
||||||
@@ -427,11 +430,13 @@ var async = require('async'),
|
|||||||
if (exists) {
|
if (exists) {
|
||||||
return callback(new Error('[[error:group-already-exists]]'));
|
return callback(new Error('[[error:group-already-exists]]'));
|
||||||
}
|
}
|
||||||
|
var now = Date.now();
|
||||||
|
|
||||||
var slug = utils.slugify(data.name),
|
var slug = utils.slugify(data.name),
|
||||||
groupData = {
|
groupData = {
|
||||||
name: data.name,
|
name: data.name,
|
||||||
slug: slug,
|
slug: slug,
|
||||||
|
createtime: now,
|
||||||
userTitle: data.name,
|
userTitle: data.name,
|
||||||
description: data.description || '',
|
description: data.description || '',
|
||||||
deleted: '0',
|
deleted: '0',
|
||||||
@@ -440,13 +445,13 @@ var async = require('async'),
|
|||||||
'private': data.private || '1'
|
'private': data.private || '1'
|
||||||
},
|
},
|
||||||
tasks = [
|
tasks = [
|
||||||
async.apply(db.setAdd, 'groups', data.name),
|
async.apply(db.sortedSetAdd, 'groups:createtime', now, data.name),
|
||||||
async.apply(db.setObject, 'group:' + data.name, groupData)
|
async.apply(db.setObject, 'group:' + data.name, groupData)
|
||||||
];
|
];
|
||||||
|
|
||||||
if (data.hasOwnProperty('ownerUid')) {
|
if (data.hasOwnProperty('ownerUid')) {
|
||||||
tasks.push(async.apply(db.setAdd, 'group:' + data.name + ':owners', data.ownerUid));
|
tasks.push(async.apply(db.setAdd, 'group:' + data.name + ':owners', data.ownerUid));
|
||||||
tasks.push(async.apply(db.setAdd, 'group:' + data.name + ':members', data.ownerUid));
|
tasks.push(async.apply(db.sortedSetAdd, 'group:' + data.name + ':members', now, data.ownerUid));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!data.hidden) {
|
if (!data.hidden) {
|
||||||
@@ -531,7 +536,7 @@ var async = require('async'),
|
|||||||
db.setObjectField('groupslug:groupname', utils.slugify(newName), newName, next);
|
db.setObjectField('groupslug:groupname', utils.slugify(newName), newName, next);
|
||||||
},
|
},
|
||||||
function(next) {
|
function(next) {
|
||||||
db.getSetMembers('groups', function(err, groups) {
|
db.getSortedSetRange('groups:createtime', 0, -1, function(err, groups) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
@@ -556,7 +561,7 @@ var async = require('async'),
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
function(next) {
|
function(next) {
|
||||||
renameGroupMember('groups', oldName, newName, next);
|
renameGroupMember('groups:createtime', oldName, newName, next);
|
||||||
},
|
},
|
||||||
function(next) {
|
function(next) {
|
||||||
plugins.fireHook('action:group.rename', {
|
plugins.fireHook('action:group.rename', {
|
||||||
@@ -572,16 +577,21 @@ var async = require('async'),
|
|||||||
}
|
}
|
||||||
|
|
||||||
function renameGroupMember(group, oldName, newName, callback) {
|
function renameGroupMember(group, oldName, newName, callback) {
|
||||||
db.isSetMember(group, oldName, function(err, isMember) {
|
db.isSortedSetMember(group, oldName, function(err, isMember) {
|
||||||
if (err || !isMember) {
|
if (err || !isMember) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
async.series([
|
var score;
|
||||||
|
async.waterfall([
|
||||||
function (next) {
|
function (next) {
|
||||||
db.setRemove(group, oldName, next);
|
db.sortedSetScore(group, oldName, next);
|
||||||
|
},
|
||||||
|
function (_score, next) {
|
||||||
|
score = _score;
|
||||||
|
db.sortedSetRemove(group, oldName, next);
|
||||||
},
|
},
|
||||||
function (next) {
|
function (next) {
|
||||||
db.setAdd(group, newName, next);
|
db.sortedSetAdd(group, score, newName, next);
|
||||||
}
|
}
|
||||||
], callback);
|
], callback);
|
||||||
});
|
});
|
||||||
@@ -593,18 +603,18 @@ var async = require('async'),
|
|||||||
|
|
||||||
async.parallel([
|
async.parallel([
|
||||||
async.apply(db.delete, 'group:' + groupName),
|
async.apply(db.delete, 'group:' + groupName),
|
||||||
async.apply(db.setRemove, 'groups', groupName),
|
async.apply(db.sortedSetRemove, 'groups:createtime', groupName),
|
||||||
async.apply(db.delete, 'group:' + groupName + ':members'),
|
async.apply(db.delete, 'group:' + groupName + ':members'),
|
||||||
async.apply(db.delete, 'group:' + groupName + ':pending'),
|
async.apply(db.delete, 'group:' + groupName + ':pending'),
|
||||||
async.apply(db.delete, 'group:' + groupName + ':owners'),
|
async.apply(db.delete, 'group:' + groupName + ':owners'),
|
||||||
async.apply(db.deleteObjectField, 'groupslug:groupname', utils.slugify(groupName)),
|
async.apply(db.deleteObjectField, 'groupslug:groupname', utils.slugify(groupName)),
|
||||||
function(next) {
|
function(next) {
|
||||||
db.getSetMembers('groups', function(err, groups) {
|
db.getSortedSetRange('groups:createtime', 0, -1, function(err, groups) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
async.each(groups, function(group, next) {
|
async.each(groups, function(group, next) {
|
||||||
db.setRemove('group:' + group + ':members', groupName, next);
|
db.sortedSetRemove('group:' + group + ':members', groupName, next);
|
||||||
}, next);
|
}, next);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -617,7 +627,7 @@ var async = require('async'),
|
|||||||
|
|
||||||
Groups.exists(groupName, function(err, exists) {
|
Groups.exists(groupName, function(err, exists) {
|
||||||
if (exists) {
|
if (exists) {
|
||||||
db.setAdd('group:' + groupName + ':members', uid, callback);
|
db.sortedSetAdd('group:' + groupName + ':members', Date.now(), uid, callback);
|
||||||
plugins.fireHook('action:group.join', {
|
plugins.fireHook('action:group.join', {
|
||||||
groupName: groupName,
|
groupName: groupName,
|
||||||
uid: uid
|
uid: uid
|
||||||
@@ -633,7 +643,7 @@ var async = require('async'),
|
|||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
db.setAdd('group:' + groupName + ':members', uid, callback);
|
db.sortedSetAdd('group:' + groupName + ':members', Date.now(), uid, callback);
|
||||||
plugins.fireHook('action:group.join', {
|
plugins.fireHook('action:group.join', {
|
||||||
groupName: groupName,
|
groupName: groupName,
|
||||||
uid: uid
|
uid: uid
|
||||||
@@ -680,7 +690,7 @@ var async = require('async'),
|
|||||||
Groups.leave = function(groupName, uid, callback) {
|
Groups.leave = function(groupName, uid, callback) {
|
||||||
callback = callback || function() {};
|
callback = callback || function() {};
|
||||||
|
|
||||||
db.setRemove('group:' + groupName + ':members', uid, function(err) {
|
db.sortedSetRemove('group:' + groupName + ':members', uid, function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
@@ -706,7 +716,10 @@ var async = require('async'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
Groups.leaveAllGroups = function(uid, callback) {
|
Groups.leaveAllGroups = function(uid, callback) {
|
||||||
db.getSetMembers('groups', function(err, groups) {
|
db.getSortedSetRange('groups:createtime', 0, -1, function(err, groups) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
async.each(groups, function(groupName, next) {
|
async.each(groups, function(groupName, next) {
|
||||||
Groups.isMember(uid, groupName, function(err, isMember) {
|
Groups.isMember(uid, groupName, function(err, isMember) {
|
||||||
if (!err && isMember) {
|
if (!err && isMember) {
|
||||||
@@ -743,7 +756,7 @@ var async = require('async'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
Groups.getUserGroups = function(uids, callback) {
|
Groups.getUserGroups = function(uids, callback) {
|
||||||
db.getSetMembers('groups', function(err, groupNames) {
|
db.getSortedSetRevRange('groups:createtime', 0, -1, function(err, groupNames) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
@@ -775,7 +788,7 @@ var async = require('async'),
|
|||||||
});
|
});
|
||||||
|
|
||||||
async.map(uids, function(uid, next) {
|
async.map(uids, function(uid, next) {
|
||||||
db.isMemberOfSets(groupSets, uid, function(err, isMembers) {
|
db.isMemberOfSortedSets(groupSets, uid, function(err, isMembers) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ var db = require('./database'),
|
|||||||
schemaDate, thisSchemaDate,
|
schemaDate, thisSchemaDate,
|
||||||
|
|
||||||
// IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema
|
// IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema
|
||||||
latestSchema = Date.UTC(2015, 0, 19);
|
latestSchema = Date.UTC(2015, 0, 21);
|
||||||
|
|
||||||
Upgrade.check = function(callback) {
|
Upgrade.check = function(callback) {
|
||||||
db.get('schemaDate', function(err, value) {
|
db.get('schemaDate', function(err, value) {
|
||||||
@@ -713,6 +713,55 @@ Upgrade.upgrade = function(callback) {
|
|||||||
winston.info('[2015/01/19] Generating group slugs skipped');
|
winston.info('[2015/01/19] Generating group slugs skipped');
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
function(next) {
|
||||||
|
thisSchemaDate = Date.UTC(2015, 0, 21);
|
||||||
|
if (schemaDate < thisSchemaDate) {
|
||||||
|
updatesMade = true;
|
||||||
|
winston.info('[2015/01/21] Upgrading groups to sorted set');
|
||||||
|
|
||||||
|
db.getSetMembers('groups', function(err, groupNames) {
|
||||||
|
if (err) {
|
||||||
|
return next(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
var now = Date.now();
|
||||||
|
async.each(groupNames, function(groupName, next) {
|
||||||
|
db.getSetMembers('group:' + groupName + ':members', function(err, members) {
|
||||||
|
if (err) {
|
||||||
|
return next(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
async.series([
|
||||||
|
function(next) {
|
||||||
|
if (members && members.length) {
|
||||||
|
db.delete('group:' + groupName + ':members', function(err) {
|
||||||
|
if (err) {
|
||||||
|
return next(err);
|
||||||
|
}
|
||||||
|
var scores = members.map(function() {
|
||||||
|
return now;
|
||||||
|
});
|
||||||
|
db.sortedSetAdd('group:' + groupName + ':members', scores, members, next);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async.apply(db.sortedSetAdd, 'groups:createtime', now, groupName),
|
||||||
|
async.apply(db.setObjectField, 'group:' + groupName, 'createtime', now)
|
||||||
|
], next);
|
||||||
|
});
|
||||||
|
|
||||||
|
}, function(err) {
|
||||||
|
winston.info('[2015/01/21] Upgrading groups to sorted set done');
|
||||||
|
Upgrade.update(thisSchemaDate, next);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
winston.info('[2015/01/21] Upgrading groups to sorted set skipped');
|
||||||
|
next();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add new schema updates here
|
// Add new schema updates here
|
||||||
|
|||||||
@@ -377,6 +377,32 @@ describe('Sorted Set methods', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('isMemberOfSortedSets', function() {
|
||||||
|
it('should return true for members false for non members', function(done) {
|
||||||
|
db.isMemberOfSortedSets(['doesnotexist', 'sortedSetTest1', 'sortedSetTest2'], 'value2', function(err, isMembers) {
|
||||||
|
assert.equal(err, null);
|
||||||
|
assert.equal(arguments.length, 2);
|
||||||
|
assert.deepEqual(isMembers, [false, true, false]);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getSortedSetsMembers', function() {
|
||||||
|
it('should return members of multiple sorted sets', function(done) {
|
||||||
|
db.getSortedSetMembers(['doesnotexist', 'sortedSetTest1'], function(err, sortedSets) {
|
||||||
|
assert.equal(err, null);
|
||||||
|
assert.equal(arguments.length, 2);
|
||||||
|
assert.deepEqual(sortedSets[0], []);
|
||||||
|
sortedSets[0].forEach(function(element) {
|
||||||
|
assert.notEqual(['value1', 'value2', 'value3'].indexOf(element), -1);
|
||||||
|
});
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('getSortedSetUnion()', function() {
|
describe('getSortedSetUnion()', function() {
|
||||||
it('should return an array of values from both sorted sets sorted by scores lowest to highest', function(done) {
|
it('should return an array of values from both sorted sets sorted by scores lowest to highest', function(done) {
|
||||||
db.getSortedSetUnion(['sortedSetTest2', 'sortedSetTest3'], 0, -1, function(err, values) {
|
db.getSortedSetUnion(['sortedSetTest2', 'sortedSetTest3'], 0, -1, function(err, values) {
|
||||||
|
|||||||
Reference in New Issue
Block a user