Skip to content

Commit 317b571

Browse files
committed
Improves tests, ensure unicity of roleIds
1 parent 23610c6 commit 317b571

File tree

2 files changed

+20
-18
lines changed

2 files changed

+20
-18
lines changed

spec/ParseRole.spec.js

+18-11
Original file line numberDiff line numberDiff line change
@@ -126,40 +126,47 @@ describe('Parse Role testing', () => {
126126
it("Should properly resolve roles", (done) => {
127127
let admin = new Parse.Role("Admin", new Parse.ACL());
128128
let moderator = new Parse.Role("Moderator", new Parse.ACL());
129-
let contentCreator = new Parse.Role('ContentManager', new Parse.ACL());
130-
131-
Parse.Object.saveAll([admin, moderator, contentCreator], {useMasterKey: true}).then(() => {
132-
contentCreator.getRoles().add(moderator);
133-
moderator.getRoles().add(admin);
134-
return Parse.Object.saveAll([admin, moderator, contentCreator], {useMasterKey: true});
129+
let superModerator = new Parse.Role("SuperModerator", new Parse.ACL());
130+
let contentManager = new Parse.Role('ContentManager', new Parse.ACL());
131+
let superContentManager = new Parse.Role('SuperContentManager', new Parse.ACL());
132+
Parse.Object.saveAll([admin, moderator, contentManager, superModerator, superContentManager], {useMasterKey: true}).then(() => {
133+
contentManager.getRoles().add([moderator, superContentManager]);
134+
moderator.getRoles().add([admin, superModerator]);
135+
superContentManager.getRoles().add(superModerator);
136+
return Parse.Object.saveAll([admin, moderator, contentManager, superModerator, superContentManager], {useMasterKey: true});
135137
}).then(() => {
136138
var auth = new Auth({ config: new Config("test"), isMaster: true });
137139
// For each role, fetch their sibling, what they inherit
138140
// return with result and roleId for later comparison
139-
let promises = [admin, moderator, contentCreator].map((role) => {
141+
let promises = [admin, moderator, contentManager, superModerator].map((role) => {
140142
return auth._getAllRoleNamesForId(role.id).then((result) => {
141143
return Parse.Promise.as({
142144
id: role.id,
145+
name: role.get('name'),
143146
roleIds: result
144147
});
145148
})
146149
});
147150

148151
return Parse.Promise.when(promises);
149152
}).then((results) => {
150-
151153
results.forEach((result) => {
152154
let id = result.id;
153155
let roleIds = result.roleIds;
154156
if (id == admin.id) {
155157
expect(roleIds.length).toBe(2);
156158
expect(roleIds.indexOf(moderator.id)).not.toBe(-1);
157-
expect(roleIds.indexOf(contentCreator.id)).not.toBe(-1);
159+
expect(roleIds.indexOf(contentManager.id)).not.toBe(-1);
158160
} else if (id == moderator.id) {
159161
expect(roleIds.length).toBe(1);
160-
expect(roleIds.indexOf(contentCreator.id)).toBe(0);
161-
} else if (id == contentCreator.id) {
162+
expect(roleIds.indexOf(contentManager.id)).toBe(0);
163+
} else if (id == contentManager.id) {
162164
expect(roleIds.length).toBe(0);
165+
} else if (id == superModerator.id) {
166+
expect(roleIds.length).toBe(3);
167+
expect(roleIds.indexOf(moderator.id)).not.toBe(-1);
168+
expect(roleIds.indexOf(contentManager.id)).not.toBe(-1);
169+
expect(roleIds.indexOf(superContentManager.id)).not.toBe(-1);
163170
}
164171
});
165172
done();

src/Auth.js

+2-7
Original file line numberDiff line numberDiff line change
@@ -173,14 +173,9 @@ Auth.prototype._getAllRoleNamesForId = function(roleID) {
173173
}).then(function(results){
174174
// Flatten
175175
let roleIDs = results.reduce( (memo, result) => {
176-
if (typeof result == "object") {
177-
memo = memo.concat(result);
178-
} else {
179-
memo.push(result);
180-
}
181-
return memo;
176+
return memo.concat(result);
182177
}, []);
183-
return Promise.resolve(roleIDs);
178+
return Promise.resolve([...new Set(roleIDs)]);
184179
});
185180
};
186181

0 commit comments

Comments
 (0)