Skip to content

Commit 85b6170

Browse files
committed
Respond to Sebastian's review comments
1 parent f9ff9d6 commit 85b6170

File tree

2 files changed

+68
-14
lines changed

2 files changed

+68
-14
lines changed

firebase-firestore/src/main/java/com/google/firebase/firestore/FirebaseFirestore.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,7 @@ static FirebaseFirestore newInstance(
186186
this.emulatorSettings = emulatorSettings;
187187

188188
this.settings = new FirebaseFirestoreSettings.Builder().build();
189-
if (this.emulatorSettings != null) {
190-
this.settings = mergeEmulatorSettings(settings, emulatorSettings);
191-
}
189+
this.settings = mergeEmulatorSettings(settings, emulatorSettings);
192190
}
193191

194192
/** Returns the settings used by this {@code FirebaseFirestore} object. */
@@ -204,6 +202,8 @@ public FirebaseFirestoreSettings getFirestoreSettings() {
204202
public void setFirestoreSettings(@NonNull FirebaseFirestoreSettings settings) {
205203
synchronized (databaseId) {
206204
checkNotNull(settings, "Provided settings must not be null.");
205+
settings = mergeEmulatorSettings(settings, emulatorSettings);
206+
207207
// As a special exception, don't throw if the same settings are passed repeatedly. This
208208
// should make it simpler to get a Firestore instance in an activity.
209209
if (client != null && !this.settings.equals(settings)) {
@@ -213,10 +213,6 @@ public void setFirestoreSettings(@NonNull FirebaseFirestoreSettings settings) {
213213
+ "FirebaseFirestore object.");
214214
}
215215

216-
if (this.emulatorSettings != null) {
217-
settings = mergeEmulatorSettings(settings, this.emulatorSettings);
218-
}
219-
220216
this.settings = settings;
221217
}
222218
}
@@ -241,13 +237,14 @@ private void ensureClientConfigured() {
241237

242238
private FirebaseFirestoreSettings mergeEmulatorSettings(
243239
@NonNull FirebaseFirestoreSettings settings,
244-
@NonNull EmulatedServiceSettings emulatorSettings) {
240+
@Nullable EmulatedServiceSettings emulatorSettings) {
241+
if (emulatorSettings == null) {
242+
return settings;
243+
}
245244

246245
if (!FirebaseFirestoreSettings.DEFAULT_HOST.equals(settings.getHost())) {
247246
throw new IllegalStateException(
248-
"Cannot change the Firestore host through FirebaseFirestoreSettings when "
249-
+ "EmulatedServiceSettings are also in effect. "
250-
+ "Make sure to only set the host in one location.");
247+
"Cannot specify the host in FirebaseFirestoreSettings when EmulatedServiceSettings is provided.");
251248
}
252249

253250
return new FirebaseFirestoreSettings.Builder(settings)

firebase-firestore/src/test/java/com/google/firebase/firestore/FirebaseFirestoreTest.java

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
import static org.junit.Assert.assertEquals;
1818
import static org.junit.Assert.assertFalse;
19+
import static org.junit.Assert.assertTrue;
20+
import static org.junit.Assert.fail;
1921

2022
import androidx.annotation.NonNull;
2123
import androidx.test.platform.app.InstrumentationRegistry;
@@ -69,7 +71,7 @@ FirebaseFirestore.EMULATOR, new EmulatedServiceSettings("10.0.2.2", 8080))
6971
assertFalse(settings.isPersistenceEnabled());
7072
}
7173

72-
@Test(expected = IllegalStateException.class)
74+
@Test
7375
public void getInstance_withEmulator_mergeSettingsFailure() {
7476
FirebaseApp app = getApp("getInstance_withEmulator_mergeSettingsFailure");
7577
app.enableEmulators(
@@ -78,9 +80,64 @@ public void getInstance_withEmulator_mergeSettingsFailure() {
7880
FirebaseFirestore.EMULATOR, new EmulatedServiceSettings("10.0.2.2", 8080))
7981
.build());
8082

83+
try {
84+
FirebaseFirestore firestore = FirebaseFirestore.getInstance(app);
85+
firestore.setFirestoreSettings(
86+
new FirebaseFirestoreSettings.Builder().setHost("myhost.com").build());
87+
fail("Exception should be thrown");
88+
} catch (Exception e) {
89+
assertTrue(e instanceof IllegalStateException);
90+
assertEquals(
91+
e.getMessage(),
92+
"Cannot specify the host in FirebaseFirestoreSettings when EmulatedServiceSettings is provided.");
93+
}
94+
}
95+
96+
@Test
97+
public void setSettings_repeatedSuccess() {
98+
FirebaseApp app = getApp("setSettings_repeatedSuccess");
8199
FirebaseFirestore firestore = FirebaseFirestore.getInstance(app);
82-
firestore.setFirestoreSettings(
83-
new FirebaseFirestoreSettings.Builder().setHost("myhost.com").build());
100+
101+
FirebaseFirestoreSettings settings =
102+
new FirebaseFirestoreSettings.Builder().setHost("myhost.com").setSslEnabled(false).build();
103+
firestore.setFirestoreSettings(settings);
104+
105+
// This should 'start' Firestore
106+
DocumentReference reference = firestore.document("foo/bar");
107+
108+
// Second settings set should pass because the settings are equal
109+
firestore.setFirestoreSettings(settings);
110+
}
111+
112+
@Test
113+
public void setSettings_repeatedFailure() {
114+
FirebaseApp app = getApp("setSettings_repeatedFailure");
115+
FirebaseFirestore firestore = FirebaseFirestore.getInstance(app);
116+
117+
FirebaseFirestoreSettings settings =
118+
new FirebaseFirestoreSettings.Builder().setHost("myhost.com").setSslEnabled(false).build();
119+
120+
FirebaseFirestoreSettings otherSettings =
121+
new FirebaseFirestoreSettings.Builder()
122+
.setHost("otherhost.com")
123+
.setSslEnabled(false)
124+
.build();
125+
126+
firestore.setFirestoreSettings(settings);
127+
128+
// This should 'start' Firestore
129+
DocumentReference reference = firestore.document("foo/bar");
130+
131+
try {
132+
firestore.setFirestoreSettings(otherSettings);
133+
fail("Exception should be thrown");
134+
} catch (Exception e) {
135+
assertTrue(e instanceof IllegalStateException);
136+
assertTrue(
137+
e.getMessage()
138+
.startsWith(
139+
"FirebaseFirestore has already been started and its settings can no longer be changed."));
140+
}
84141
}
85142

86143
@NonNull

0 commit comments

Comments
 (0)