Peter Jaszkowiak 8 years ago
parent 6060b8e13b
commit 642306e69c

@ -46,7 +46,7 @@ module.exports = function (User) {
async.parallel({ async.parallel({
renamedUsername: function (next) { renamedUsername: function (next) {
renameUsername(userData, next); User.renameUsername(userData, next);
}, },
userData: function (next) { userData: function (next) {
plugins.fireHook('filter:user.create', { user: userData, data: data }, next); plugins.fireHook('filter:user.create', { user: userData, data: data }, next);
@ -200,28 +200,28 @@ module.exports = function (User) {
callback(); callback();
}; };
function renameUsername(userData, callback) { User.renameUsername = function (userData, callback) {
meta.userOrGroupExists(userData.userslug, function (err, exists) { meta.userOrGroupExists(userData.userslug, function (err, exists) {
if (err || !exists) { if (err || !exists) {
return callback(err); return callback(err);
} }
var newUsername = ''; var num = 0;
async.forever(function (next) {
newUsername = userData.username + (Math.floor(Math.random() * 255) + 1); function go() {
User.existsBySlug(newUsername, function (err, exists) { var username = userData.username + ' ' + num.toString(32);
if (err) { var userslug = utils.slugify(username);
return callback(err); meta.userOrGroupExists(userslug, function (err, exists) {
} if (err || !exists) {
if (!exists) { return callback(err, username);
next(newUsername);
} else {
next();
} }
num += 1;
go();
}); });
}, function (username) { }
callback(null, username);
}); go();
}); });
} };
}; };

@ -70,6 +70,38 @@ describe('User', function () {
}); });
}); });
describe('.renameUsername()', function () {
it('should deal with collisions', function (done) {
var users = [];
for (var i = 0; i < 10; i += 1) {
users.push({
username: 'Jane Doe',
password: 'abcdefghi',
email: 'jane.doe' + i + '@example.com',
});
}
async.series([
function (next) {
async.eachSeries(users, function (user, next) {
User.create(user, next);
}, next);
},
function (next) {
User.renameUsername({
username: 'Jane Doe',
userslug: 'jane-doe',
}, function (err, username) {
assert.ifError(err);
assert.strictEqual(username, 'Jane Doe 9');
done();
});
},
], done);
});
});
describe('.isModerator()', function () { describe('.isModerator()', function () {
it('should return false', function (done) { it('should return false', function (done) {
User.isModerator(testUid, testCid, function (err, isModerator) { User.isModerator(testUid, testCid, function (err, isModerator) {

Loading…
Cancel
Save