Improves tests, ensure unicity of roleIds

This commit is contained in:
Florent Vilmart
2016-03-04 19:40:22 -05:00
parent c9f8453171
commit 17bc79b372
2 changed files with 20 additions and 18 deletions

View File

@@ -126,20 +126,23 @@ describe('Parse Role testing', () => {
it("Should properly resolve roles", (done) => { it("Should properly resolve roles", (done) => {
let admin = new Parse.Role("Admin", new Parse.ACL()); let admin = new Parse.Role("Admin", new Parse.ACL());
let moderator = new Parse.Role("Moderator", new Parse.ACL()); let moderator = new Parse.Role("Moderator", new Parse.ACL());
let contentCreator = new Parse.Role('ContentManager', new Parse.ACL()); let superModerator = new Parse.Role("SuperModerator", new Parse.ACL());
let contentManager = new Parse.Role('ContentManager', new Parse.ACL());
Parse.Object.saveAll([admin, moderator, contentCreator], {useMasterKey: true}).then(() => { let superContentManager = new Parse.Role('SuperContentManager', new Parse.ACL());
contentCreator.getRoles().add(moderator); Parse.Object.saveAll([admin, moderator, contentManager, superModerator, superContentManager], {useMasterKey: true}).then(() => {
moderator.getRoles().add(admin); contentManager.getRoles().add([moderator, superContentManager]);
return Parse.Object.saveAll([admin, moderator, contentCreator], {useMasterKey: true}); moderator.getRoles().add([admin, superModerator]);
superContentManager.getRoles().add(superModerator);
return Parse.Object.saveAll([admin, moderator, contentManager, superModerator, superContentManager], {useMasterKey: true});
}).then(() => { }).then(() => {
var auth = new Auth({ config: new Config("test"), isMaster: true }); var auth = new Auth({ config: new Config("test"), isMaster: true });
// For each role, fetch their sibling, what they inherit // For each role, fetch their sibling, what they inherit
// return with result and roleId for later comparison // return with result and roleId for later comparison
let promises = [admin, moderator, contentCreator].map((role) => { let promises = [admin, moderator, contentManager, superModerator].map((role) => {
return auth._getAllRoleNamesForId(role.id).then((result) => { return auth._getAllRoleNamesForId(role.id).then((result) => {
return Parse.Promise.as({ return Parse.Promise.as({
id: role.id, id: role.id,
name: role.get('name'),
roleIds: result roleIds: result
}); });
}) })
@@ -147,19 +150,23 @@ describe('Parse Role testing', () => {
return Parse.Promise.when(promises); return Parse.Promise.when(promises);
}).then((results) => { }).then((results) => {
results.forEach((result) => { results.forEach((result) => {
let id = result.id; let id = result.id;
let roleIds = result.roleIds; let roleIds = result.roleIds;
if (id == admin.id) { if (id == admin.id) {
expect(roleIds.length).toBe(2); expect(roleIds.length).toBe(2);
expect(roleIds.indexOf(moderator.id)).not.toBe(-1); expect(roleIds.indexOf(moderator.id)).not.toBe(-1);
expect(roleIds.indexOf(contentCreator.id)).not.toBe(-1); expect(roleIds.indexOf(contentManager.id)).not.toBe(-1);
} else if (id == moderator.id) { } else if (id == moderator.id) {
expect(roleIds.length).toBe(1); expect(roleIds.length).toBe(1);
expect(roleIds.indexOf(contentCreator.id)).toBe(0); expect(roleIds.indexOf(contentManager.id)).toBe(0);
} else if (id == contentCreator.id) { } else if (id == contentManager.id) {
expect(roleIds.length).toBe(0); expect(roleIds.length).toBe(0);
} else if (id == superModerator.id) {
expect(roleIds.length).toBe(3);
expect(roleIds.indexOf(moderator.id)).not.toBe(-1);
expect(roleIds.indexOf(contentManager.id)).not.toBe(-1);
expect(roleIds.indexOf(superContentManager.id)).not.toBe(-1);
} }
}); });
done(); done();

View File

@@ -173,14 +173,9 @@ Auth.prototype._getAllRoleNamesForId = function(roleID) {
}).then(function(results){ }).then(function(results){
// Flatten // Flatten
let roleIDs = results.reduce( (memo, result) => { let roleIDs = results.reduce( (memo, result) => {
if (typeof result == "object") { return memo.concat(result);
memo = memo.concat(result);
} else {
memo.push(result);
}
return memo;
}, []); }, []);
return Promise.resolve(roleIDs); return Promise.resolve([...new Set(roleIDs)]);
}); });
}; };