Skip to content

Commit 2bf06c1

Browse files
committed
Update the current user on disk when saved or fetched
1 parent 0b160ba commit 2bf06c1

File tree

2 files changed

+108
-4
lines changed

2 files changed

+108
-4
lines changed

src/ParseUser.js

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,32 @@ export default class ParseUser extends ParseObject {
401401
return controller.logIn(this, loginOptions)._thenRunCallbacks(options, this);
402402
}
403403

404+
/**
405+
* Wrap the default save behavior with functionality to save to local
406+
* storage if this is current user.
407+
*/
408+
save(...args) {
409+
return super.save.apply(this, args).then(() => {
410+
if (this.isCurrent()) {
411+
return CoreManager.getUserController().updateUserOnDisk(this);
412+
}
413+
return this;
414+
});
415+
}
416+
417+
/**
418+
* Wrap the default fetch behavior with functionality to save to local
419+
* storage if this is current user.
420+
*/
421+
fetch(...args) {
422+
return super.fetch.apply(this, args).then(() => {
423+
if (this.isCurrent()) {
424+
return CoreManager.getUserController().updateUserOnDisk(this);
425+
}
426+
return this;
427+
});
428+
}
429+
404430
static readOnlyAttributes() {
405431
return ['sessionToken'];
406432
}
@@ -692,10 +718,7 @@ export default class ParseUser extends ParseObject {
692718
ParseObject.registerSubclass('_User', ParseUser);
693719

694720
var DefaultController = {
695-
setCurrentUser(user) {
696-
currentUserCache = user;
697-
user._cleanupAuthData();
698-
user._synchronizeAllAuthData();
721+
updateUserOnDisk(user) {
699722
var path = Storage.generatePath(CURRENT_USER_KEY);
700723
var json = user.toJSON();
701724
json.className = '_User';
@@ -706,6 +729,13 @@ var DefaultController = {
706729
});
707730
},
708731

732+
setCurrentUser(user) {
733+
currentUserCache = user;
734+
user._cleanupAuthData();
735+
user._synchronizeAllAuthData();
736+
return DefaultController.updateUserOnDisk(user);
737+
},
738+
709739
currentUser(): ?ParseUser {
710740
if (currentUserCache) {
711741
return currentUserCache;

src/__tests__/ParseUser-test.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,80 @@ describe('ParseUser', () => {
359359
});
360360
}));
361361

362+
it('updates the current user on disk when saved', asyncHelper((done) => {
363+
ParseUser.enableUnsafeCurrentUser();
364+
ParseUser._clearCache();
365+
Storage._clear();
366+
CoreManager.setRESTController({
367+
request() {
368+
return ParsePromise.as({
369+
objectId: 'uid5',
370+
}, 201);
371+
},
372+
ajax() {}
373+
});
374+
375+
ParseUser.signUp('updater', 'password').then((u) => {
376+
expect(u.isCurrent()).toBe(true);
377+
ParseUser._clearCache();
378+
CoreManager.setRESTController({
379+
request() {
380+
return ParsePromise.as({}, 200);
381+
},
382+
ajax() {}
383+
});
384+
return u.save({ count: 12 });
385+
}).then((u) => {
386+
ParseUser._clearCache();
387+
ParseObject._clearAllState();
388+
expect(u.attributes).toEqual({});
389+
expect(u.get('count')).toBe(undefined);
390+
return ParseUser.currentAsync();
391+
}).then((current) => {
392+
expect(current.id).toBe('uid5');
393+
expect(current.get('count')).toBe(12);
394+
done();
395+
});
396+
}));
397+
398+
it('updates the current user on disk when fetched', asyncHelper((done) => {
399+
ParseUser.enableUnsafeCurrentUser();
400+
ParseUser._clearCache();
401+
Storage._clear();
402+
CoreManager.setRESTController({
403+
request() {
404+
return ParsePromise.as({
405+
objectId: 'uid6'
406+
}, 200);
407+
},
408+
ajax() {}
409+
});
410+
411+
ParseUser.signUp('spot', 'fetch').then((u) => {
412+
expect(u.isCurrent()).toBe(true);
413+
ParseUser._clearCache();
414+
CoreManager.setRESTController({
415+
request() {
416+
return ParsePromise.as({
417+
count: 15
418+
}, 200);
419+
},
420+
ajax() {}
421+
});
422+
return u.fetch();
423+
}).then((u) => {
424+
ParseUser._clearCache();
425+
ParseObject._clearAllState();
426+
expect(u.attributes).toEqual({});
427+
expect(u.get('count')).toBe(undefined);
428+
return ParseUser.currentAsync();
429+
}).then((current) => {
430+
expect(current.id).toBe('uid6');
431+
expect(current.get('count')).toBe(15);
432+
done();
433+
});
434+
}));
435+
362436
it('can get error when recursive _linkWith call fails', asyncHelper((done) => {
363437
CoreManager.setRESTController({
364438
request(method, path, body, options) {

0 commit comments

Comments
 (0)