Skip to content

Commit 49479ce

Browse files
Remove test duplication
This merges the ObjectValue and MutableObjectValue tests. They used to be different since we had ObjectValue and ObjectValueBuilder. The PR also makes an effort to remove test duplication, but makes no guarantees here.
1 parent 7bcedca commit 49479ce

File tree

2 files changed

+124
-215
lines changed

2 files changed

+124
-215
lines changed

firebase-firestore/src/test/java/com/google/firebase/firestore/model/MutableObjectValueTest.java

Lines changed: 0 additions & 208 deletions
This file was deleted.

firebase-firestore/src/test/java/com/google/firebase/firestore/model/FieldValueTest.java renamed to firebase-firestore/src/test/java/com/google/firebase/firestore/model/ObjectValueTest.java

Lines changed: 124 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import static org.junit.Assert.assertNull;
2525

2626
import com.google.firebase.firestore.model.mutation.FieldMask;
27+
import com.google.firestore.v1.MapValue;
28+
import com.google.firestore.v1.Value;
2729
import java.util.Map;
2830
import org.junit.Test;
2931
import org.junit.runner.RunWith;
@@ -32,7 +34,19 @@
3234

3335
@RunWith(RobolectricTestRunner.class)
3436
@Config(manifest = Config.NONE)
35-
public class FieldValueTest {
37+
public class ObjectValueTest {
38+
39+
private String fooString = "foo";
40+
private Value fooValue = wrap(fooString);
41+
private String barString = "bar";
42+
private Value barValue = wrap(barString);
43+
private Value emptyObject = Value.newBuilder().setMapValue(MapValue.getDefaultInstance()).build();
44+
45+
@Test
46+
public void supportsEmptyObjectValues() {
47+
ObjectValue objectValue = new ObjectValue();
48+
assertEquals(new ObjectValue(), objectValue);
49+
}
3650

3751
@Test
3852
public void testExtractsFields() {
@@ -69,6 +83,36 @@ public void testOverwritesExistingFields() {
6983
assertEquals(wrapObject("a", "mod"), objectValue);
7084
}
7185

86+
@Test
87+
public void testOverwritesNestedFields() {
88+
ObjectValue objectValue = wrapObject("a", map("b", fooString, "c", map("d", fooString)));
89+
objectValue.set(field("a.b"), barValue);
90+
objectValue.set(field("a.c.d"), barValue);
91+
assertEquals(wrapObject("a", map("b", barString, "c", map("d", barString))), objectValue);
92+
}
93+
94+
@Test
95+
public void testOverwritesDeeplyNestedField() {
96+
ObjectValue objectValue = wrapObject("a", map("b", fooString));
97+
objectValue.set(field("a.b.c"), barValue);
98+
assertEquals(wrapObject("a", map("b", map("c", barString))), objectValue);
99+
}
100+
101+
@Test
102+
public void testOverwritesNestedObject() {
103+
ObjectValue objectValue = wrapObject("a", map("b", map("c", fooString, "d", fooString)));
104+
objectValue.set(field("a.b"), barValue);
105+
assertEquals(wrapObject("a", map("b", "bar")), objectValue);
106+
}
107+
108+
@Test
109+
public void testReplacesNestedObject() {
110+
ObjectValue singleValueObject = wrapObject(map("c", barString));
111+
ObjectValue objectValue = wrapObject("a", map("b", fooString));
112+
objectValue.set(field("a"), singleValueObject.get(FieldPath.EMPTY_PATH));
113+
assertEquals(wrapObject("a", map("c", barString)), objectValue);
114+
}
115+
72116
@Test
73117
public void testAddsNewFields() {
74118
ObjectValue objectValue = new ObjectValue();
@@ -90,6 +134,53 @@ public void testAddsMultipleNewFields() {
90134
assertEquals(wrapObject("a", "a", "b", "b", "c", "c"), object);
91135
}
92136

137+
public void testAddsNestedField() {
138+
ObjectValue objectValue = new ObjectValue();
139+
objectValue.set(field("a.b"), fooValue);
140+
objectValue.set(field("c.d.e"), fooValue);
141+
assertEquals(
142+
wrapObject("a", map("b", fooString), "c", map("d", map("e", fooString))), objectValue);
143+
}
144+
145+
@Test
146+
public void testAddsFieldInNestedObject() {
147+
ObjectValue objectValue = new ObjectValue();
148+
objectValue.set(field("a"), wrapObject("b", fooString).get(FieldPath.EMPTY_PATH));
149+
objectValue.set(field("a.c"), fooValue);
150+
assertEquals(wrapObject("a", map("b", fooString, "c", fooString)), objectValue);
151+
}
152+
153+
@Test
154+
public void testAddsTwoFieldsInNestedObject() {
155+
ObjectValue objectValue = new ObjectValue();
156+
objectValue.set(field("a.b"), fooValue);
157+
objectValue.set(field("a.c"), fooValue);
158+
assertEquals(wrapObject("a", map("b", fooString, "c", fooString)), objectValue);
159+
}
160+
161+
@Test
162+
public void testAddDeeplyNestedFieldInNestedObject() {
163+
ObjectValue objectValue = new ObjectValue();
164+
objectValue.set(field("a.b.c.d.e.f"), fooValue);
165+
assertEquals(
166+
wrapObject("a", map("b", map("c", map("d", map("e", map("f", fooString)))))), objectValue);
167+
}
168+
169+
@Test
170+
public void testAddsSingleFieldInExistingObject() {
171+
ObjectValue objectValue = wrapObject("a", fooString);
172+
objectValue.set(field("b"), fooValue);
173+
assertEquals(wrapObject("a", fooString, "b", fooString), objectValue);
174+
}
175+
176+
@Test
177+
public void testSetsNestedFieldMultipleTimes() {
178+
ObjectValue objectValue = new ObjectValue();
179+
objectValue.set(field("a.c"), fooValue);
180+
objectValue.set(field("a"), wrapObject("b", fooString).get(FieldPath.EMPTY_PATH));
181+
assertEquals(wrapObject("a", map("b", fooString)), objectValue);
182+
}
183+
93184
@Test
94185
public void testImplicitlyCreatesObjects() {
95186
ObjectValue objectValue = wrapObject("a", "old");
@@ -159,12 +250,38 @@ public void testDeletesNestedKeys() {
159250
}
160251

161252
@Test
162-
public void testDeletesMultipleFields() {
163-
ObjectValue object = wrapObject("a", "a", "b", "b", "c", "c");
164-
object.delete(field("a"));
165-
object.delete(field("b"));
166-
object.delete(field("c"));
253+
public void testDeletesNestedObject() {
254+
ObjectValue objectValue =
255+
wrapObject("a", map("b", map("c", fooString, "d", fooString), "f", fooString));
256+
objectValue.delete(field("a.b"));
257+
assertEquals(wrapObject("a", map("f", fooString)), objectValue);
258+
}
259+
260+
@Test
261+
public void testAddsAndDeletesField() {
262+
ObjectValue objectValue = new ObjectValue();
263+
objectValue.set(field(fooString), fooValue);
264+
objectValue.delete(field(fooString));
265+
assertEquals(wrapObject(), objectValue);
266+
}
167267

168-
assertEquals(new ObjectValue(), object);
268+
@Test
269+
public void testAddsAndDeletesNestedField() {
270+
ObjectValue objectValue = new ObjectValue();
271+
objectValue.set(field("a.b.c"), fooValue);
272+
objectValue.set(field("a.b.d"), fooValue);
273+
objectValue.set(field("f.g"), fooValue);
274+
objectValue.set(field("h"), fooValue);
275+
objectValue.delete(field("a.b.c"));
276+
objectValue.delete(field("h"));
277+
assertEquals(
278+
wrapObject("a", map("b", map("d", fooString)), "f", map("g", fooString)), objectValue);
279+
}
280+
281+
@Test
282+
public void testMergesExistingObject() {
283+
ObjectValue objectValue = wrapObject("a", map("b", fooString));
284+
objectValue.set(field("a.c"), fooValue);
285+
assertEquals(wrapObject("a", map("b", fooString, "c", fooString)), objectValue);
169286
}
170287
}

0 commit comments

Comments
 (0)