Add feature to not allow duplicate role name

Signed-off-by: Supasate Choochaisri <supasate.c@gmail.com>
This commit is contained in:
Supasate Choochaisri 2016-04-29 15:50:11 +07:00
parent 04f5434894
commit d4a869bddf
2 changed files with 44 additions and 0 deletions

View File

@ -438,4 +438,6 @@ module.exports = function(Role) {
if (callback) callback(err, roles);
});
};
Role.validatesUniquenessOf('name', { message: 'already exists' });
};

View File

@ -87,6 +87,22 @@ describe('role model', function() {
});
});
it('should not allow duplicate role name', function(done) {
Role.create({ name: 'userRole' }, function(err, role) {
if (err) return done(err);
Role.create({ name: 'userRole' }, function(err, role) {
expect(err).to.exist;
expect(err).to.have.property('name', 'ValidationError');
expect(err).to.have.deep.property('details.codes.name');
expect(err.details.codes.name).to.contain('uniqueness');
expect(err).to.have.property('statusCode', 422);
done();
});
});
});
it('should automatically generate role id', function() {
User.create({ name: 'Raymond', email: 'x@y.com', password: 'foobar' }, function(err, user) {
// console.log('User: ', user.id);
@ -240,6 +256,7 @@ describe('role model', function() {
password: 'jpass',
}, function(err, u) {
if (err) return done(err);
user = u;
User.create({
username: 'mary',
@ -247,15 +264,18 @@ describe('role model', function() {
password: 'mpass',
}, function(err, u) {
if (err) return done(err);
Application.create({
name: 'demo',
}, function(err, a) {
if (err) return done(err);
app = a;
Role.create({
name: 'admin',
}, function(err, r) {
if (err) return done(err);
role = r;
var principals = [
{
@ -279,7 +299,9 @@ describe('role model', function() {
it('should resolve user by id', function(done) {
ACL.resolvePrincipal(ACL.USER, user.id, function(err, u) {
if (err) return done(err);
expect(u.id).to.eql(user.id);
done();
});
});
@ -287,7 +309,9 @@ describe('role model', function() {
it('should resolve user by username', function(done) {
ACL.resolvePrincipal(ACL.USER, user.username, function(err, u) {
if (err) return done(err);
expect(u.username).to.eql(user.username);
done();
});
});
@ -295,7 +319,9 @@ describe('role model', function() {
it('should resolve user by email', function(done) {
ACL.resolvePrincipal(ACL.USER, user.email, function(err, u) {
if (err) return done(err);
expect(u.email).to.eql(user.email);
done();
});
});
@ -303,7 +329,9 @@ describe('role model', function() {
it('should resolve app by id', function(done) {
ACL.resolvePrincipal(ACL.APP, app.id, function(err, a) {
if (err) return done(err);
expect(a.id).to.eql(app.id);
done();
});
});
@ -311,7 +339,9 @@ describe('role model', function() {
it('should resolve app by name', function(done) {
ACL.resolvePrincipal(ACL.APP, app.name, function(err, a) {
if (err) return done(err);
expect(a.name).to.eql(app.name);
done();
});
});
@ -319,7 +349,9 @@ describe('role model', function() {
it('should report isMappedToRole by user.username', function(done) {
ACL.isMappedToRole(ACL.USER, user.username, 'admin', function(err, flag) {
if (err) return done(err);
expect(flag).to.eql(true);
done();
});
});
@ -327,7 +359,9 @@ describe('role model', function() {
it('should report isMappedToRole by user.email', function(done) {
ACL.isMappedToRole(ACL.USER, user.email, 'admin', function(err, flag) {
if (err) return done(err);
expect(flag).to.eql(true);
done();
});
});
@ -336,7 +370,9 @@ describe('role model', function() {
function(done) {
ACL.isMappedToRole(ACL.USER, 'mary', 'admin', function(err, flag) {
if (err) return done(err);
expect(flag).to.eql(false);
done();
});
});
@ -344,7 +380,9 @@ describe('role model', function() {
it('should report isMappedToRole by app.name', function(done) {
ACL.isMappedToRole(ACL.APP, app.name, 'admin', function(err, flag) {
if (err) return done(err);
expect(flag).to.eql(true);
done();
});
});
@ -352,7 +390,9 @@ describe('role model', function() {
it('should report isMappedToRole by app.name', function(done) {
ACL.isMappedToRole(ACL.APP, app.name, 'admin', function(err, flag) {
if (err) return done(err);
expect(flag).to.eql(true);
done();
});
});
@ -390,6 +430,7 @@ describe('role model', function() {
role[pluralName](function(err, models) {
assert(!err);
assert.equal(models.length, 1);
if (++runs === mappings.length) {
done();
}
@ -412,6 +453,7 @@ describe('role model', function() {
assert.equal(users.length, 1);
assert.equal(users[0].id, user.id);
assert(User.find.calledWith(query));
done();
});
});