Skip to content

Commit 44d3133

Browse files
committed
Merge pull request #52 from lukas1994/lazy
Remove isLazy property in ParseUser
2 parents ed4eb6a + 0253af9 commit 44d3133

File tree

5 files changed

+37
-80
lines changed

5 files changed

+37
-80
lines changed

Parse/src/main/java/com/parse/CachedCurrentUserController.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -241,8 +241,6 @@ public ParseUser then(Task<ParseUser> task) throws Exception {
241241
if (current != null) {
242242
synchronized (current.mutex) {
243243
current.setIsCurrentUser(true);
244-
current.isLazy = current.getObjectId() == null
245-
&& ParseAnonymousUtils.isLinked(current);
246244
}
247245
return current;
248246
}
@@ -267,10 +265,10 @@ private ParseUser lazyLogIn() {
267265
}
268266

269267
/* package for tests */ ParseUser lazyLogIn(String authType, Map<String, String> authData) {
268+
// Note: if authType != ParseAnonymousUtils.AUTH_TYPE the user is not "lazy".
270269
ParseUser user = ParseObject.create(ParseUser.class);
271270
synchronized (user.mutex) {
272271
user.setIsCurrentUser(true);
273-
user.isLazy = true;
274272
user.putAuthData(authType, authData);
275273
}
276274

Parse/src/main/java/com/parse/ParseUser.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,6 @@ public boolean isNew() {
149149
}
150150
}
151151

152-
/* package */ boolean isLazy;
153-
154152
// Whether the object is a currentUser. If so, it will always be persisted to disk on updates.
155153
private boolean isCurrentUser;
156154

@@ -159,7 +157,6 @@ public boolean isNew() {
159157
* have an objectId and will not persist to the database until {@link #signUp} is called.
160158
*/
161159
public ParseUser() {
162-
isLazy = false;
163160
isCurrentUser = false;
164161
}
165162

@@ -190,7 +187,7 @@ boolean isKeyMutable(String key) {
190187
*/
191188
/* package */ boolean isLazy() {
192189
synchronized (mutex) {
193-
return isLazy;
190+
return getObjectId() == null && ParseAnonymousUtils.isLinked(this);
194191
}
195192
}
196193

@@ -673,9 +670,6 @@ public Task<Void> then(final Task<ParseUser.State> signUpTask) throws Exception
673670
@Override
674671
public Task<Void> then(Task<Void> task) throws Exception {
675672
if (!signUpTask.isCancelled() && !signUpTask.isFaulted()) {
676-
synchronized (mutex) {
677-
isLazy = false;
678-
}
679673
return saveCurrentUserAsync(ParseUser.this);
680674
}
681675
return signUpTask.makeVoid();
@@ -1302,7 +1296,6 @@ private void logOutWith(String authType) {
13021296
@Override
13031297
public ParseUser then(Task<Void> task) throws Exception {
13041298
synchronized (mutex) {
1305-
isLazy = false;
13061299
return ParseUser.this;
13071300
}
13081301
}
@@ -1348,12 +1341,6 @@ public ParseUser then(Task<Void> task) throws Exception {
13481341
}
13491342
});
13501343
}
1351-
1352-
// Otherwise, merge it into the current user.
1353-
// This is in Android, but not iOS because iOS has handleSignUpOrLogInResult.
1354-
synchronized (mutex) {
1355-
isLazy = false;
1356-
}
13571344
return Task.forResult(ParseUser.this);
13581345
}
13591346
});

Parse/src/test/java/com/parse/CachedCurrentUserControllerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ public void testLazyLogin() throws Exception {
331331
CachedCurrentUserController controller =
332332
new CachedCurrentUserController(null);
333333

334-
String authType = "test";
334+
String authType = ParseAnonymousUtils.AUTH_TYPE;
335335
Map<String, String> authData = new HashMap<>();
336336
authData.put("sessionToken", "testSessionToken");
337337

@@ -342,7 +342,7 @@ public void testLazyLogin() throws Exception {
342342
assertTrue(user.isCurrentUser());
343343
Map<String, Map<String, String>> authPair = user.getMap(KEY_AUTH_DATA);
344344
assertEquals(1, authPair.size());
345-
Map<String, String> authDataAgain = authPair.get("test");
345+
Map<String, String> authDataAgain = authPair.get(authType);
346346
assertEquals(1, authDataAgain.size());
347347
assertEquals("testSessionToken", authDataAgain.get("sessionToken"));
348348
// Make sure controller state is correct

Parse/src/test/java/com/parse/ParseACLTest.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
import org.mockito.stubbing.Answer;
1919
import org.skyscreamer.jsonassert.JSONCompareMode;
2020

21+
import java.util.HashMap;
22+
import java.util.Map;
23+
2124
import static org.junit.Assert.assertEquals;
2225
import static org.junit.Assert.assertFalse;
2326
import static org.junit.Assert.assertNull;
@@ -141,7 +144,7 @@ public void testToJson() throws Exception {
141144
ParseACL acl = new ParseACL();
142145
acl.setReadAccess("userId", true);
143146
ParseUser unresolvedUser = new ParseUser();
144-
unresolvedUser.isLazy = true;
147+
setLazy(unresolvedUser);
145148
acl.setReadAccess(unresolvedUser, true);
146149
// Mock decoder
147150
ParseEncoder mockEncoder = mock(ParseEncoder.class);
@@ -188,7 +191,7 @@ public void testCreateACLFromJSONObject() throws Exception {
188191
@Test
189192
public void testResolveUserWithNewUser() throws Exception {
190193
ParseUser unresolvedUser = new ParseUser();
191-
unresolvedUser.isLazy = true;
194+
setLazy(unresolvedUser);
192195
ParseACL acl = new ParseACL();
193196
acl.setReadAccess(unresolvedUser, true);
194197

@@ -202,7 +205,7 @@ public void testResolveUserWithNewUser() throws Exception {
202205
public void testResolveUserWithUnresolvedUser() throws Exception {
203206
ParseACL acl = new ParseACL();
204207
ParseUser unresolvedUser = new ParseUser();
205-
unresolvedUser.isLazy = true;
208+
setLazy(unresolvedUser);
206209
// This will set the unresolvedUser in acl
207210
acl.setReadAccess(unresolvedUser, true);
208211
acl.setWriteAccess(unresolvedUser, true);
@@ -211,8 +214,8 @@ public void testResolveUserWithUnresolvedUser() throws Exception {
211214
acl.resolveUser(unresolvedUser);
212215

213216
assertNull(acl.getUnresolvedUser());
214-
assertFalse(acl.getReadAccess(unresolvedUser));
215-
assertFalse(acl.getWriteAccess(unresolvedUser));
217+
assertTrue(acl.getReadAccess(unresolvedUser));
218+
assertTrue(acl.getWriteAccess(unresolvedUser));
216219
assertEquals(1, acl.getPermissionsById().length());
217220
assertFalse(acl.getPermissionsById().has(UNRESOLVED_KEY));
218221
}
@@ -525,7 +528,7 @@ public void testGetRoleWriteAccess() throws Exception {
525528
public void testGetUserReadAccessWithUnresolvedUser() throws Exception {
526529
ParseACL acl = new ParseACL();
527530
ParseUser user = new ParseUser();
528-
user.isLazy = true;
531+
setLazy(user);
529532
// Since user is a lazy user, this will set the acl's unresolved user and give it read access
530533
acl.setReadAccess(user ,true);
531534

@@ -536,7 +539,7 @@ public void testGetUserReadAccessWithUnresolvedUser() throws Exception {
536539
public void testGetUserReadAccessWithLazyUser() throws Exception {
537540
ParseACL acl = new ParseACL();
538541
ParseUser user = new ParseUser();
539-
user.isLazy = true;
542+
setLazy(user);
540543

541544
assertFalse(acl.getReadAccess(user));
542545
}
@@ -563,7 +566,7 @@ public void testGetUserReadAccessWithNormalUser() throws Exception {
563566
public void testGetUserWriteAccessWithUnresolvedUser() throws Exception {
564567
ParseACL acl = new ParseACL();
565568
ParseUser user = new ParseUser();
566-
user.isLazy = true;
569+
setLazy(user);
567570
// Since user is a lazy user, this will set the acl's unresolved user and give it write access
568571
acl.setWriteAccess(user, true);
569572

@@ -613,7 +616,7 @@ public void testIsShared() throws Exception {
613616
public void testUnresolvedUser() throws Exception {
614617
ParseACL acl = new ParseACL();
615618
ParseUser user = new ParseUser();
616-
user.isLazy = true;
619+
setLazy(user);
617620
// This will set unresolvedUser in acl
618621
acl.setReadAccess(user, true);
619622

@@ -622,4 +625,10 @@ public void testUnresolvedUser() throws Exception {
622625
}
623626

624627
//endregion
628+
629+
private static void setLazy(ParseUser user) {
630+
Map<String, String> anonymousAuthData = new HashMap<>();
631+
anonymousAuthData.put("anonymousToken", "anonymousTest");
632+
user.putAuthData(ParseAnonymousUtils.AUTH_TYPE, anonymousAuthData);
633+
}
625634
}

Parse/src/test/java/com/parse/ParseUserTest.java

Lines changed: 15 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ public void testLoginWithAsyncWithLinkedLazyUser() throws Exception {
383383
// Register a mock currentUserController to make getCurrentUser work
384384
ParseUser currentUser = new ParseUser();
385385
currentUser.putAuthData(ParseAnonymousUtils.AUTH_TYPE, new HashMap<String, String>());
386-
currentUser.isLazy = true;
386+
setLazy(currentUser);
387387
ParseUser partialMockCurrentUser = spy(currentUser);
388388
when(partialMockCurrentUser.getSessionToken()).thenReturn("oldSessionToken");
389389
doReturn(Task.<ParseUser>forResult(null))
@@ -414,7 +414,6 @@ public void testLoginWithAsyncWithLinkedLazyUseAndResolveLazinessFailure() throw
414414
Map<String, String> oldAnonymousAuthData = new HashMap<>();
415415
oldAnonymousAuthData.put("oldKey", "oldToken");
416416
currentUser.putAuthData(ParseAnonymousUtils.AUTH_TYPE, oldAnonymousAuthData);
417-
currentUser.isLazy = true;
418417
ParseUser partialMockCurrentUser = spy(currentUser);
419418
when(partialMockCurrentUser.getSessionToken()).thenReturn("oldSessionToken");
420419
doReturn(Task.<ParseUser>forError(new Exception()))
@@ -447,6 +446,7 @@ public void testLoginWithAsyncWithLinkedLazyUseAndResolveLazinessFailure() throw
447446
public void testLoginWithAsyncWithLinkedNotLazyUser() throws Exception {
448447
// Register a mock currentUserController to make getCurrentUser work
449448
ParseUser currentUser = new ParseUser();
449+
currentUser.setObjectId("objectId"); // Make it not lazy.
450450
currentUser.putAuthData(ParseAnonymousUtils.AUTH_TYPE, new HashMap<String, String>());
451451
ParseUser partialMockCurrentUser = spy(currentUser);
452452
when(partialMockCurrentUser.getSessionToken()).thenReturn("sessionToken");
@@ -483,6 +483,7 @@ public void testLoginWithAsyncWithLinkedNotLazyUserLinkFailure() throws Exceptio
483483
// Register a mock currentUserController to make getCurrentUser work
484484
ParseUser currentUser = new ParseUser();
485485
currentUser.putAuthData(ParseAnonymousUtils.AUTH_TYPE, new HashMap<String, String>());
486+
currentUser.setObjectId("objectId"); // Make it not lazy.
486487
ParseUser partialMockCurrentUser = spy(currentUser);
487488
when(partialMockCurrentUser.getSessionToken()).thenReturn("sessionToken");
488489
ParseException linkException =
@@ -641,30 +642,10 @@ public void testResolveLazinessAsyncWithNotLazyUser() throws Exception {
641642
ParseTaskUtils.wait(user.resolveLazinessAsync(Task.<Void>forResult(null)));
642643
}
643644

644-
@Test
645-
public void testResolveLazinessAsyncWithNoAuthData() throws Exception {
646-
ParseUser user = new ParseUser();
647-
user.isLazy = true;
648-
ParseUser partialMockUser = spy(user);
649-
doReturn(Task.forResult(null))
650-
.when(partialMockUser)
651-
.signUpAsync(any(Task.class));
652-
653-
ParseUser userAfterResolveLaziness =
654-
ParseTaskUtils.wait(partialMockUser.resolveLazinessAsync(Task.<Void>forResult(null)));
655-
656-
// Make sure we signUp the lazy user
657-
verify(partialMockUser, times(1)).signUpAsync(any(Task.class));
658-
// Make sure the user is not lazy
659-
assertFalse(userAfterResolveLaziness.isLazy());
660-
// Make sure we do not create new user
661-
assertSame(partialMockUser, userAfterResolveLaziness);
662-
}
663-
664645
@Test
665646
public void testResolveLazinessAsyncWithAuthDataAndNotNewUser() throws Exception {
666647
ParseUser user = new ParseUser();
667-
user.isLazy = true;
648+
setLazy(user);
668649
user.putAuthData("facebook", new HashMap<String, String>());
669650
// Register a mock userController to make logIn work
670651
ParseUserController userController = mock(ParseUserController.class);
@@ -702,11 +683,12 @@ public void testResolveLazinessAsyncWithAuthDataAndNotNewUser() throws Exception
702683
@Test
703684
public void testResolveLazinessAsyncWithAuthDataAndNewUser() throws Exception {
704685
ParseUser user = new ParseUser();
705-
user.isLazy = true;
686+
setLazy(user);
706687
user.putAuthData("facebook", new HashMap<String, String>());
707688
// Register a mock userController to make logIn work
708689
ParseUserController userController = mock(ParseUserController.class);
709690
ParseUser.State newUserState = new ParseUser.State.Builder()
691+
.objectId("objectId")
710692
.put("newKey", "newValue")
711693
.sessionToken("newSessionToken")
712694
.isNew(true)
@@ -738,7 +720,7 @@ public void testResolveLazinessAsyncWithAuthDataAndNewUser() throws Exception {
738720
@Test
739721
public void testResolveLazinessAsyncWithAuthDataAndNotNewUserAndLDSEnabled() throws Exception {
740722
ParseUser user = new ParseUser();
741-
user.isLazy = true;
723+
setLazy(user);
742724
user.putAuthData("facebook", new HashMap<String, String>());
743725
// To verify handleSaveResultAsync is not called
744726
user.setPassword("password");
@@ -794,23 +776,6 @@ public void testValidateSaveWithNoObjectId() throws Exception {
794776
user.validateSave();
795777
}
796778

797-
@Test
798-
public void testValidateSaveWithIsAuthenticated() throws Exception {
799-
// Register a mock currentUserController to make getCurrentUser work
800-
ParseUser currentUser = new ParseUser();
801-
ParseCurrentUserController currentUserController = mock(ParseCurrentUserController.class);
802-
when(currentUserController.getAsync(anyBoolean())).thenReturn(Task.<ParseUser>forResult(null));
803-
ParseCorePlugins.getInstance().registerCurrentUserController(currentUserController);
804-
805-
ParseUser user = new ParseUser();
806-
user.setObjectId("test");
807-
// A lazy user will be an authenticated user. More complicated cases will be covered in
808-
// isAuthenticated() unit test.
809-
user.isLazy = true;
810-
811-
user.validateSave();
812-
}
813-
814779
// TODO(mengyan): Add testValidateSaveWithIsAuthenticatedWithNotDirty
815780

816781
// TODO(mengyan): Add testValidateSaveWithIsAuthenticatedWithIsCurrentUser
@@ -826,8 +791,6 @@ public void testValidateSaveWithLDSNotEnabled() throws Exception {
826791

827792
ParseUser user = new ParseUser();
828793
user.setObjectId("test");
829-
// Make isAuthenticated return false
830-
user.isLazy = false;
831794
// Make isDirty return true
832795
user.put("key", "value");
833796
// Make isCurrent return false
@@ -847,8 +810,6 @@ public void testValidateSaveWithLDSNotEnabledAndCurrentUserNotMatch() throws Exc
847810

848811
ParseUser user = new ParseUser();
849812
user.setObjectId("test");
850-
// Make isAuthenticated return false
851-
user.isLazy = false;
852813
// Make isDirty return true
853814
user.put("key", "value");
854815
// Make isCurrent return false
@@ -874,11 +835,10 @@ public void testSaveAsyncWithLazyAndCurrentUser() throws Exception {
874835

875836
// Set facebook authData to null to verify cleanAuthData()
876837
ParseUser.State userState = new ParseUser.State.Builder()
877-
.objectId("test")
878838
.putAuthData("facebook", null)
879839
.build();
880840
ParseUser user = ParseObject.from(userState);
881-
user.isLazy = true;
841+
setLazy(user);
882842
user.setIsCurrentUser(true);
883843
ParseUser partialMockUser = spy(user);
884844
doReturn(Task.<Void>forResult(null))
@@ -903,11 +863,10 @@ public void testSaveAsyncWithLazyAndNotCurrentUser() throws Exception {
903863

904864
// Set facebook authData to null to verify cleanAuthData()
905865
ParseUser.State userState = new ParseUser.State.Builder()
906-
.objectId("test")
907866
.putAuthData("facebook", null)
908867
.build();
909868
ParseUser user = ParseObject.from(userState);
910-
user.isLazy = true;
869+
setLazy(user);
911870
user.setIsCurrentUser(false);
912871
ParseUser partialMockUser = spy(user);
913872
doReturn(Task.<Void>forResult(null))
@@ -1345,8 +1304,6 @@ public void testValidDelete() throws Exception {
13451304

13461305
ParseUser user = new ParseUser();
13471306
user.setObjectId("test");
1348-
// Make isAuthenticated return false
1349-
user.isLazy = false;
13501307
// Make isDirty return true
13511308
user.put("key", "value");
13521309

@@ -1497,4 +1454,10 @@ public void testRemoveWithUserName() throws Exception {
14971454
}
14981455

14991456
//endregion
1457+
1458+
private static void setLazy(ParseUser user) {
1459+
Map<String, String> anonymousAuthData = new HashMap<>();
1460+
anonymousAuthData.put("anonymousToken", "anonymousTest");
1461+
user.putAuthData(ParseAnonymousUtils.AUTH_TYPE, anonymousAuthData);
1462+
}
15001463
}

0 commit comments

Comments
 (0)