Skip to content

Commit 48d4f50

Browse files
committed
Polish Tests
1 parent 165396e commit 48d4f50

File tree

1 file changed

+188
-159
lines changed

1 file changed

+188
-159
lines changed

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

Lines changed: 188 additions & 159 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
import static com.google.firebase.firestore.testutil.TestUtil.query;
2424
import static org.junit.Assert.assertFalse;
2525
import static org.junit.Assert.assertTrue;
26-
import static org.junit.Assume.assumeTrue;
2726

2827
import com.google.firebase.firestore.core.Query;
28+
import com.google.firebase.firestore.core.Target;
2929
import java.util.Arrays;
3030
import java.util.Collections;
3131
import java.util.List;
@@ -58,6 +58,14 @@ public class TargetIndexMatcherTest {
5858
query("collId")
5959
.filter(filter("a", "array-contains-any", Collections.singletonList("a"))));
6060

61+
List<Query> queriesWithOrderBy =
62+
Arrays.asList(
63+
query("collId").orderBy(orderBy("a")),
64+
query("collId").orderBy(orderBy("a", "desc")),
65+
query("collId").orderBy(orderBy("a", "asc")),
66+
query("collId").orderBy(orderBy("a")).orderBy(orderBy("__name__")),
67+
query("collId").filter(filter("a", "array-contains", "a")).orderBy(orderBy("b")));
68+
6169
@Test
6270
public void canUseMergeJoin() {
6371
Query q = query("collId").filter(filter("a", "==", 1)).filter(filter("b", "==", 2));
@@ -441,164 +449,6 @@ public void withMultipleNotIn() {
441449
validateServesTarget(q, "a", FieldIndex.Segment.Kind.ASCENDING);
442450
}
443451

444-
@Test
445-
public void buildTargetIndex() {
446-
Query q =
447-
query("collId")
448-
.filter(filter("a", "==", 1))
449-
.filter(filter("b", "==", 2))
450-
.orderBy(orderBy("__name__", "desc"));
451-
TargetIndexMatcher targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
452-
FieldIndex expectedIndex = targetIndexMatcher.BuildTargetIndex();
453-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
454-
455-
q = query("collId").orderBy(orderBy("a"));
456-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
457-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
458-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
459-
460-
q = query("collId").orderBy(orderBy("a")).orderBy(orderBy("b"));
461-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
462-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
463-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
464-
465-
q = query("collId").filter(filter("a", "array-contains", "a")).orderBy(orderBy("b"));
466-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
467-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
468-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
469-
470-
q = query("collId").orderBy(orderBy("b"));
471-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
472-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
473-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
474-
475-
q = query("collId").orderBy(orderBy("a"));
476-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
477-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
478-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
479-
480-
q = query("collId").filter(filter("a", ">", 1)).filter(filter("a", "<", 10));
481-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
482-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
483-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
484-
485-
q = query("collId").filter(filter("a", "in", Arrays.asList(1, 2))).filter(filter("b", "==", 5));
486-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
487-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
488-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
489-
490-
q = query("collId").filter(filter("value", "array-contains", "foo")).orderBy(orderBy("value"));
491-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
492-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
493-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
494-
495-
q =
496-
query("collId")
497-
.filter(filter("a", "array-contains", "a"))
498-
.filter(filter("a", ">", "b"))
499-
.orderBy(orderBy("a", "asc"));
500-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
501-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
502-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
503-
504-
q = query("collId").filter(filter("a", "==", 1)).orderBy(orderBy("__name__", "desc"));
505-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
506-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
507-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
508-
509-
q = query("collId").filter(filter("a1", "==", "a")).filter(filter("a2", "==", "b"));
510-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
511-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
512-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
513-
514-
q =
515-
query("collId")
516-
.filter(filter("equality1", "==", "a"))
517-
.filter(filter("equality2", "==", "b"))
518-
.filter(filter("inequality", ">=", "c"));
519-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
520-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
521-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
522-
523-
q =
524-
query("collId")
525-
.filter(filter("equality1", "==", "a"))
526-
.filter(filter("inequality", ">=", "c"))
527-
.filter(filter("equality2", "==", "b"));
528-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
529-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
530-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
531-
532-
q = query("collId").orderBy(orderBy("a"));
533-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
534-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
535-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
536-
537-
q = query("collId").orderBy(orderBy("a", "desc"));
538-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
539-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
540-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
541-
542-
q = query("collId").orderBy(orderBy("a")).orderBy(orderBy("__name__"));
543-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
544-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
545-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
546-
547-
q = query("collId").filter(filter("a", "!=", 1));
548-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
549-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
550-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
551-
552-
q = query("collId").filter(filter("a", "!=", 1)).orderBy(orderBy("a")).orderBy(orderBy("b"));
553-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
554-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
555-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
556-
557-
q = query("collId").filter(filter("a", "==", "a")).filter(filter("b", ">", "b"));
558-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
559-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
560-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
561-
562-
q =
563-
query("collId")
564-
.filter(filter("a1", "==", "a"))
565-
.filter(filter("a2", ">", "b"))
566-
.orderBy(orderBy("a2", "asc"));
567-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
568-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
569-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
570-
571-
q =
572-
query("collId")
573-
.filter(filter("a", ">=", 1))
574-
.filter(filter("a", "==", 5))
575-
.filter(filter("a", "<=", 10));
576-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
577-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
578-
// assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
579-
580-
q =
581-
query("collId")
582-
.filter(filter("a", "not-in", Arrays.asList(1, 2, 3)))
583-
.filter(filter("a", ">=", 2));
584-
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
585-
expectedIndex = targetIndexMatcher.BuildTargetIndex();
586-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
587-
}
588-
589-
@Test
590-
public void failedTest() {
591-
assumeTrue("Skip this test due to a bug in CSI.", false);
592-
Query q =
593-
query("collId")
594-
.filter(filter("a", ">=", 1))
595-
.filter(filter("a", "==", 5))
596-
.filter(filter("a", "<=", 10));
597-
TargetIndexMatcher targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
598-
FieldIndex expectedIndex = targetIndexMatcher.BuildTargetIndex();
599-
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
600-
}
601-
602452
@Test
603453
public void withMultipleOrderBys() {
604454
Query q =
@@ -791,4 +641,183 @@ private void validateDoesNotServeTarget(
791641
TargetIndexMatcher targetIndexMatcher = new TargetIndexMatcher(query.toTarget());
792642
assertFalse(targetIndexMatcher.servedByIndex(expectedIndex));
793643
}
644+
645+
@Test
646+
public void testBuildTargetIndexWithQueriesWithEqualities() {
647+
for (Query query : queriesWithEqualities) {
648+
validateBuildTargetIndexCreateFullMatchIndex(query);
649+
}
650+
}
651+
652+
@Test
653+
public void testBuildTargetIndexWithQueriesWithInequalities() {
654+
for (Query query : queriesWithInequalities) {
655+
validateBuildTargetIndexCreateFullMatchIndex(query);
656+
}
657+
}
658+
659+
@Test
660+
public void testBuildTargetIndexWithQueriesWithArrayContains() {
661+
for (Query query : queriesWithArrayContains) {
662+
validateBuildTargetIndexCreateFullMatchIndex(query);
663+
}
664+
}
665+
666+
@Test
667+
public void testBuildTargetIndexWithQueriesWithOrderBy() {
668+
for (Query query : queriesWithOrderBy) {
669+
validateBuildTargetIndexCreateFullMatchIndex(query);
670+
}
671+
}
672+
673+
@Test
674+
public void testBuildTargetIndexWithInequalityUsesSingleFieldIndex() {
675+
Query query = query("collId").filter(filter("a", ">", 1)).filter(filter("a", "<", 10));
676+
validateBuildTargetIndexCreateFullMatchIndex(query);
677+
}
678+
679+
@Test
680+
public void testBuildTargetIndexWithCollection() {
681+
Query query = query("collId");
682+
validateBuildTargetIndexCreateFullMatchIndex(query);
683+
}
684+
685+
@Test
686+
public void testBuildTargetIndexWithArrayContainsAndOrderBy() {
687+
Query query =
688+
query("collId")
689+
.filter(filter("a", "array-contains", "a"))
690+
.filter(filter("a", ">", "b"))
691+
.orderBy(orderBy("a", "asc"));
692+
validateBuildTargetIndexCreateFullMatchIndex(query);
693+
}
694+
695+
@Test
696+
public void testBuildTargetIndexWithEqualityAndDescendingOrder() {
697+
Query query = query("collId").filter(filter("a", "==", 1)).orderBy(orderBy("__name__", "desc"));
698+
validateBuildTargetIndexCreateFullMatchIndex(query);
699+
}
700+
701+
@Test
702+
public void testBuildTargetIndexWithMultipleEqualities() {
703+
Query query = query("collId").filter(filter("a1", "==", "a")).filter(filter("a2", "==", "b"));
704+
validateBuildTargetIndexCreateFullMatchIndex(query);
705+
}
706+
707+
@Test
708+
public void testBuildTargetIndexWithMultipleEqualitiesAndInequality() {
709+
Query query =
710+
query("collId")
711+
.filter(filter("equality1", "==", "a"))
712+
.filter(filter("equality2", "==", "b"))
713+
.filter(filter("inequality", ">=", "c"));
714+
validateBuildTargetIndexCreateFullMatchIndex(query);
715+
query =
716+
query("collId")
717+
.filter(filter("equality1", "==", "a"))
718+
.filter(filter("inequality", ">=", "c"))
719+
.filter(filter("equality2", "==", "b"));
720+
validateBuildTargetIndexCreateFullMatchIndex(query);
721+
}
722+
723+
@Test
724+
public void testBuildTargetIndexWithMultipleFilters() {
725+
Query query = query("collId").filter(filter("a", "==", "a")).filter(filter("b", ">", "b"));
726+
validateBuildTargetIndexCreateFullMatchIndex(query);
727+
query =
728+
query("collId")
729+
.filter(filter("a1", "==", "a"))
730+
.filter(filter("a2", ">", "b"))
731+
.orderBy(orderBy("a2", "asc"));
732+
validateBuildTargetIndexCreateFullMatchIndex(query);
733+
query =
734+
query("collId")
735+
.filter(filter("a", ">=", 1))
736+
.filter(filter("a", "==", 5))
737+
.filter(filter("a", "<=", 10));
738+
validateBuildTargetIndexCreateFullMatchIndex(query);
739+
query =
740+
query("collId")
741+
.filter(filter("a", "not-in", Arrays.asList(1, 2, 3)))
742+
.filter(filter("a", ">=", 2));
743+
validateBuildTargetIndexCreateFullMatchIndex(query);
744+
}
745+
746+
@Test
747+
public void testBuildTargetIndexWithMultipleOrderBys() {
748+
Query query =
749+
query("collId")
750+
.orderBy(orderBy("fff"))
751+
.orderBy(orderBy("bar", "desc"))
752+
.orderBy(orderBy("__name__"));
753+
validateBuildTargetIndexCreateFullMatchIndex(query);
754+
query =
755+
query("collId")
756+
.orderBy(orderBy("foo"))
757+
.orderBy(orderBy("bar"))
758+
.orderBy(orderBy("__name__", "desc"));
759+
validateBuildTargetIndexCreateFullMatchIndex(query);
760+
}
761+
762+
@Test
763+
public void testBuildTargetIndexWithInAndNotIn() {
764+
Query query =
765+
query("collId")
766+
.filter(filter("a", "not-in", Arrays.asList(1, 2, 3)))
767+
.filter(filter("b", "in", Arrays.asList(1, 2, 3)));
768+
validateBuildTargetIndexCreateFullMatchIndex(query);
769+
}
770+
771+
@Test
772+
public void testBuildTargetIndexWithEqualityAndDifferentOrderBy() {
773+
Query query =
774+
query("collId")
775+
.filter(filter("foo", "==", ""))
776+
.filter(filter("bar", "==", ""))
777+
.orderBy(orderBy("qux"));
778+
validateBuildTargetIndexCreateFullMatchIndex(query);
779+
query =
780+
query("collId")
781+
.filter(filter("aaa", "==", ""))
782+
.filter(filter("qqq", "==", ""))
783+
.filter(filter("ccc", "==", ""))
784+
.orderBy(orderBy("fff", "desc"))
785+
.orderBy(orderBy("bbb"));
786+
validateBuildTargetIndexCreateFullMatchIndex(query);
787+
}
788+
789+
@Test
790+
public void testBuildTargetIndexWithEqualsAndNotIn() {
791+
Query query =
792+
query("collId")
793+
.filter(filter("a", "==", 1))
794+
.filter(filter("b", "not-in", Arrays.asList(1, 2, 3)));
795+
validateBuildTargetIndexCreateFullMatchIndex(query);
796+
}
797+
798+
@Test
799+
public void testBuildTargetIndexWithInAndOrderBy() {
800+
Query query =
801+
query("collId")
802+
.filter(filter("a", "not-in", Arrays.asList(1, 2, 3)))
803+
.orderBy(orderBy("a"))
804+
.orderBy(orderBy("b"));
805+
validateBuildTargetIndexCreateFullMatchIndex(query);
806+
}
807+
808+
@Test
809+
public void testBuildTargetIndexWithInAndOrderBySameField() {
810+
Query query =
811+
query("collId").filter(filter("a", "in", Arrays.asList(1, 2, 3))).orderBy(orderBy("a"));
812+
validateBuildTargetIndexCreateFullMatchIndex(query);
813+
}
814+
815+
private void validateBuildTargetIndexCreateFullMatchIndex(Query query) {
816+
Target target = query.toTarget();
817+
TargetIndexMatcher targetIndexMatcher = new TargetIndexMatcher(target);
818+
FieldIndex expectedIndex = targetIndexMatcher.BuildTargetIndex();
819+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
820+
// Check the index created is a FULL MATCH index
821+
assertTrue(expectedIndex.getSegments().size() >= target.getSegmentCount());
822+
}
794823
}

0 commit comments

Comments
 (0)