From 6727f845ec95d33ea3d3277c1c29a722f0f411c9 Mon Sep 17 00:00:00 2001 From: Herman Liang Date: Thu, 23 Mar 2017 16:26:55 +0800 Subject: [PATCH 1/2] Not allowing setObjectId() in ParseInstallation --- Parse/src/main/java/com/parse/ParseInstallation.java | 7 ++++++- .../test/java/com/parse/ParseInstallationTest.java | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Parse/src/main/java/com/parse/ParseInstallation.java b/Parse/src/main/java/com/parse/ParseInstallation.java index 5a9cf3625..21d5ee8b8 100644 --- a/Parse/src/main/java/com/parse/ParseInstallation.java +++ b/Parse/src/main/java/com/parse/ParseInstallation.java @@ -94,6 +94,11 @@ public String getInstallationId() { return getString(KEY_INSTALLATION_ID); } + @Override + public void setObjectId(String newObjectId) { + throw new RuntimeException("Installation's objectId cannot be changed"); + } + @Override /* package */ boolean needsDefaultACL() { return false; @@ -149,7 +154,7 @@ public Task then(Task task) throws Exception { && task.getError() instanceof ParseException && ((ParseException) task.getError()).getCode() == ParseException.OBJECT_NOT_FOUND) { synchronized (mutex) { - setObjectId(null); + setState(new State.Builder(getState()).objectId(null).build()); markAllFieldsDirty(); return ParseInstallation.super.saveAsync(sessionToken, toAwait); } diff --git a/Parse/src/test/java/com/parse/ParseInstallationTest.java b/Parse/src/test/java/com/parse/ParseInstallationTest.java index 82904c3f7..67a89078a 100644 --- a/Parse/src/test/java/com/parse/ParseInstallationTest.java +++ b/Parse/src/test/java/com/parse/ParseInstallationTest.java @@ -319,7 +319,19 @@ public void testLocaleIdentifierSpecialCases() throws Exception { assertEquals("en", installation.getString(KEY_LOCALE_IDENTIFIER)); } + @Test(expected = RuntimeException.class) + public void testSetObjectId() throws Exception { + ParseCurrentInstallationController controller = + mock(ParseCurrentInstallationController.class); + ParseInstallation currentInstallation = new ParseInstallation(); + when(controller.getAsync()).thenReturn(Task.forResult(currentInstallation)); + ParseCorePlugins.getInstance().registerCurrentInstallationController(controller); + ParseInstallation installation = ParseInstallation.getCurrentInstallation(); + assertNotNull(installation); + verify(controller, times(1)).getAsync(); + installation.setObjectId(null); + } // TODO(mengyan): Add testFetchAsync, right now we can not test super methods inside // testFetchAsync From 712b168117865b3a19bbb21beb4c6129bbe92974 Mon Sep 17 00:00:00 2001 From: Herman Liang Date: Thu, 6 Apr 2017 16:34:07 +0800 Subject: [PATCH 2/2] minor fixes & update test --- .../java/com/parse/ParseInstallation.java | 3 ++- .../java/com/parse/ParseInstallationTest.java | 26 ++++++++++--------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/Parse/src/main/java/com/parse/ParseInstallation.java b/Parse/src/main/java/com/parse/ParseInstallation.java index 21d5ee8b8..4fe460e20 100644 --- a/Parse/src/main/java/com/parse/ParseInstallation.java +++ b/Parse/src/main/java/com/parse/ParseInstallation.java @@ -30,6 +30,7 @@ public class ParseInstallation extends ParseObject { private static final String TAG = "com.parse.ParseInstallation"; + private static final String KEY_OBJECT_ID = "objectId"; private static final String KEY_INSTALLATION_ID = "installationId"; private static final String KEY_DEVICE_TYPE = "deviceType"; private static final String KEY_APP_NAME = "appName"; @@ -45,7 +46,7 @@ public class ParseInstallation extends ParseObject { private static final List READ_ONLY_FIELDS = Collections.unmodifiableList( Arrays.asList(KEY_DEVICE_TYPE, KEY_INSTALLATION_ID, KEY_DEVICE_TOKEN, KEY_PUSH_TYPE, KEY_TIME_ZONE, KEY_LOCALE, KEY_APP_VERSION, KEY_APP_NAME, KEY_PARSE_VERSION, - KEY_APP_IDENTIFIER)); + KEY_APP_IDENTIFIER, KEY_OBJECT_ID)); // TODO(mengyan): Inject into ParseInstallationInstanceController /* package */ static ParseCurrentInstallationController getCurrentInstallationController() { diff --git a/Parse/src/test/java/com/parse/ParseInstallationTest.java b/Parse/src/test/java/com/parse/ParseInstallationTest.java index 67a89078a..c46f80703 100644 --- a/Parse/src/test/java/com/parse/ParseInstallationTest.java +++ b/Parse/src/test/java/com/parse/ParseInstallationTest.java @@ -106,6 +106,20 @@ public void testImmutableKeys() { } } + @Test (expected = RuntimeException.class) + public void testInstallationObjectIdCannotBeChanged() throws Exception { + boolean hasException = false; + ParseInstallation installation = new ParseInstallation(); + try { + installation.put("objectId", "abc"); + } catch (IllegalArgumentException e) { + assertTrue(e.getMessage().contains("Cannot modify")); + hasException = true; + } + assertTrue(hasException); + installation.setObjectId("abc"); + } + @Test public void testSaveAsync() throws Exception { String sessionToken = "sessionToken"; @@ -319,19 +333,7 @@ public void testLocaleIdentifierSpecialCases() throws Exception { assertEquals("en", installation.getString(KEY_LOCALE_IDENTIFIER)); } - @Test(expected = RuntimeException.class) - public void testSetObjectId() throws Exception { - ParseCurrentInstallationController controller = - mock(ParseCurrentInstallationController.class); - ParseInstallation currentInstallation = new ParseInstallation(); - when(controller.getAsync()).thenReturn(Task.forResult(currentInstallation)); - ParseCorePlugins.getInstance().registerCurrentInstallationController(controller); - ParseInstallation installation = ParseInstallation.getCurrentInstallation(); - assertNotNull(installation); - verify(controller, times(1)).getAsync(); - installation.setObjectId(null); - } // TODO(mengyan): Add testFetchAsync, right now we can not test super methods inside // testFetchAsync