1515import org .junit .Test ;
1616import org .junit .rules .ExpectedException ;
1717import org .junit .runner .RunWith ;
18+ import org .mockito .ArgumentCaptor ;
1819import org .mockito .Matchers ;
1920import org .robolectric .RobolectricGradleTestRunner ;
2021import org .robolectric .annotation .Config ;
@@ -217,10 +218,11 @@ public void testSignUpAsyncWithMergeInDiskAnonymousUser() throws Exception {
217218 ParseUser currentUser = mock (ParseUser .class );
218219 when (currentUser .getUsername ()).thenReturn ("oldUserName" );
219220 when (currentUser .getPassword ()).thenReturn ("oldPassword" );
221+ when (currentUser .isLazy ()).thenReturn (false );
220222 when (currentUser .isLinked (ParseAnonymousUtils .AUTH_TYPE )).thenReturn (true );
221223 when (currentUser .getSessionToken ()).thenReturn ("oldSessionToken" );
222224 when (currentUser .getAuthData ()).thenReturn (new HashMap <String , Map <String , String >>());
223- when (currentUser .saveAsync (anyString (), Matchers .<Task <Void >>any ()))
225+ when (currentUser .saveAsync (anyString (), eq ( false ), Matchers .<Task <Void >>any ()))
224226 .thenReturn (Task .<Void >forResult (null ));
225227 ParseUser .State state = new ParseUser .State .Builder ()
226228 .put ("oldKey" , "oldValue" )
@@ -248,7 +250,8 @@ public void testSignUpAsyncWithMergeInDiskAnonymousUser() throws Exception {
248250 verify (currentUser , times (1 )).setUsername ("userName" );
249251 verify (currentUser , times (1 )).setPassword ("password" );
250252 // Make sure we save currentUser
251- verify (currentUser , times (1 )).saveAsync (eq ("oldSessionToken" ), Matchers .<Task <Void >>any ());
253+ verify (currentUser , times (1 ))
254+ .saveAsync (eq ("oldSessionToken" ), eq (false ), Matchers .<Task <Void >>any ());
252255 // Make sure we merge currentUser with user after save
253256 assertEquals ("oldValue" , user .get ("oldKey" ));
254257 // Make sure set currentUser
@@ -262,14 +265,15 @@ public void testSignUpAsyncWithMergeInDiskAnonymousUserSaveFailure() throws Exce
262265 Map <String , String > oldAnonymousAuthData = new HashMap <>();
263266 oldAnonymousAuthData .put ("oldKey" , "oldToken" );
264267 currentUser .putAuthData (ParseAnonymousUtils .AUTH_TYPE , oldAnonymousAuthData );
265- ParseUser partialMockCurrentUser = spy (currentUser );
268+ ParseUser partialMockCurrentUser = spy (currentUser ); // Spy since we need mutex
266269 when (partialMockCurrentUser .getUsername ()).thenReturn ("oldUserName" );
267270 when (partialMockCurrentUser .getPassword ()).thenReturn ("oldPassword" );
268271 when (partialMockCurrentUser .getSessionToken ()).thenReturn ("oldSessionToken" );
272+ when (partialMockCurrentUser .isLazy ()).thenReturn (false );
269273 ParseException saveException = new ParseException (ParseException .OTHER_CAUSE , "" );
270274 doReturn (Task .<Void >forError (saveException ))
271275 .when (partialMockCurrentUser )
272- .saveAsync (anyString (), Matchers .<Task <Void >>any ());
276+ .saveAsync (anyString (), eq ( false ), Matchers .<Task <Void >>any ());
273277 ParseCurrentUserController currentUserController = mock (ParseCurrentUserController .class );
274278 when (currentUserController .getAsync (anyBoolean ()))
275279 .thenReturn (Task .forResult (partialMockCurrentUser ));
@@ -294,7 +298,7 @@ public void testSignUpAsyncWithMergeInDiskAnonymousUserSaveFailure() throws Exce
294298 verify (partialMockCurrentUser , times (1 )).copyChangesFrom (eq (user ));
295299 // Make sure we save currentUser
296300 verify (partialMockCurrentUser , times (1 ))
297- .saveAsync (eq ("oldSessionToken" ), Matchers .<Task <Void >>any ());
301+ .saveAsync (eq ("oldSessionToken" ), eq ( false ), Matchers .<Task <Void >>any ());
298302 // Make sure we restore old username and password after save fails
299303 verify (partialMockCurrentUser , times (1 )).setUsername ("oldUserName" );
300304 verify (partialMockCurrentUser , times (1 )).setPassword ("oldPassword" );
@@ -574,7 +578,7 @@ public void testLinkWithAsyncWithSaveAsyncSuccess() throws Exception {
574578 ParseUser partialMockUser = spy (user );
575579 doReturn (Task .<Void >forResult (null ))
576580 .when (partialMockUser )
577- .saveAsync (anyString (), Matchers .<Task <Void >>any ());
581+ .saveAsync (anyString (), eq ( false ), Matchers .<Task <Void >>any ());
578582 String authType = "facebook" ;
579583 Map <String , String > authData = new HashMap <>();
580584 authData .put ("token" , "test" );
@@ -586,7 +590,8 @@ public void testLinkWithAsyncWithSaveAsyncSuccess() throws Exception {
586590 // Make sure new authData is added
587591 assertSame (authData , partialMockUser .getAuthData ().get ("facebook" ));
588592 // Make sure we save the user
589- verify (partialMockUser , times (1 )).saveAsync (eq ("sessionTokenAgain" ), Matchers .<Task <Void >>any ());
593+ verify (partialMockUser , times (1 ))
594+ .saveAsync (eq ("sessionTokenAgain" ), eq (false ), Matchers .<Task <Void >>any ());
590595 // Make sure synchronizeAuthData() is called
591596 verify (provider , times (1 )).restoreAuthentication (authData );
592597 }
@@ -609,7 +614,7 @@ public void testLinkWithAsyncWithSaveAsyncFailure() throws Exception {
609614 Exception saveException = new Exception ();
610615 doReturn (Task .<Void >forError (saveException ))
611616 .when (partialMockUser )
612- .saveAsync (anyString (), Matchers .<Task <Void >>any ());
617+ .saveAsync (anyString (), eq ( false ), Matchers .<Task <Void >>any ());
613618 String facebookAuthType = "facebook" ;
614619 Map <String , String > facebookAuthData = new HashMap <>();
615620 facebookAuthData .put ("facebookToken" , "facebookTest" );
@@ -621,7 +626,8 @@ public void testLinkWithAsyncWithSaveAsyncFailure() throws Exception {
621626 // Make sure new authData is added
622627 assertSame (facebookAuthData , partialMockUser .getAuthData ().get ("facebook" ));
623628 // Make sure we save the user
624- verify (partialMockUser , times (1 )).saveAsync (eq ("sessionTokenAgain" ), Matchers .<Task <Void >>any ());
629+ verify (partialMockUser , times (1 ))
630+ .saveAsync (eq ("sessionTokenAgain" ), eq (false ), Matchers .<Task <Void >>any ());
625631 // Make sure old authData is restored
626632 assertSame (anonymousAuthData , partialMockUser .getAuthData ().get (ParseAnonymousUtils .AUTH_TYPE ));
627633 // Verify exception
@@ -632,13 +638,6 @@ public void testLinkWithAsyncWithSaveAsyncFailure() throws Exception {
632638
633639 //region testResolveLazinessAsync
634640
635- @ Test
636- public void testResolveLazinessAsyncWithNotLazyUser () throws Exception {
637- ParseUser user = new ParseUser ();
638-
639- ParseTaskUtils .wait (user .resolveLazinessAsync (Task .<Void >forResult (null )));
640- }
641-
642641 @ Test
643642 public void testResolveLazinessAsyncWithAuthDataAndNotNewUser () throws Exception {
644643 ParseUser user = new ParseUser ();
@@ -660,14 +659,16 @@ public void testResolveLazinessAsyncWithAuthDataAndNotNewUser() throws Exception
660659 .thenReturn (Task .<Void >forResult (null ));
661660 ParseCorePlugins .getInstance ().registerCurrentUserController (currentUserController );
662661
663- ParseUser userAfterResolveLaziness =
664- ParseTaskUtils .wait (user .resolveLazinessAsync (Task .<Void >forResult (null )));
662+ ParseTaskUtils .wait (user .resolveLazinessAsync (Task .<Void >forResult (null )));
663+ ArgumentCaptor <ParseUser > userAfterResolveLazinessCaptor =
664+ ArgumentCaptor .forClass (ParseUser .class );
665665
666666 // Make sure we logIn the lazy user
667667 verify (userController , times (1 )).logInAsync (
668668 any (ParseUser .State .class ), any (ParseOperationSet .class ));
669669 // Make sure we save currentUser
670- verify (currentUserController , times (1 )).setAsync (any (ParseUser .class ));
670+ verify (currentUserController , times (1 )).setAsync (userAfterResolveLazinessCaptor .capture ());
671+ ParseUser userAfterResolveLaziness = userAfterResolveLazinessCaptor .getValue ();
671672 // Make sure user's data is correct
672673 assertEquals ("newSessionToken" , userAfterResolveLaziness .getSessionToken ());
673674 assertEquals ("newValue" , userAfterResolveLaziness .get ("newKey" ));
@@ -697,21 +698,18 @@ public void testResolveLazinessAsyncWithAuthDataAndNewUser() throws Exception {
697698 ParseCurrentUserController currentUserController = mock (ParseCurrentUserController .class );
698699 ParseCorePlugins .getInstance ().registerCurrentUserController (currentUserController );
699700
700- ParseUser userAfterResolveLaziness =
701- ParseTaskUtils .wait (user .resolveLazinessAsync (Task .<Void >forResult (null )));
701+ ParseTaskUtils .wait (user .resolveLazinessAsync (Task .<Void >forResult (null )));
702702
703703 // Make sure we logIn the lazy user
704704 verify (userController , times (1 )).logInAsync (
705705 any (ParseUser .State .class ), any (ParseOperationSet .class ));
706706 // Make sure we do not save currentUser
707707 verify (currentUserController , never ()).setAsync (any (ParseUser .class ));
708708 // Make sure userAfterResolveLaziness's data is correct
709- assertEquals ("newSessionToken" , userAfterResolveLaziness .getSessionToken ());
710- assertEquals ("newValue" , userAfterResolveLaziness .get ("newKey" ));
709+ assertEquals ("newSessionToken" , user .getSessionToken ());
710+ assertEquals ("newValue" , user .get ("newKey" ));
711711 // Make sure userAfterResolveLaziness is not lazy
712- assertFalse (userAfterResolveLaziness .isLazy ());
713- // Make sure we do not create new user
714- assertSame (user , userAfterResolveLaziness );
712+ assertFalse (user .isLazy ());
715713 }
716714
717715 @ Test
@@ -739,8 +737,9 @@ public void testResolveLazinessAsyncWithAuthDataAndNotNewUserAndLDSEnabled() thr
739737 // Enable LDS
740738 Parse .enableLocalDatastore (null );
741739
742- ParseUser userAfterResolveLaziness =
743- ParseTaskUtils .wait (user .resolveLazinessAsync (Task .<Void >forResult (null )));
740+ ParseTaskUtils .wait (user .resolveLazinessAsync (Task .<Void >forResult (null )));
741+ ArgumentCaptor <ParseUser > userAfterResolveLazinessCaptor =
742+ ArgumentCaptor .forClass (ParseUser .class );
744743
745744 // Make sure we logIn the lazy user
746745 verify (userController , times (1 )).logInAsync (
@@ -749,7 +748,8 @@ public void testResolveLazinessAsyncWithAuthDataAndNotNewUserAndLDSEnabled() thr
749748 // field should be cleaned
750749 assertEquals ("password" , user .getPassword ());
751750 // Make sure we do not save currentUser
752- verify (currentUserController , times (1 )).setAsync (any (ParseUser .class ));
751+ verify (currentUserController , times (1 )).setAsync (userAfterResolveLazinessCaptor .capture ());
752+ ParseUser userAfterResolveLaziness = userAfterResolveLazinessCaptor .getValue ();
753753 // Make sure userAfterResolveLaziness's data is correct
754754 assertEquals ("newSessionToken" , userAfterResolveLaziness .getSessionToken ());
755755 assertEquals ("newValue" , userAfterResolveLaziness .get ("newKey" ));
0 commit comments