From 419bba1627337a21f561e5d96ac93ebe43572e56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Fri, 9 Apr 2021 14:45:46 +0200 Subject: [PATCH 01/34] Add option allowCustomObjectId --- parse/src/main/java/com/parse/Parse.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/parse/src/main/java/com/parse/Parse.java b/parse/src/main/java/com/parse/Parse.java index 9525c711d..4728767bd 100644 --- a/parse/src/main/java/com/parse/Parse.java +++ b/parse/src/main/java/com/parse/Parse.java @@ -52,6 +52,7 @@ public class Parse { private static final Object MUTEX_CALLBACKS = new Object(); static ParseEventuallyQueue eventuallyQueue = null; private static boolean isLocalDatastoreEnabled; + private static boolean allowCustomObjectId = false; //endregion private static OfflineStore offlineStore; @@ -106,6 +107,8 @@ public static boolean isLocalDatastoreEnabled() { return isLocalDatastoreEnabled; } + public static boolean isAllowCustomObjectId() { return allowCustomObjectId; } + /** * Authenticates this client as belonging to your application. * This must be called before your @@ -135,6 +138,8 @@ static void initialize(Configuration configuration, ParsePlugins parsePlugins) { // isLocalDataStoreEnabled() to perform additional behavior. isLocalDatastoreEnabled = configuration.localDataStoreEnabled; + allowCustomObjectId = configuration.allowCustomObjectId; + if (parsePlugins == null) { ParsePlugins.initialize(configuration.context, configuration); } else { @@ -564,6 +569,7 @@ public static final class Configuration { final String clientKey; final String server; final boolean localDataStoreEnabled; + final boolean allowCustomObjectId; final OkHttpClient.Builder clientBuilder; final int maxRetries; private Configuration(Builder builder) { @@ -572,6 +578,7 @@ private Configuration(Builder builder) { this.clientKey = builder.clientKey; this.server = builder.server; this.localDataStoreEnabled = builder.localDataStoreEnabled; + this.allowCustomObjectId = builder.allowCustomObjectId; this.clientBuilder = builder.clientBuilder; this.maxRetries = builder.maxRetries; } @@ -585,6 +592,7 @@ public static final class Builder { private String clientKey; private String server; private boolean localDataStoreEnabled; + private boolean allowCustomObjectId; private OkHttpClient.Builder clientBuilder; private int maxRetries = DEFAULT_MAX_RETRIES; @@ -649,6 +657,16 @@ private Builder setLocalDatastoreEnabled(boolean enabled) { return this; } + public Builder allowCustomObjectId() { + allowCustomObjectId = true; + return this; + } + + private Builder setAllowCustomObjectId(boolean enabled) { + allowCustomObjectId = enabled; + return this; + } + /** * Set the {@link okhttp3.OkHttpClient.Builder} to use when communicating with the Parse * REST API From 1866c16356b0560b2bcfad5bdd4339f7b3632e5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Fri, 9 Apr 2021 14:46:31 +0200 Subject: [PATCH 02/34] Use POST request in case objectId is set and allowCustomObjectId is true --- .../java/com/parse/ParseRESTObjectCommand.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/parse/src/main/java/com/parse/ParseRESTObjectCommand.java b/parse/src/main/java/com/parse/ParseRESTObjectCommand.java index c8ef1fb35..2e4a9e27b 100644 --- a/parse/src/main/java/com/parse/ParseRESTObjectCommand.java +++ b/parse/src/main/java/com/parse/ParseRESTObjectCommand.java @@ -38,11 +38,18 @@ public static ParseRESTObjectCommand saveObjectCommand( operations, sessionToken); } else { - return ParseRESTObjectCommand.updateObjectCommand( - state.objectId(), - state.className(), - operations, - sessionToken); + if(Parse.isAllowCustomObjectId()){ + return ParseRESTObjectCommand.createObjectCommand( + state.className(), + operations, + sessionToken); + }else{ + return ParseRESTObjectCommand.updateObjectCommand( + state.objectId(), + state.className(), + operations, + sessionToken); + } } } From 444fca01c527a82d7cf4d657bf8ccbe01e44c4a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Fri, 9 Apr 2021 15:45:42 +0200 Subject: [PATCH 03/34] Exclude ParseInstallation when saving --- parse/src/main/java/com/parse/ParseRESTObjectCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parse/src/main/java/com/parse/ParseRESTObjectCommand.java b/parse/src/main/java/com/parse/ParseRESTObjectCommand.java index 2e4a9e27b..1eededd49 100644 --- a/parse/src/main/java/com/parse/ParseRESTObjectCommand.java +++ b/parse/src/main/java/com/parse/ParseRESTObjectCommand.java @@ -38,7 +38,7 @@ public static ParseRESTObjectCommand saveObjectCommand( operations, sessionToken); } else { - if(Parse.isAllowCustomObjectId()){ + if(Parse.isAllowCustomObjectId() && !state.className().equals(ParseInstallation.class)){ return ParseRESTObjectCommand.createObjectCommand( state.className(), operations, From aa086659e7a89e63f2ba2b02e7f9a13c04f431a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Fri, 9 Apr 2021 18:16:01 +0200 Subject: [PATCH 04/34] Check for objectId when allowCustomObjectId is true --- parse/src/main/java/com/parse/ParseObject.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/parse/src/main/java/com/parse/ParseObject.java b/parse/src/main/java/com/parse/ParseObject.java index d00526522..d2dccae43 100644 --- a/parse/src/main/java/com/parse/ParseObject.java +++ b/parse/src/main/java/com/parse/ParseObject.java @@ -2253,6 +2253,10 @@ Task saveAsync(final String sessionToken, final Task toAwait) { return Task.forResult(null); } + if(Parse.isAllowCustomObjectId() && getObjectId() == null){ + return Task.forError(new ParseException(-1, "ObjectId must not be null")); + } + final ParseOperationSet operations; synchronized (mutex) { updateBeforeSave(); @@ -2365,6 +2369,10 @@ public final Task saveEventually() { return Task.forResult(null); } + if(Parse.isAllowCustomObjectId() && getObjectId() == null){ + return Task.forError(new ParseException(-1, "ObjectId must not be null")); + } + final ParseOperationSet operationSet; final ParseRESTCommand command; final Task runEventuallyTask; From 7d86008232268cf2b5c2e717cf1fce7c65a68fd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Fri, 9 Apr 2021 18:16:33 +0200 Subject: [PATCH 05/34] Check for new object for selecting POST request --- parse/src/main/java/com/parse/ParseRESTObjectCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parse/src/main/java/com/parse/ParseRESTObjectCommand.java b/parse/src/main/java/com/parse/ParseRESTObjectCommand.java index 1eededd49..b49974386 100644 --- a/parse/src/main/java/com/parse/ParseRESTObjectCommand.java +++ b/parse/src/main/java/com/parse/ParseRESTObjectCommand.java @@ -38,7 +38,7 @@ public static ParseRESTObjectCommand saveObjectCommand( operations, sessionToken); } else { - if(Parse.isAllowCustomObjectId() && !state.className().equals(ParseInstallation.class)){ + if(Parse.isAllowCustomObjectId() && state.createdAt() == 0){ return ParseRESTObjectCommand.createObjectCommand( state.className(), operations, From c72fbbb4919d26728cd62faca33f6a44355ade66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Sun, 11 Apr 2021 13:05:29 +0200 Subject: [PATCH 06/34] Use correct error code --- parse/src/main/java/com/parse/ParseObject.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/parse/src/main/java/com/parse/ParseObject.java b/parse/src/main/java/com/parse/ParseObject.java index d2dccae43..3cccc7dde 100644 --- a/parse/src/main/java/com/parse/ParseObject.java +++ b/parse/src/main/java/com/parse/ParseObject.java @@ -2254,7 +2254,7 @@ Task saveAsync(final String sessionToken, final Task toAwait) { } if(Parse.isAllowCustomObjectId() && getObjectId() == null){ - return Task.forError(new ParseException(-1, "ObjectId must not be null")); + return Task.forError(new ParseException(104, "ObjectId must not be null")); } final ParseOperationSet operations; @@ -2370,7 +2370,7 @@ public final Task saveEventually() { } if(Parse.isAllowCustomObjectId() && getObjectId() == null){ - return Task.forError(new ParseException(-1, "ObjectId must not be null")); + return Task.forError(new ParseException(104, "ObjectId must not be null")); } final ParseOperationSet operationSet; From 5688270566b4e4aa9c76bd523738bdaeab8deced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Sun, 11 Apr 2021 13:05:45 +0200 Subject: [PATCH 07/34] Same logic as in JS SDK for deciding about HTTP request --- .../java/com/parse/ParseRESTObjectCommand.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/parse/src/main/java/com/parse/ParseRESTObjectCommand.java b/parse/src/main/java/com/parse/ParseRESTObjectCommand.java index b49974386..4f5e5c66f 100644 --- a/parse/src/main/java/com/parse/ParseRESTObjectCommand.java +++ b/parse/src/main/java/com/parse/ParseRESTObjectCommand.java @@ -38,11 +38,19 @@ public static ParseRESTObjectCommand saveObjectCommand( operations, sessionToken); } else { - if(Parse.isAllowCustomObjectId() && state.createdAt() == 0){ - return ParseRESTObjectCommand.createObjectCommand( - state.className(), - operations, - sessionToken); + if(Parse.isAllowCustomObjectId()){ + if(state.createdAt() == 0){ + return ParseRESTObjectCommand.createObjectCommand( + state.className(), + operations, + sessionToken); + }else{ + return ParseRESTObjectCommand.updateObjectCommand( + state.objectId(), + state.className(), + operations, + sessionToken); + } }else{ return ParseRESTObjectCommand.updateObjectCommand( state.objectId(), From c5f1eee97c8c485712d189679f9dcd01abcf746e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Sun, 11 Apr 2021 13:44:26 +0200 Subject: [PATCH 08/34] Fix comparison --- parse/src/main/java/com/parse/ParseRESTObjectCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parse/src/main/java/com/parse/ParseRESTObjectCommand.java b/parse/src/main/java/com/parse/ParseRESTObjectCommand.java index 4f5e5c66f..ae7a871b6 100644 --- a/parse/src/main/java/com/parse/ParseRESTObjectCommand.java +++ b/parse/src/main/java/com/parse/ParseRESTObjectCommand.java @@ -39,7 +39,7 @@ public static ParseRESTObjectCommand saveObjectCommand( sessionToken); } else { if(Parse.isAllowCustomObjectId()){ - if(state.createdAt() == 0){ + if(state.createdAt() == -1){ return ParseRESTObjectCommand.createObjectCommand( state.className(), operations, From b268f3810d880ca96993dde58cb875138e24566c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Mon, 12 Apr 2021 12:18:49 +0200 Subject: [PATCH 09/34] Add unit tests for custom objectId --- .../parse/ParseClientConfigurationTest.java | 2 + .../test/java/com/parse/ParseObjectTest.java | 106 ++++++++++++++++++ 2 files changed, 108 insertions(+) diff --git a/parse/src/test/java/com/parse/ParseClientConfigurationTest.java b/parse/src/test/java/com/parse/ParseClientConfigurationTest.java index 6d8d96fbd..8c2780087 100644 --- a/parse/src/test/java/com/parse/ParseClientConfigurationTest.java +++ b/parse/src/test/java/com/parse/ParseClientConfigurationTest.java @@ -26,12 +26,14 @@ public void testBuilder() { builder.applicationId("foo"); builder.clientKey("bar"); builder.enableLocalDataStore(); + builder.allowCustomObjectId(); Parse.Configuration configuration = builder.build(); assertNull(configuration.context); assertEquals(configuration.applicationId, "foo"); assertEquals(configuration.clientKey, "bar"); assertEquals(configuration.localDataStoreEnabled, true); + assertEquals(configuration.allowCustomObjectId, true); } @Test diff --git a/parse/src/test/java/com/parse/ParseObjectTest.java b/parse/src/test/java/com/parse/ParseObjectTest.java index ae9b096c4..db0ed692c 100644 --- a/parse/src/test/java/com/parse/ParseObjectTest.java +++ b/parse/src/test/java/com/parse/ParseObjectTest.java @@ -37,10 +37,13 @@ import com.parse.boltsinternal.Task; import com.parse.boltsinternal.TaskCompletionSource; +import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; @@ -160,6 +163,109 @@ public void testFromJsonWithLdsStackOverflow() throws JSONException { //endregion + @Test + public void testSaveCustomObjectIdMissing(){ + // Mocked to let save work + mockCurrentUserController(); + + Parse.Configuration configuration = + new Parse.Configuration.Builder(RuntimeEnvironment.application) + .applicationId(BuildConfig.APPLICATION_ID) + .server("https://api.parse.com/1") + .allowCustomObjectId() + .build(); + + ParsePlugins plugins = ParseTestUtils.mockParsePlugins(configuration); + Parse.initialize(configuration, plugins); + + ParseObject object = new ParseObject("TestObject"); + try { + object.save(); + } catch (ParseException e) { + assertEquals(e.getCode(), 104); + assertThat(e.getMessage(), is("ObjectId must not be null")); + } + } + + @Test + public void testSaveCustomObjectIdNotMissing() throws ParseException{ + // Mocked to let save work + mockCurrentUserController(); + + Parse.Configuration configuration = + new Parse.Configuration.Builder(RuntimeEnvironment.application) + .applicationId(BuildConfig.APPLICATION_ID) + .server("https://api.parse.com/1") + .allowCustomObjectId() + .build(); + + ParsePlugins plugins = ParseTestUtils.mockParsePlugins(configuration); + Parse.initialize(configuration, plugins); + + ParseObject object = new ParseObject("TestObject"); + object.setObjectId("ABCDEF123456"); + object.save(); + } + + @Test + public void testSaveEventuallyCustomObjectIdMissing(){ + // Mocked to let save work + mockCurrentUserController(); + + Parse.Configuration configuration = + new Parse.Configuration.Builder(RuntimeEnvironment.application) + .applicationId(BuildConfig.APPLICATION_ID) + .server("https://api.parse.com/1") + .enableLocalDataStore() + .allowCustomObjectId() + .build(); + + ParsePlugins plugins = ParseTestUtils.mockParsePlugins(configuration); + Parse.initialize(configuration, plugins); + + OfflineStore lds = mock(OfflineStore.class); + Parse.setLocalDatastore(lds); + + ParseObject object = new ParseObject("TestObject"); + object.saveEventually(new SaveCallback() { + @Override + public void done(ParseException e) { + assertNotNull(e); + assertEquals(e.getCode(), 104); + assertThat(e.getMessage(), is("ObjectId must not be null")); + } + }); + } + + @Test + public void testSaveEventuallyCustomObjectIdNotMissing() throws ParseException{ + // Mocked to let save work + mockCurrentUserController(); + + Parse.Configuration configuration = + new Parse.Configuration.Builder(RuntimeEnvironment.application) + .applicationId(BuildConfig.APPLICATION_ID) + .server("https://api.parse.com/1") + .enableLocalDataStore() + .allowCustomObjectId() + .build(); + + ParsePlugins plugins = ParseTestUtils.mockParsePlugins(configuration); + Parse.initialize(configuration, plugins); + + OfflineStore lds = mock(OfflineStore.class); + Parse.setLocalDatastore(lds); + + ParseObject object = new ParseObject("TestObject"); + object.setObjectId("ABCDEF123456"); + object.saveEventually(new SaveCallback() { + @Override + public void done(ParseException e) { + assertNull(e); + } + }); + } + //region testGetter @Test From 2948b8cedb0aa33b79313c05f1f79452348f7eab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Mon, 11 Oct 2021 19:39:04 +0200 Subject: [PATCH 10/34] Format code and add missing assertion to test --- parse/src/main/java/com/parse/ParseObject.java | 4 ++-- .../java/com/parse/ParseRESTObjectCommand.java | 8 ++++---- .../test/java/com/parse/ParseObjectTest.java | 17 ++++++++++++----- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/parse/src/main/java/com/parse/ParseObject.java b/parse/src/main/java/com/parse/ParseObject.java index 3cccc7dde..5339a0a51 100644 --- a/parse/src/main/java/com/parse/ParseObject.java +++ b/parse/src/main/java/com/parse/ParseObject.java @@ -2253,7 +2253,7 @@ Task saveAsync(final String sessionToken, final Task toAwait) { return Task.forResult(null); } - if(Parse.isAllowCustomObjectId() && getObjectId() == null){ + if (Parse.isAllowCustomObjectId() && getObjectId() == null) { return Task.forError(new ParseException(104, "ObjectId must not be null")); } @@ -2369,7 +2369,7 @@ public final Task saveEventually() { return Task.forResult(null); } - if(Parse.isAllowCustomObjectId() && getObjectId() == null){ + if (Parse.isAllowCustomObjectId() && getObjectId() == null) { return Task.forError(new ParseException(104, "ObjectId must not be null")); } diff --git a/parse/src/main/java/com/parse/ParseRESTObjectCommand.java b/parse/src/main/java/com/parse/ParseRESTObjectCommand.java index ae7a871b6..9924d3555 100644 --- a/parse/src/main/java/com/parse/ParseRESTObjectCommand.java +++ b/parse/src/main/java/com/parse/ParseRESTObjectCommand.java @@ -38,20 +38,20 @@ public static ParseRESTObjectCommand saveObjectCommand( operations, sessionToken); } else { - if(Parse.isAllowCustomObjectId()){ - if(state.createdAt() == -1){ + if (Parse.isAllowCustomObjectId()) { + if (state.createdAt() == -1) { return ParseRESTObjectCommand.createObjectCommand( state.className(), operations, sessionToken); - }else{ + } else { return ParseRESTObjectCommand.updateObjectCommand( state.objectId(), state.className(), operations, sessionToken); } - }else{ + } else { return ParseRESTObjectCommand.updateObjectCommand( state.objectId(), state.className(), diff --git a/parse/src/test/java/com/parse/ParseObjectTest.java b/parse/src/test/java/com/parse/ParseObjectTest.java index db0ed692c..330402dcb 100644 --- a/parse/src/test/java/com/parse/ParseObjectTest.java +++ b/parse/src/test/java/com/parse/ParseObjectTest.java @@ -164,7 +164,7 @@ public void testFromJsonWithLdsStackOverflow() throws JSONException { //endregion @Test - public void testSaveCustomObjectIdMissing(){ + public void testSaveCustomObjectIdMissing() { // Mocked to let save work mockCurrentUserController(); @@ -188,7 +188,7 @@ public void testSaveCustomObjectIdMissing(){ } @Test - public void testSaveCustomObjectIdNotMissing() throws ParseException{ + public void testSaveCustomObjectIdNotMissing() { // Mocked to let save work mockCurrentUserController(); @@ -204,11 +204,18 @@ public void testSaveCustomObjectIdNotMissing() throws ParseException{ ParseObject object = new ParseObject("TestObject"); object.setObjectId("ABCDEF123456"); - object.save(); + + ParseException exception = null; + try { + object.save(); + } catch (ParseException e) { + exception = e; + } + assertNull(exception); } @Test - public void testSaveEventuallyCustomObjectIdMissing(){ + public void testSaveEventuallyCustomObjectIdMissing() { // Mocked to let save work mockCurrentUserController(); @@ -238,7 +245,7 @@ public void done(ParseException e) { } @Test - public void testSaveEventuallyCustomObjectIdNotMissing() throws ParseException{ + public void testSaveEventuallyCustomObjectIdNotMissing() throws ParseException { // Mocked to let save work mockCurrentUserController(); From bad72972bd76af7e9e2ab081ca09ddcfe36e3df8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Mon, 11 Oct 2021 19:58:25 +0200 Subject: [PATCH 11/34] Fixes corresponding to changes in version 2.0.0 --- parse/src/test/java/com/parse/ParseObjectTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/parse/src/test/java/com/parse/ParseObjectTest.java b/parse/src/test/java/com/parse/ParseObjectTest.java index af12a5e22..ea2d7be45 100644 --- a/parse/src/test/java/com/parse/ParseObjectTest.java +++ b/parse/src/test/java/com/parse/ParseObjectTest.java @@ -8,10 +8,14 @@ */ package com.parse; +import static org.hamcrest.core.Is.is; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.any; @@ -166,7 +170,6 @@ public void testSaveCustomObjectIdMissing() { Parse.Configuration configuration = new Parse.Configuration.Builder(RuntimeEnvironment.application) - .applicationId(BuildConfig.APPLICATION_ID) .server("https://api.parse.com/1") .allowCustomObjectId() .build(); @@ -190,7 +193,6 @@ public void testSaveCustomObjectIdNotMissing() { Parse.Configuration configuration = new Parse.Configuration.Builder(RuntimeEnvironment.application) - .applicationId(BuildConfig.APPLICATION_ID) .server("https://api.parse.com/1") .allowCustomObjectId() .build(); @@ -217,7 +219,6 @@ public void testSaveEventuallyCustomObjectIdMissing() { Parse.Configuration configuration = new Parse.Configuration.Builder(RuntimeEnvironment.application) - .applicationId(BuildConfig.APPLICATION_ID) .server("https://api.parse.com/1") .enableLocalDataStore() .allowCustomObjectId() @@ -247,7 +248,6 @@ public void testSaveEventuallyCustomObjectIdNotMissing() throws ParseException { Parse.Configuration configuration = new Parse.Configuration.Builder(RuntimeEnvironment.application) - .applicationId(BuildConfig.APPLICATION_ID) .server("https://api.parse.com/1") .enableLocalDataStore() .allowCustomObjectId() From 0d54b49f21436134d81a1670cbbe8b5ef05474da Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 14 Oct 2021 18:55:55 +0000 Subject: [PATCH 12/34] chore(release): 2.0.1 [skip ci] ## [2.0.1](https://github.com/parse-community/Parse-SDK-Android/compare/2.0.0...2.0.1) (2021-10-14) ### Bug Fixes * add maven publications to configure the Jitpack releases ([#1128](https://github.com/parse-community/Parse-SDK-Android/issues/1128)) ([67c4fb6](https://github.com/parse-community/Parse-SDK-Android/commit/67c4fb6209e1a3b3db9663156b356b8888ef0d87)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 930a73870..580977514 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [2.0.1](https://github.com/parse-community/Parse-SDK-Android/compare/2.0.0...2.0.1) (2021-10-14) + + +### Bug Fixes + +* add maven publications to configure the Jitpack releases ([#1128](https://github.com/parse-community/Parse-SDK-Android/issues/1128)) ([67c4fb6](https://github.com/parse-community/Parse-SDK-Android/commit/67c4fb6209e1a3b3db9663156b356b8888ef0d87)) + # [2.0.0](https://github.com/mtrezza/Parse-SDK-Android/compare/1.22.0...2.0.0) (2021-10-10) From a091eb14f4a1720f7d0f2f2eb041a9e2780e7fe2 Mon Sep 17 00:00:00 2001 From: Manuel <5673677+mtrezza@users.noreply.github.com> Date: Thu, 14 Oct 2021 20:57:26 +0200 Subject: [PATCH 13/34] docs: remove 2.0.1 release entry --- CHANGELOG.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 580977514..930a73870 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,3 @@ -## [2.0.1](https://github.com/parse-community/Parse-SDK-Android/compare/2.0.0...2.0.1) (2021-10-14) - - -### Bug Fixes - -* add maven publications to configure the Jitpack releases ([#1128](https://github.com/parse-community/Parse-SDK-Android/issues/1128)) ([67c4fb6](https://github.com/parse-community/Parse-SDK-Android/commit/67c4fb6209e1a3b3db9663156b356b8888ef0d87)) - # [2.0.0](https://github.com/mtrezza/Parse-SDK-Android/compare/1.22.0...2.0.0) (2021-10-10) From 64bcb3b01f2e20c6025e38fc1f8a391043794014 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 14 Oct 2021 19:09:15 +0000 Subject: [PATCH 14/34] chore(release): 2.0.1 [skip ci] ## [2.0.1](https://github.com/mtrezza/Parse-SDK-Android/compare/2.0.0...2.0.1) (2021-10-14) ### Bug Fixes * add maven publications to configure the Jitpack releases ([#1128](https://github.com/mtrezza/Parse-SDK-Android/issues/1128)) ([67c4fb6](https://github.com/mtrezza/Parse-SDK-Android/commit/67c4fb6209e1a3b3db9663156b356b8888ef0d87)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 930a73870..d0aa26229 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [2.0.1](https://github.com/mtrezza/Parse-SDK-Android/compare/2.0.0...2.0.1) (2021-10-14) + + +### Bug Fixes + +* add maven publications to configure the Jitpack releases ([#1128](https://github.com/mtrezza/Parse-SDK-Android/issues/1128)) ([67c4fb6](https://github.com/mtrezza/Parse-SDK-Android/commit/67c4fb6209e1a3b3db9663156b356b8888ef0d87)) + # [2.0.0](https://github.com/mtrezza/Parse-SDK-Android/compare/1.22.0...2.0.0) (2021-10-10) From f3b227a8bb433a2b898daceac916a477ccd24c2a Mon Sep 17 00:00:00 2001 From: Manuel <5673677+mtrezza@users.noreply.github.com> Date: Thu, 14 Oct 2021 21:39:14 +0200 Subject: [PATCH 15/34] ci: temporarily disable release automation --- .github/workflows/release-automated.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release-automated.yml b/.github/workflows/release-automated.yml index 3d34f2e5a..2cfaa990d 100644 --- a/.github/workflows/release-automated.yml +++ b/.github/workflows/release-automated.yml @@ -1,7 +1,9 @@ name: release-automated on: push: - branches: [ master, release, alpha, beta ] + # Disabling release automation temporarily + # branches: [ master, release, alpha, beta ] + branches: [ release, alpha, beta ] jobs: publish-docs: runs-on: ubuntu-latest From 9bffeda7947b4199efeef7c98268ba203678bd2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Thu, 14 Oct 2021 22:27:29 +0200 Subject: [PATCH 16/34] Revert release-automated.yaml --- .github/workflows/release-automated.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/release-automated.yml b/.github/workflows/release-automated.yml index 2cfaa990d..3d34f2e5a 100644 --- a/.github/workflows/release-automated.yml +++ b/.github/workflows/release-automated.yml @@ -1,9 +1,7 @@ name: release-automated on: push: - # Disabling release automation temporarily - # branches: [ master, release, alpha, beta ] - branches: [ release, alpha, beta ] + branches: [ master, release, alpha, beta ] jobs: publish-docs: runs-on: ubuntu-latest From c3c93c546e0a9bbfec8865d36707444ec770e82a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Fri, 15 Oct 2021 21:02:20 +0200 Subject: [PATCH 17/34] Changes of spotlessApply --- parse/src/main/java/com/parse/Parse.java | 4 ++- .../com/parse/ParseRESTObjectCommand.java | 14 ++------ .../test/java/com/parse/ParseObjectTest.java | 33 ++++++++++--------- 3 files changed, 23 insertions(+), 28 deletions(-) diff --git a/parse/src/main/java/com/parse/Parse.java b/parse/src/main/java/com/parse/Parse.java index 0710f9abe..580bc774e 100644 --- a/parse/src/main/java/com/parse/Parse.java +++ b/parse/src/main/java/com/parse/Parse.java @@ -111,7 +111,9 @@ public static boolean isLocalDatastoreEnabled() { return isLocalDatastoreEnabled; } - public static boolean isAllowCustomObjectId() { return allowCustomObjectId; } + public static boolean isAllowCustomObjectId() { + return allowCustomObjectId; + } /** * Authenticates this client as belonging to your application. This must be called before your diff --git a/parse/src/main/java/com/parse/ParseRESTObjectCommand.java b/parse/src/main/java/com/parse/ParseRESTObjectCommand.java index d2cdba531..d1ad41519 100644 --- a/parse/src/main/java/com/parse/ParseRESTObjectCommand.java +++ b/parse/src/main/java/com/parse/ParseRESTObjectCommand.java @@ -39,22 +39,14 @@ public static ParseRESTObjectCommand saveObjectCommand( if (Parse.isAllowCustomObjectId()) { if (state.createdAt() == -1) { return ParseRESTObjectCommand.createObjectCommand( - state.className(), - operations, - sessionToken); + state.className(), operations, sessionToken); } else { return ParseRESTObjectCommand.updateObjectCommand( - state.objectId(), - state.className(), - operations, - sessionToken); + state.objectId(), state.className(), operations, sessionToken); } } else { return ParseRESTObjectCommand.updateObjectCommand( - state.objectId(), - state.className(), - operations, - sessionToken); + state.objectId(), state.className(), operations, sessionToken); } } } diff --git a/parse/src/test/java/com/parse/ParseObjectTest.java b/parse/src/test/java/com/parse/ParseObjectTest.java index 8d25cf5ff..9e6986b29 100644 --- a/parse/src/test/java/com/parse/ParseObjectTest.java +++ b/parse/src/test/java/com/parse/ParseObjectTest.java @@ -9,7 +9,6 @@ package com.parse; import static org.hamcrest.core.Is.is; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -231,14 +230,15 @@ public void testSaveEventuallyCustomObjectIdMissing() { Parse.setLocalDatastore(lds); ParseObject object = new ParseObject("TestObject"); - object.saveEventually(new SaveCallback() { - @Override - public void done(ParseException e) { - assertNotNull(e); - assertEquals(e.getCode(), 104); - assertThat(e.getMessage(), is("ObjectId must not be null")); - } - }); + object.saveEventually( + new SaveCallback() { + @Override + public void done(ParseException e) { + assertNotNull(e); + assertEquals(e.getCode(), 104); + assertThat(e.getMessage(), is("ObjectId must not be null")); + } + }); } @Test @@ -261,15 +261,16 @@ public void testSaveEventuallyCustomObjectIdNotMissing() throws ParseException { ParseObject object = new ParseObject("TestObject"); object.setObjectId("ABCDEF123456"); - object.saveEventually(new SaveCallback() { - @Override - public void done(ParseException e) { - assertNull(e); - } - }); + object.saveEventually( + new SaveCallback() { + @Override + public void done(ParseException e) { + assertNull(e); + } + }); } - //region testGetter + // region testGetter @Test public void testRevert() throws ParseException { From f77e1cd51948172cc7f7b1342e306ca31be4edb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Fri, 15 Oct 2021 23:00:50 +0200 Subject: [PATCH 18/34] Update unit tests --- .../test/java/com/parse/ParseObjectTest.java | 56 ++++++++----------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/parse/src/test/java/com/parse/ParseObjectTest.java b/parse/src/test/java/com/parse/ParseObjectTest.java index 9e6986b29..cc796e08e 100644 --- a/parse/src/test/java/com/parse/ParseObjectTest.java +++ b/parse/src/test/java/com/parse/ParseObjectTest.java @@ -168,11 +168,12 @@ public void testSaveCustomObjectIdMissing() { mockCurrentUserController(); Parse.Configuration configuration = - new Parse.Configuration.Builder(RuntimeEnvironment.application) - .server("https://api.parse.com/1") - .allowCustomObjectId() - .build(); - + new Parse.Configuration.Builder(RuntimeEnvironment.application) + .applicationId(BuildConfig.LIBRARY_PACKAGE_NAME) + .server("https://api.parse.com/1") + .enableLocalDataStore() + .allowCustomObjectId() + .build(); ParsePlugins plugins = ParseTestUtils.mockParsePlugins(configuration); Parse.initialize(configuration, plugins); @@ -183,6 +184,7 @@ public void testSaveCustomObjectIdMissing() { assertEquals(e.getCode(), 104); assertThat(e.getMessage(), is("ObjectId must not be null")); } + Parse.destroy(); } @Test @@ -191,13 +193,11 @@ public void testSaveCustomObjectIdNotMissing() { mockCurrentUserController(); Parse.Configuration configuration = - new Parse.Configuration.Builder(RuntimeEnvironment.application) - .server("https://api.parse.com/1") - .allowCustomObjectId() - .build(); - - ParsePlugins plugins = ParseTestUtils.mockParsePlugins(configuration); - Parse.initialize(configuration, plugins); + new Parse.Configuration.Builder(RuntimeEnvironment.application).allowCustomObjectId().build(); + ParsePlugins plugins = mock(ParsePlugins.class); + when(plugins.configuration()).thenReturn(configuration); + when(plugins.applicationContext()).thenReturn(RuntimeEnvironment.application); + ParsePlugins.set(plugins); ParseObject object = new ParseObject("TestObject"); object.setObjectId("ABCDEF123456"); @@ -217,18 +217,15 @@ public void testSaveEventuallyCustomObjectIdMissing() { mockCurrentUserController(); Parse.Configuration configuration = - new Parse.Configuration.Builder(RuntimeEnvironment.application) - .server("https://api.parse.com/1") - .enableLocalDataStore() - .allowCustomObjectId() - .build(); - + new Parse.Configuration.Builder(RuntimeEnvironment.application) + .applicationId(BuildConfig.LIBRARY_PACKAGE_NAME) + .server("https://api.parse.com/1") + .enableLocalDataStore() + .allowCustomObjectId() + .build(); ParsePlugins plugins = ParseTestUtils.mockParsePlugins(configuration); Parse.initialize(configuration, plugins); - OfflineStore lds = mock(OfflineStore.class); - Parse.setLocalDatastore(lds); - ParseObject object = new ParseObject("TestObject"); object.saveEventually( new SaveCallback() { @@ -239,6 +236,7 @@ public void done(ParseException e) { assertThat(e.getMessage(), is("ObjectId must not be null")); } }); + Parse.destroy(); } @Test @@ -247,17 +245,11 @@ public void testSaveEventuallyCustomObjectIdNotMissing() throws ParseException { mockCurrentUserController(); Parse.Configuration configuration = - new Parse.Configuration.Builder(RuntimeEnvironment.application) - .server("https://api.parse.com/1") - .enableLocalDataStore() - .allowCustomObjectId() - .build(); - - ParsePlugins plugins = ParseTestUtils.mockParsePlugins(configuration); - Parse.initialize(configuration, plugins); - - OfflineStore lds = mock(OfflineStore.class); - Parse.setLocalDatastore(lds); + new Parse.Configuration.Builder(RuntimeEnvironment.application).allowCustomObjectId().build(); + ParsePlugins plugins = mock(ParsePlugins.class); + when(plugins.configuration()).thenReturn(configuration); + when(plugins.applicationContext()).thenReturn(RuntimeEnvironment.application); + ParsePlugins.set(plugins); ParseObject object = new ParseObject("TestObject"); object.setObjectId("ABCDEF123456"); From 08cc3da54182123a4b0167a9c4cc2a495cb6ed4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannem=C3=BCller?= Date: Sat, 16 Oct 2021 18:51:37 +0200 Subject: [PATCH 19/34] Manually reset ParseConfiguration after custom objectId tests --- .../test/java/com/parse/ParseObjectTest.java | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/parse/src/test/java/com/parse/ParseObjectTest.java b/parse/src/test/java/com/parse/ParseObjectTest.java index cc796e08e..99737e9aa 100644 --- a/parse/src/test/java/com/parse/ParseObjectTest.java +++ b/parse/src/test/java/com/parse/ParseObjectTest.java @@ -168,12 +168,12 @@ public void testSaveCustomObjectIdMissing() { mockCurrentUserController(); Parse.Configuration configuration = - new Parse.Configuration.Builder(RuntimeEnvironment.application) - .applicationId(BuildConfig.LIBRARY_PACKAGE_NAME) - .server("https://api.parse.com/1") - .enableLocalDataStore() - .allowCustomObjectId() - .build(); + new Parse.Configuration.Builder(RuntimeEnvironment.application) + .applicationId(BuildConfig.LIBRARY_PACKAGE_NAME) + .server("https://api.parse.com/1") + .enableLocalDataStore() + .allowCustomObjectId() + .build(); ParsePlugins plugins = ParseTestUtils.mockParsePlugins(configuration); Parse.initialize(configuration, plugins); @@ -184,7 +184,9 @@ public void testSaveCustomObjectIdMissing() { assertEquals(e.getCode(), 104); assertThat(e.getMessage(), is("ObjectId must not be null")); } + Parse.destroy(); + ParsePlugins.reset(); } @Test @@ -193,7 +195,9 @@ public void testSaveCustomObjectIdNotMissing() { mockCurrentUserController(); Parse.Configuration configuration = - new Parse.Configuration.Builder(RuntimeEnvironment.application).allowCustomObjectId().build(); + new Parse.Configuration.Builder(RuntimeEnvironment.application) + .allowCustomObjectId() + .build(); ParsePlugins plugins = mock(ParsePlugins.class); when(plugins.configuration()).thenReturn(configuration); when(plugins.applicationContext()).thenReturn(RuntimeEnvironment.application); @@ -209,6 +213,9 @@ public void testSaveCustomObjectIdNotMissing() { exception = e; } assertNull(exception); + + Parse.destroy(); + ParsePlugins.reset(); } @Test @@ -217,12 +224,12 @@ public void testSaveEventuallyCustomObjectIdMissing() { mockCurrentUserController(); Parse.Configuration configuration = - new Parse.Configuration.Builder(RuntimeEnvironment.application) - .applicationId(BuildConfig.LIBRARY_PACKAGE_NAME) - .server("https://api.parse.com/1") - .enableLocalDataStore() - .allowCustomObjectId() - .build(); + new Parse.Configuration.Builder(RuntimeEnvironment.application) + .applicationId(BuildConfig.LIBRARY_PACKAGE_NAME) + .server("https://api.parse.com/1") + .enableLocalDataStore() + .allowCustomObjectId() + .build(); ParsePlugins plugins = ParseTestUtils.mockParsePlugins(configuration); Parse.initialize(configuration, plugins); @@ -236,7 +243,9 @@ public void done(ParseException e) { assertThat(e.getMessage(), is("ObjectId must not be null")); } }); + Parse.destroy(); + ParsePlugins.reset(); } @Test @@ -245,7 +254,9 @@ public void testSaveEventuallyCustomObjectIdNotMissing() throws ParseException { mockCurrentUserController(); Parse.Configuration configuration = - new Parse.Configuration.Builder(RuntimeEnvironment.application).allowCustomObjectId().build(); + new Parse.Configuration.Builder(RuntimeEnvironment.application) + .allowCustomObjectId() + .build(); ParsePlugins plugins = mock(ParsePlugins.class); when(plugins.configuration()).thenReturn(configuration); when(plugins.applicationContext()).thenReturn(RuntimeEnvironment.application); @@ -260,6 +271,9 @@ public void done(ParseException e) { assertNull(e); } }); + + Parse.destroy(); + ParsePlugins.reset(); } // region testGetter From a742f349a761f8f654e732eb24480697813e301a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannem=C3=BCller?= Date: Sun, 17 Oct 2021 17:50:44 +0200 Subject: [PATCH 20/34] Fix broken state of LDS --- .../test/java/com/parse/ParseObjectTest.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/parse/src/test/java/com/parse/ParseObjectTest.java b/parse/src/test/java/com/parse/ParseObjectTest.java index 99737e9aa..a19900419 100644 --- a/parse/src/test/java/com/parse/ParseObjectTest.java +++ b/parse/src/test/java/com/parse/ParseObjectTest.java @@ -174,7 +174,9 @@ public void testSaveCustomObjectIdMissing() { .enableLocalDataStore() .allowCustomObjectId() .build(); - ParsePlugins plugins = ParseTestUtils.mockParsePlugins(configuration); + ParsePlugins plugins = mock(ParsePlugins.class); + when(plugins.configuration()).thenReturn(configuration); + when(plugins.applicationContext()).thenReturn(RuntimeEnvironment.application); Parse.initialize(configuration, plugins); ParseObject object = new ParseObject("TestObject"); @@ -186,7 +188,6 @@ public void testSaveCustomObjectIdMissing() { } Parse.destroy(); - ParsePlugins.reset(); } @Test @@ -196,12 +197,15 @@ public void testSaveCustomObjectIdNotMissing() { Parse.Configuration configuration = new Parse.Configuration.Builder(RuntimeEnvironment.application) + .applicationId(BuildConfig.LIBRARY_PACKAGE_NAME) + .server("https://api.parse.com/1") + .enableLocalDataStore() .allowCustomObjectId() .build(); ParsePlugins plugins = mock(ParsePlugins.class); when(plugins.configuration()).thenReturn(configuration); when(plugins.applicationContext()).thenReturn(RuntimeEnvironment.application); - ParsePlugins.set(plugins); + Parse.initialize(configuration, plugins); ParseObject object = new ParseObject("TestObject"); object.setObjectId("ABCDEF123456"); @@ -215,7 +219,6 @@ public void testSaveCustomObjectIdNotMissing() { assertNull(exception); Parse.destroy(); - ParsePlugins.reset(); } @Test @@ -244,8 +247,8 @@ public void done(ParseException e) { } }); + Parse.setLocalDatastore(null); Parse.destroy(); - ParsePlugins.reset(); } @Test @@ -255,12 +258,13 @@ public void testSaveEventuallyCustomObjectIdNotMissing() throws ParseException { Parse.Configuration configuration = new Parse.Configuration.Builder(RuntimeEnvironment.application) + .applicationId(BuildConfig.LIBRARY_PACKAGE_NAME) + .server("https://api.parse.com/1") + .enableLocalDataStore() .allowCustomObjectId() .build(); - ParsePlugins plugins = mock(ParsePlugins.class); - when(plugins.configuration()).thenReturn(configuration); - when(plugins.applicationContext()).thenReturn(RuntimeEnvironment.application); - ParsePlugins.set(plugins); + ParsePlugins plugins = ParseTestUtils.mockParsePlugins(configuration); + Parse.initialize(configuration, plugins); ParseObject object = new ParseObject("TestObject"); object.setObjectId("ABCDEF123456"); @@ -272,8 +276,8 @@ public void done(ParseException e) { } }); + Parse.setLocalDatastore(null); Parse.destroy(); - ParsePlugins.reset(); } // region testGetter From 71ec1c3bed330113028f37bef28ef178d51d9aa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannem=C3=BCller?= Date: Sun, 17 Oct 2021 17:53:18 +0200 Subject: [PATCH 21/34] Fix failing release build --- parse/src/test/java/com/parse/ParseObjectTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/parse/src/test/java/com/parse/ParseObjectTest.java b/parse/src/test/java/com/parse/ParseObjectTest.java index a19900419..6d5193fc3 100644 --- a/parse/src/test/java/com/parse/ParseObjectTest.java +++ b/parse/src/test/java/com/parse/ParseObjectTest.java @@ -248,7 +248,6 @@ public void done(ParseException e) { }); Parse.setLocalDatastore(null); - Parse.destroy(); } @Test @@ -277,7 +276,6 @@ public void done(ParseException e) { }); Parse.setLocalDatastore(null); - Parse.destroy(); } // region testGetter From e44c1def1a2c7a118b54904f1fd6c7a629a3e68b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannem=C3=BCller?= Date: Sun, 17 Oct 2021 17:57:12 +0200 Subject: [PATCH 22/34] Remove last Parse.destroy() calls --- parse/src/test/java/com/parse/ParseObjectTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/parse/src/test/java/com/parse/ParseObjectTest.java b/parse/src/test/java/com/parse/ParseObjectTest.java index 6d5193fc3..d754093b3 100644 --- a/parse/src/test/java/com/parse/ParseObjectTest.java +++ b/parse/src/test/java/com/parse/ParseObjectTest.java @@ -186,8 +186,6 @@ public void testSaveCustomObjectIdMissing() { assertEquals(e.getCode(), 104); assertThat(e.getMessage(), is("ObjectId must not be null")); } - - Parse.destroy(); } @Test @@ -217,8 +215,6 @@ public void testSaveCustomObjectIdNotMissing() { exception = e; } assertNull(exception); - - Parse.destroy(); } @Test From 858c724e46167b2b32c3bf6681d3dda975d92cd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannem=C3=BCller?= Date: Sun, 24 Oct 2021 18:21:07 +0200 Subject: [PATCH 23/34] Reuse ResetPluginsParseTest class --- parse/src/test/java/com/parse/ParseObjectTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/parse/src/test/java/com/parse/ParseObjectTest.java b/parse/src/test/java/com/parse/ParseObjectTest.java index d754093b3..edae9e26e 100644 --- a/parse/src/test/java/com/parse/ParseObjectTest.java +++ b/parse/src/test/java/com/parse/ParseObjectTest.java @@ -49,7 +49,7 @@ import org.robolectric.RuntimeEnvironment; @RunWith(RobolectricTestRunner.class) -public class ParseObjectTest { +public class ParseObjectTest extends ResetPluginsParseTest { @Rule public final ExpectedException thrown = ExpectedException.none(); @@ -83,16 +83,16 @@ private static TaskCompletionSource mockObjectControllerForDelete() { } @Before - public void setUp() { + public void setUp() throws Exception { + super.setUp(); ParseFieldOperations.registerDefaultDecoders(); // to test JSON / Parcel decoding } // region testRevert @After - public void tearDown() { - ParseCorePlugins.getInstance().reset(); - ParsePlugins.reset(); + public void tearDown() throws Exception { + super.tearDown(); } @Test From 84d3eaf1cc60e1010407909bf808c907a6141205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannem=C3=BCller?= Date: Sun, 24 Oct 2021 18:27:18 +0200 Subject: [PATCH 24/34] Destroy Parse instance after ParseObjectTests --- parse/src/test/java/com/parse/ParseObjectTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/parse/src/test/java/com/parse/ParseObjectTest.java b/parse/src/test/java/com/parse/ParseObjectTest.java index edae9e26e..94a86042c 100644 --- a/parse/src/test/java/com/parse/ParseObjectTest.java +++ b/parse/src/test/java/com/parse/ParseObjectTest.java @@ -93,6 +93,7 @@ public void setUp() throws Exception { @After public void tearDown() throws Exception { super.tearDown(); + Parse.destroy(); } @Test From 5bc74209944fd95b5b3f4c2deb09531386b8d1a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannem=C3=BCller?= Date: Sun, 24 Oct 2021 18:27:30 +0200 Subject: [PATCH 25/34] Properly reset Parse instance on destroy --- parse/src/main/java/com/parse/Parse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/parse/src/main/java/com/parse/Parse.java b/parse/src/main/java/com/parse/Parse.java index 580bc774e..46f87c78e 100644 --- a/parse/src/main/java/com/parse/Parse.java +++ b/parse/src/main/java/com/parse/Parse.java @@ -278,6 +278,7 @@ public static void destroy() { ParsePlugins.reset(); setLocalDatastore(null); + allowCustomObjectId = false; } /** @return {@code True} if {@link #initialize} has been called, otherwise {@code false}. */ From fa5a0fb8fbf979763bf5d59151c1c0680edb4ab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Mon, 25 Oct 2021 19:28:38 +0200 Subject: [PATCH 26/34] Use setter method for setting allowCustomObjectId --- parse/src/main/java/com/parse/Parse.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/parse/src/main/java/com/parse/Parse.java b/parse/src/main/java/com/parse/Parse.java index 46f87c78e..258d665e0 100644 --- a/parse/src/main/java/com/parse/Parse.java +++ b/parse/src/main/java/com/parse/Parse.java @@ -669,8 +669,7 @@ private Builder setLocalDatastoreEnabled(boolean enabled) { } public Builder allowCustomObjectId() { - allowCustomObjectId = true; - return this; + return this.setAllowCustomObjectId(true) } private Builder setAllowCustomObjectId(boolean enabled) { From 8e00af8354ecb9e0e3545013905f1af9006c7b4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Mon, 25 Oct 2021 19:33:01 +0200 Subject: [PATCH 27/34] Add missing ; --- parse/src/main/java/com/parse/Parse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parse/src/main/java/com/parse/Parse.java b/parse/src/main/java/com/parse/Parse.java index 258d665e0..b7ed513ac 100644 --- a/parse/src/main/java/com/parse/Parse.java +++ b/parse/src/main/java/com/parse/Parse.java @@ -669,7 +669,7 @@ private Builder setLocalDatastoreEnabled(boolean enabled) { } public Builder allowCustomObjectId() { - return this.setAllowCustomObjectId(true) + return this.setAllowCustomObjectId(true); } private Builder setAllowCustomObjectId(boolean enabled) { From c444e6b42a3ef9fb9af2459c7b9168b110db0877 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Wed, 27 Oct 2021 20:02:14 +0200 Subject: [PATCH 28/34] Fix typo in test name --- parse/src/test/java/com/parse/ParseRESTCommandTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parse/src/test/java/com/parse/ParseRESTCommandTest.java b/parse/src/test/java/com/parse/ParseRESTCommandTest.java index e0cb4f619..6661dd3d0 100644 --- a/parse/src/test/java/com/parse/ParseRESTCommandTest.java +++ b/parse/src/test/java/com/parse/ParseRESTCommandTest.java @@ -488,7 +488,7 @@ public void testOnResponseCloseNetworkStreamWithNormalResponse() throws Exceptio } @Test - public void testOnResposneCloseNetworkStreamWithIOException() throws Exception { + public void testOnResponseCloseNetworkStreamWithIOException() throws Exception { // Mock response stream int statusCode = 200; InputStream mockResponseStream = mock(InputStream.class); From ae9d016740fd0a1c616a95f7864959d990454116 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Wed, 27 Oct 2021 20:02:37 +0200 Subject: [PATCH 29/34] Add test for saveObjectCommand --- .../java/com/parse/ParseRESTCommandTest.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/parse/src/test/java/com/parse/ParseRESTCommandTest.java b/parse/src/test/java/com/parse/ParseRESTCommandTest.java index 6661dd3d0..0dab9ea93 100644 --- a/parse/src/test/java/com/parse/ParseRESTCommandTest.java +++ b/parse/src/test/java/com/parse/ParseRESTCommandTest.java @@ -29,6 +29,8 @@ import java.io.IOException; import java.io.InputStream; import java.net.URL; +import java.util.Collections; + import org.json.JSONArray; import org.json.JSONObject; import org.junit.After; @@ -38,6 +40,7 @@ import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; import org.skyscreamer.jsonassert.JSONCompareMode; // For org.json @@ -515,4 +518,38 @@ public void testOnResponseCloseNetworkStreamWithIOException() throws Exception { assertEquals("Error", responseTask.getError().getMessage()); verify(mockResponseStream, times(1)).close(); } + + @Test + public void testSaveObjectCommandUpdate() { + ParseObject.State state = mock(ParseObject.State.class); + when(state.className()).thenReturn("TestObject"); + when(state.objectId()).thenReturn("test_id"); + when(state.createdAt()).thenReturn(System.currentTimeMillis()/1000L); + when(state.updatedAt()).thenReturn(System.currentTimeMillis()/1000L); + when(state.keySet()).thenReturn(Collections.singleton("foo")); + when(state.get("foo")).thenReturn("bar"); + ParseObject parseObject = ParseObject.from(state); + + ParseRESTObjectCommand command = ParseRESTObjectCommand.saveObjectCommand(parseObject.getState(), null, null); + assertEquals(command.method, ParseHttpRequest.Method.PUT); + + Parse.Configuration configuration = + new Parse.Configuration.Builder(RuntimeEnvironment.application) + .applicationId(BuildConfig.LIBRARY_PACKAGE_NAME) + .server("https://api.parse.com/1") + .enableLocalDataStore() + .allowCustomObjectId() + .build(); + ParsePlugins plugins = mock(ParsePlugins.class); + when(plugins.configuration()).thenReturn(configuration); + when(plugins.applicationContext()).thenReturn(RuntimeEnvironment.application); + Parse.initialize(configuration, plugins); + + command = ParseRESTObjectCommand.saveObjectCommand(parseObject.getState(), null, null); + assertEquals(command.method, ParseHttpRequest.Method.PUT); + + ParseCorePlugins.getInstance().reset(); + ParsePlugins.reset(); + Parse.destroy(); + } } From f9f451998655e67bbef53f288bd53ddaff2af026 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Wed, 27 Oct 2021 20:03:29 +0200 Subject: [PATCH 30/34] Run spotlessApply --- .../java/com/parse/ParseRESTCommandTest.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/parse/src/test/java/com/parse/ParseRESTCommandTest.java b/parse/src/test/java/com/parse/ParseRESTCommandTest.java index 0dab9ea93..0d825db2e 100644 --- a/parse/src/test/java/com/parse/ParseRESTCommandTest.java +++ b/parse/src/test/java/com/parse/ParseRESTCommandTest.java @@ -30,7 +30,6 @@ import java.io.InputStream; import java.net.URL; import java.util.Collections; - import org.json.JSONArray; import org.json.JSONObject; import org.junit.After; @@ -524,22 +523,23 @@ public void testSaveObjectCommandUpdate() { ParseObject.State state = mock(ParseObject.State.class); when(state.className()).thenReturn("TestObject"); when(state.objectId()).thenReturn("test_id"); - when(state.createdAt()).thenReturn(System.currentTimeMillis()/1000L); - when(state.updatedAt()).thenReturn(System.currentTimeMillis()/1000L); + when(state.createdAt()).thenReturn(System.currentTimeMillis() / 1000L); + when(state.updatedAt()).thenReturn(System.currentTimeMillis() / 1000L); when(state.keySet()).thenReturn(Collections.singleton("foo")); when(state.get("foo")).thenReturn("bar"); ParseObject parseObject = ParseObject.from(state); - ParseRESTObjectCommand command = ParseRESTObjectCommand.saveObjectCommand(parseObject.getState(), null, null); + ParseRESTObjectCommand command = + ParseRESTObjectCommand.saveObjectCommand(parseObject.getState(), null, null); assertEquals(command.method, ParseHttpRequest.Method.PUT); Parse.Configuration configuration = - new Parse.Configuration.Builder(RuntimeEnvironment.application) - .applicationId(BuildConfig.LIBRARY_PACKAGE_NAME) - .server("https://api.parse.com/1") - .enableLocalDataStore() - .allowCustomObjectId() - .build(); + new Parse.Configuration.Builder(RuntimeEnvironment.application) + .applicationId(BuildConfig.LIBRARY_PACKAGE_NAME) + .server("https://api.parse.com/1") + .enableLocalDataStore() + .allowCustomObjectId() + .build(); ParsePlugins plugins = mock(ParsePlugins.class); when(plugins.configuration()).thenReturn(configuration); when(plugins.applicationContext()).thenReturn(RuntimeEnvironment.application); From 9e70f7f4fc007b9bdd5ae90f5b28a5cc86b9c911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Sun, 21 Nov 2021 11:03:50 +0100 Subject: [PATCH 31/34] Add JavaDoc for allowCustomObjectId method --- parse/src/main/java/com/parse/Parse.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/parse/src/main/java/com/parse/Parse.java b/parse/src/main/java/com/parse/Parse.java index b7ed513ac..783035eda 100644 --- a/parse/src/main/java/com/parse/Parse.java +++ b/parse/src/main/java/com/parse/Parse.java @@ -668,6 +668,11 @@ private Builder setLocalDatastoreEnabled(boolean enabled) { return this; } + /** + * Enable the possibility to set a custom objectId for your ParseObjects. + * + * @return The same builder, for easy chaining. + */ public Builder allowCustomObjectId() { return this.setAllowCustomObjectId(true); } From 8130153120ef77ffaf1bdd7244e9fcc616fc6635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Sun, 21 Nov 2021 11:14:25 +0100 Subject: [PATCH 32/34] Add JavaDoc to isAllowCustomObjectId() --- parse/src/main/java/com/parse/Parse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/parse/src/main/java/com/parse/Parse.java b/parse/src/main/java/com/parse/Parse.java index 783035eda..c56313134 100644 --- a/parse/src/main/java/com/parse/Parse.java +++ b/parse/src/main/java/com/parse/Parse.java @@ -111,6 +111,7 @@ public static boolean isLocalDatastoreEnabled() { return isLocalDatastoreEnabled; } + /** @return {@code True} if {@link Configuration.Builder#allowCustomObjectId()} has been called, otherwise {@code false}. */ public static boolean isAllowCustomObjectId() { return allowCustomObjectId; } From a10624672c781a5fd44fcb4b9cd7aacc77c25d72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Sun, 21 Nov 2021 16:28:16 +0100 Subject: [PATCH 33/34] Update documentation --- parse/src/main/java/com/parse/Parse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parse/src/main/java/com/parse/Parse.java b/parse/src/main/java/com/parse/Parse.java index c56313134..b034180fe 100644 --- a/parse/src/main/java/com/parse/Parse.java +++ b/parse/src/main/java/com/parse/Parse.java @@ -670,7 +670,7 @@ private Builder setLocalDatastoreEnabled(boolean enabled) { } /** - * Enable the possibility to set a custom objectId for your ParseObjects. + * Allow to set a custom objectId for ParseObjects. * * @return The same builder, for easy chaining. */ From 461a8dbdd18261255bd42cd8169dee508ff98c73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pfannemu=CC=88ller?= Date: Sun, 21 Nov 2021 16:29:01 +0100 Subject: [PATCH 34/34] Run spotlessApply --- parse/src/main/java/com/parse/Parse.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/parse/src/main/java/com/parse/Parse.java b/parse/src/main/java/com/parse/Parse.java index b034180fe..d45f3df02 100644 --- a/parse/src/main/java/com/parse/Parse.java +++ b/parse/src/main/java/com/parse/Parse.java @@ -111,7 +111,10 @@ public static boolean isLocalDatastoreEnabled() { return isLocalDatastoreEnabled; } - /** @return {@code True} if {@link Configuration.Builder#allowCustomObjectId()} has been called, otherwise {@code false}. */ + /** + * @return {@code True} if {@link Configuration.Builder#allowCustomObjectId()} has been called, + * otherwise {@code false}. + */ public static boolean isAllowCustomObjectId() { return allowCustomObjectId; }