Skip to content

Commit cf15a6b

Browse files
Backport tests from Web (#3474)
1 parent 9f44ece commit cf15a6b

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed

firebase-firestore/src/test/java/com/google/firebase/firestore/local/SQLiteIndexManagerTest.java

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import static org.junit.Assert.assertNull;
3636

3737
import com.google.firebase.firestore.auth.User;
38+
import com.google.firebase.firestore.core.Filter;
3839
import com.google.firebase.firestore.core.Query;
3940
import com.google.firebase.firestore.core.Target;
4041
import com.google.firebase.firestore.model.Document;
@@ -105,6 +106,16 @@ public void testEqualityFilter() {
105106
verifyResults(query, "coll/val2");
106107
}
107108

109+
@Test
110+
public void testOrderByWithNotEqualsFilter() {
111+
indexManager.addFieldIndex(fieldIndex("coll", "count", Kind.ASCENDING));
112+
addDoc("coll/val1", map("count", 1));
113+
addDoc("coll/val2", map("count", 2));
114+
115+
Query query = query("coll").filter(filter("count", "!=", 2)).orderBy(orderBy("count"));
116+
verifyResults(query, "coll/val1");
117+
}
118+
108119
@Test
109120
public void testNestedFieldEqualityFilter() {
110121
indexManager.addFieldIndex(fieldIndex("coll", "a.b", Kind.ASCENDING));
@@ -192,6 +203,17 @@ public void testStartAtFilter() {
192203
verifyResults(query, "coll/val2", "coll/val3");
193204
}
194205

206+
@Test
207+
public void testAppliesStartAtFilterWithNotIn() {
208+
setUpSingleValueFilter();
209+
Query query =
210+
query("coll")
211+
.filter(filter("count", "!=", 2))
212+
.orderBy(orderBy("count"))
213+
.startAt(bound(/* inclusive= */ true, 2));
214+
verifyResults(query, "coll/val3");
215+
}
216+
195217
@Test
196218
public void testStartAfterFilter() {
197219
setUpSingleValueFilter();
@@ -267,6 +289,93 @@ public void testArrayContainsFilter() {
267289
verifyResults(query, "coll/arr1");
268290
}
269291

292+
@Test
293+
public void testArrayContainsWithNotEqualsFilter() {
294+
indexManager.addFieldIndex(fieldIndex("coll", "a", Kind.CONTAINS, "b", Kind.ASCENDING));
295+
addDoc("coll/val1", map("a", Collections.singletonList(1), "b", 1));
296+
addDoc("coll/val2", map("a", Collections.singletonList(1), "b", 2));
297+
addDoc("coll/val3", map("a", Collections.singletonList(2), "b", 1));
298+
addDoc("coll/val4", map("a", Collections.singletonList(2), "b", 2));
299+
300+
Query query =
301+
query("coll").filter(filter("a", "array-contains", 1)).filter(filter("b", "!=", 1));
302+
verifyResults(query, "coll/val2");
303+
}
304+
305+
@Test
306+
public void testArrayContainsWithNotEqualsFilterOnSameField() {
307+
indexManager.addFieldIndex(fieldIndex("coll", "a", Kind.CONTAINS, "a", Kind.ASCENDING));
308+
addDoc("coll/val1", map("a", Arrays.asList(1, 1)));
309+
addDoc("coll/val2", map("a", Arrays.asList(1, 2)));
310+
addDoc("coll/val3", map("a", Arrays.asList(2, 1)));
311+
addDoc("coll/val4", map("a", Arrays.asList(2, 2)));
312+
313+
Query query =
314+
query("coll")
315+
.filter(filter("a", "array-contains", 1))
316+
.filter(filter("a", "!=", Arrays.asList(1, 2)));
317+
verifyResults(query, "coll/val1", "coll/val3");
318+
}
319+
320+
@Test
321+
public void testEqualsWithNotEqualsOnSameField() {
322+
setUpSingleValueFilter();
323+
324+
Object[][] filtersAndResults =
325+
new Object[][] {
326+
new Filter[] {filter("count", ">", 1), filter("count", "!=", 2)},
327+
new String[] {"coll/val3"},
328+
new Filter[] {filter("count", "==", 1), filter("count", "!=", 2)},
329+
new String[] {"coll/val1"},
330+
new Filter[] {filter("count", "==", 1), filter("count", "!=", 1)},
331+
new String[] {},
332+
new Filter[] {filter("count", ">", 2), filter("count", "!=", 2)},
333+
new String[] {"coll/val3"},
334+
new Filter[] {filter("count", ">=", 2), filter("count", "!=", 2)},
335+
new String[] {"coll/val3"},
336+
new Filter[] {filter("count", "<=", 2), filter("count", "!=", 2)},
337+
new String[] {"coll/val1"},
338+
new Filter[] {filter("count", "<=", 2), filter("count", "!=", 1)},
339+
new String[] {"coll/val2"},
340+
new Filter[] {filter("count", "<", 2), filter("count", "!=", 2)},
341+
new String[] {"coll/val1"},
342+
new Filter[] {filter("count", "<", 2), filter("count", "!=", 1)},
343+
new String[] {},
344+
new Filter[] {
345+
filter("count", ">", 2), filter("count", "not-in", Collections.singletonList(3))
346+
},
347+
new String[] {},
348+
new Filter[] {
349+
filter("count", ">=", 2), filter("count", "not-in", Collections.singletonList(3))
350+
},
351+
new String[] {"coll/val2"},
352+
new Filter[] {filter("count", ">=", 2), filter("count", "not-in", Arrays.asList(3, 3))},
353+
new String[] {"coll/val2"},
354+
new Filter[] {filter("count", ">", 1), filter("count", "<", 3), filter("count", "!=", 2)},
355+
new String[] {},
356+
new Filter[] {
357+
filter("count", ">=", 1), filter("count", "<", 3), filter("count", "!=", 2)
358+
},
359+
new String[] {"coll/val1"},
360+
new Filter[] {
361+
filter("count", ">=", 1), filter("count", "<=", 3), filter("count", "!=", 2)
362+
},
363+
new String[] {"coll/val1", "coll/val3"},
364+
new Filter[] {
365+
filter("count", ">", 1), filter("count", "<=", 3), filter("count", "!=", 2)
366+
},
367+
new String[] {"coll/val3"}
368+
};
369+
370+
for (int i = 0; i < filtersAndResults.length; i += 2) {
371+
Query query = query("coll");
372+
for (Filter filter : (Filter[]) filtersAndResults[i]) {
373+
query = query.filter(filter);
374+
}
375+
verifyResults(query, (String[]) filtersAndResults[i + 1]);
376+
}
377+
}
378+
270379
@Test
271380
public void testArrayContainsAnyFilter() {
272381
setUpArrayValueFilter();

0 commit comments

Comments
 (0)