Skip to content

Commit 72bc9ac

Browse files
authored
feat: Add support for setting Parse.ACL from json (#2097)
1 parent 3c2303c commit 72bc9ac

File tree

4 files changed

+72
-6
lines changed

4 files changed

+72
-6
lines changed

integration/test/ParseACLTest.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,20 @@ describe('Parse.ACL', () => {
2727
assert(o);
2828
});
2929

30+
it('can set ACL from json', async () => {
31+
Parse.User.enableUnsafeCurrentUser();
32+
const user = new Parse.User();
33+
const object = new TestObject();
34+
user.set('username', 'torn');
35+
user.set('password', 'acl');
36+
await user.signUp();
37+
const acl = new Parse.ACL(user);
38+
object.setACL(acl);
39+
const json = object.toJSON();
40+
await object.save(json);
41+
assert.equal(acl.equals(object.getACL()), true);
42+
});
43+
3044
it('disables public get access', async () => {
3145
const user = new Parse.User();
3246
const object = new TestObject();

integration/test/ParseEventuallyQueueTest.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,49 @@ describe('Parse EventuallyQueue', () => {
220220
assert.strictEqual(results.length, 1);
221221
});
222222

223+
it('can saveEventually on object with ACL', async () => {
224+
Parse.User.enableUnsafeCurrentUser();
225+
const parseServer = await reconfigureServer();
226+
const user = new Parse.User();
227+
user.set('username', 'torn');
228+
user.set('password', 'acl');
229+
await user.signUp();
230+
231+
const acl = new Parse.ACL(user);
232+
const object = new TestObject({ hash: 'saveSecret' });
233+
object.setACL(acl);
234+
235+
await new Promise((resolve) => parseServer.server.close(resolve));
236+
237+
await object.saveEventually();
238+
239+
let length = await Parse.EventuallyQueue.length();
240+
assert(Parse.EventuallyQueue.isPolling());
241+
assert.strictEqual(length, 1);
242+
243+
await reconfigureServer({});
244+
245+
while (Parse.EventuallyQueue.isPolling()) {
246+
await sleep(100);
247+
}
248+
assert.strictEqual(Parse.EventuallyQueue.isPolling(), false);
249+
250+
length = await Parse.EventuallyQueue.length();
251+
while (length) {
252+
await sleep(100);
253+
}
254+
length = await Parse.EventuallyQueue.length();
255+
assert.strictEqual(length, 0);
256+
257+
const query = new Parse.Query('TestObject');
258+
query.equalTo('hash', 'saveSecret');
259+
let results = await query.find();
260+
while (results.length === 0) {
261+
results = await query.find();
262+
}
263+
assert.strictEqual(results.length, 1);
264+
});
265+
223266
it('can destroyEventually', async () => {
224267
const parseServer = await reconfigureServer();
225268
const object = new TestObject({ hash: 'deleteSecret' });

src/ParseObject.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1308,15 +1308,17 @@ class ParseObject {
13081308
options = arg3;
13091309
}
13101310

1311+
options = options || {};
13111312
if (attrs) {
1312-
const validation = this.validate(attrs);
1313-
if (validation) {
1314-
return Promise.reject(validation);
1313+
let validationError;
1314+
options.error = (_, validation) => {
1315+
validationError = validation;
1316+
};
1317+
const success = this.set(attrs, options);
1318+
if (!success) {
1319+
return Promise.reject(validationError);
13151320
}
1316-
this.set(attrs, options);
13171321
}
1318-
1319-
options = options || {};
13201322
const saveOptions = {};
13211323
if (options.hasOwnProperty('useMasterKey')) {
13221324
saveOptions.useMasterKey = !!options.useMasterKey;

src/__tests__/ParseObject-test.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,13 @@ describe('ParseObject', () => {
364364
expect(o.getACL()).toEqual(ACL);
365365
});
366366

367+
it('encodes ACL from json', () => {
368+
const ACL = new ParseACL({ user1: { read: true } });
369+
const o = new ParseObject('Item');
370+
o.set({ ACL: ACL.toJSON() });
371+
expect(o.getACL()).toEqual(ACL);
372+
});
373+
367374
it('can be rendered to JSON', () => {
368375
let o = new ParseObject('Item');
369376
o.set({

0 commit comments

Comments
 (0)