@@ -121,24 +121,48 @@ public void testInstallationObjectIdCannotBeChanged() throws Exception {
121121 }
122122
123123 @ Test
124- public void testSaveAsync () throws Exception {
124+ public void testMissingRequiredFieldWhenSaveAsync () throws Exception {
125125 String sessionToken = "sessionToken" ;
126126 Task <Void > toAwait = Task .forResult (null );
127127
128- ParseCurrentInstallationController controller =
129- mock (ParseCurrentInstallationController .class );
130- ParseInstallation currentInstallation = new ParseInstallation ();
131- when (controller .getAsync ())
132- .thenReturn (Task .forResult (currentInstallation ));
128+ ParseCurrentInstallationController controller = mockCurrentInstallationController ();
129+
130+ ParseObjectController objController = mock (ParseObjectController .class );
131+ // mock return task when Installation was deleted on the server
132+ Task <ParseObject .State > taskError = Task .forError (new ParseException (ParseException .MISSING_REQUIRED_FIELD_ERROR , "" ));
133+ // mock return task when Installation was re-saved to the server
134+ Task <ParseObject .State > task = Task .forResult (null );
135+ when (objController .saveAsync (
136+ any (ParseObject .State .class ),
137+ any (ParseOperationSet .class ),
138+ eq (sessionToken ),
139+ any (ParseDecoder .class )))
140+ .thenReturn (taskError )
141+ .thenReturn (task );
133142 ParseCorePlugins .getInstance ()
134- .registerCurrentInstallationController (controller );
135- ParseObject .State state = new ParseObject .State .Builder ("_Installation" )
136- .put ("deviceToken" , "deviceToken" )
137- .build ();
143+ .registerObjectController (objController );
144+
138145 ParseInstallation installation = ParseInstallation .getCurrentInstallation ();
139146 assertNotNull (installation );
140- installation .setState (state );
147+ installation .put ("key" , "value" );
148+ installation .saveAsync (sessionToken , toAwait );
149+ verify (controller ).getAsync ();
150+ verify (objController , times (2 )).saveAsync (
151+ any (ParseObject .State .class ),
152+ any (ParseOperationSet .class ),
153+ eq (sessionToken ),
154+ any (ParseDecoder .class ));
155+ }
141156
157+ @ Test
158+ public void testObjectNotFoundWhenSaveAsync () throws Exception {
159+ OfflineStore lds = new OfflineStore (RuntimeEnvironment .application );
160+ Parse .setLocalDatastore (lds );
161+
162+ String sessionToken = "sessionToken" ;
163+ Task <Void > toAwait = Task .forResult (null );
164+
165+ ParseCurrentInstallationController controller = mockCurrentInstallationController ();
142166 ParseObjectController objController = mock (ParseObjectController .class );
143167 // mock return task when Installation was deleted on the server
144168 Task <ParseObject .State > taskError = Task .forError (new ParseException (ParseException .OBJECT_NOT_FOUND , "" ));
@@ -154,6 +178,14 @@ public void testSaveAsync() throws Exception {
154178 ParseCorePlugins .getInstance ()
155179 .registerObjectController (objController );
156180
181+ ParseObject .State state = new ParseObject .State .Builder ("_Installation" )
182+ .objectId ("oldId" )
183+ .put ("deviceToken" , "deviceToken" )
184+ .build ();
185+ ParseInstallation installation = ParseInstallation .getCurrentInstallation ();
186+ assertNotNull (installation );
187+ installation .setState (state );
188+ installation .put ("key" , "value" );
157189 installation .saveAsync (sessionToken , toAwait );
158190
159191 verify (controller ).getAsync ();
@@ -355,4 +387,15 @@ private static void mocksForUpdateBeforeSave() {
355387 when (plugins .applicationContext ()).thenReturn (RuntimeEnvironment .application );
356388 ParsePlugins .set (plugins );
357389 }
390+
391+ private ParseCurrentInstallationController mockCurrentInstallationController () {
392+ ParseCurrentInstallationController controller =
393+ mock (ParseCurrentInstallationController .class );
394+ ParseInstallation currentInstallation = new ParseInstallation ();
395+ when (controller .getAsync ())
396+ .thenReturn (Task .forResult (currentInstallation ));
397+ ParseCorePlugins .getInstance ()
398+ .registerCurrentInstallationController (controller );
399+ return controller ;
400+ }
358401}
0 commit comments