From 414ee6740d8977cab7488b2aa0bd03d11540cfc1 Mon Sep 17 00:00:00 2001 From: Drew Date: Mon, 18 Apr 2016 16:45:48 -0700 Subject: [PATCH] Regression test for #1489 (#1511) --- spec/ParseRelation.spec.js | 58 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/spec/ParseRelation.spec.js b/spec/ParseRelation.spec.js index fbb2b1d3..8ff6c6c3 100644 --- a/spec/ParseRelation.spec.js +++ b/spec/ParseRelation.spec.js @@ -683,4 +683,62 @@ describe('Parse.Relation testing', () => { }) }); }); + + it('can query roles in Cloud Code (regession test #1489)', done => { + Parse.Cloud.define('isAdmin', (request, response) => { + let query = new Parse.Query(Parse.Role); + query.equalTo('name', 'admin'); + query.first({ useMasterKey: true }) + .then(role => { + let relation = new Parse.Relation(role, 'users'); + let admins = relation.query(); + admins.equalTo('username', request.user.get('username')); + admins.first({ useMasterKey: true }) + .then(user => { + if (user) { + Parse.Cloud._removeHook('Functions', 'isAdmin'); + done(); + } else { + Parse.Cloud._removeHook('Functions', 'isAdmin'); + fail('Should have found admin user, found nothing instead'); + done(); + } + }, error => { + Parse.Cloud._removeHook('Functions', 'isAdmin'); + fail('User not admin'); + done(); + }) + }, error => { + Parse.Cloud._removeHook('Functions', 'isAdmin'); + fail('Should have found admin user, errored instead'); + fail(error); + done(); + }); + }); + + let adminUser = new Parse.User(); + adminUser.set('username', 'name'); + adminUser.set('password', 'pass'); + adminUser.signUp() + .then(adminUser => { + let adminACL = new Parse.ACL(); + adminACL.setPublicReadAccess(true); + + // Create admin role + let adminRole = new Parse.Role('admin', adminACL); + adminRole.getUsers().add(adminUser); + adminRole.save() + .then(() => { + Parse.Cloud.run('isAdmin'); + }, error => { + fail('failed to save role'); + fail(error); + done() + }); + }, error => { + fail('failed to sign up'); + fail(error); + done(); + }); + }); });