Skip to content

Commit 3f6748b

Browse files
authored
Support isDataAvailable (#856)
* Support isDataAvailable * revert package-lock.json
1 parent 174d108 commit 3f6748b

File tree

3 files changed

+55
-1
lines changed

3 files changed

+55
-1
lines changed

integration/test/ParseObjectTest.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1663,4 +1663,37 @@ describe('Parse Object', () => {
16631663

16641664
done();
16651665
});
1666+
1667+
it('isDataAvailable', async () => {
1668+
const child = new TestObject({ foo: 'bar' });
1669+
assert.equal(child.isDataAvailable(), false);
1670+
1671+
const parent = new TestObject({ child });
1672+
await parent.save();
1673+
1674+
assert.equal(child.isDataAvailable(), true);
1675+
assert.equal(parent.isDataAvailable(), true);
1676+
1677+
const query = new Parse.Query(TestObject);
1678+
const fetched = await query.get(parent.id);
1679+
const unfetched = fetched.get('child');
1680+
1681+
assert.equal(fetched.isDataAvailable(), true);
1682+
assert.equal(unfetched.isDataAvailable(), false);
1683+
});
1684+
1685+
it('isDataAvailable user', async () => {
1686+
let user = new Parse.User();
1687+
user.set('username', 'plain');
1688+
user.set('password', 'plain');
1689+
await user.signUp();
1690+
assert.equal(user.isDataAvailable(), true);
1691+
1692+
user = await Parse.User.logIn('plain', 'plain');
1693+
assert.equal(user.isDataAvailable(), true);
1694+
1695+
const query = new Parse.Query(Parse.User);
1696+
const fetched = await query.get(user.id);
1697+
assert.equal(fetched.isDataAvailable(), true);
1698+
});
16661699
});

src/ParseObject.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,15 @@ class ParseObject {
524524
return Object.keys(keys);
525525
}
526526

527+
/**
528+
* Returns true if the object has been fetched.
529+
* @return {Boolean}
530+
*/
531+
isDataAvailable(): boolean {
532+
const serverData = this._getServerData();
533+
return !!Object.keys(serverData).length;
534+
}
535+
527536
/**
528537
* Gets a Pointer referencing this Object.
529538
* @return {Pointer}
@@ -1980,7 +1989,7 @@ const DefaultController = {
19801989
'All objects must have an ID'
19811990
);
19821991
}
1983-
if (forceFetch || Object.keys(el._getServerData()).length === 0) {
1992+
if (forceFetch || !el.isDataAvailable()) {
19841993
ids.push(el.id);
19851994
objs.push(el);
19861995
}

src/__tests__/ParseObject-test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -916,6 +916,18 @@ describe('ParseObject', () => {
916916
expect(p.op('age')).toBe(undefined);
917917
});
918918

919+
it('isDataAvailable', () => {
920+
const p = new ParseObject('Person');
921+
p.id = 'isdataavailable';
922+
p.set('age', 24);
923+
expect(p.isDataAvailable()).toBe(false);
924+
const updated = new Date();
925+
p._handleSaveResponse({
926+
updatedAt: { __type: 'Date', iso: updated.toISOString() }
927+
});
928+
expect(p.isDataAvailable()).toBe(true);
929+
});
930+
919931
it('handles ACL when saved', () => {
920932
const p = new ParseObject('Person');
921933

0 commit comments

Comments
 (0)