Peter Jaszkowiak 8 years ago
parent 6060b8e13b
commit 642306e69c

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

Loading…
Cancel
Save