|
56 | 56 | import com.phonepe.mustang.detail.impl.EqualSetDetail; |
57 | 57 | import com.phonepe.mustang.detail.impl.EqualityDetail; |
58 | 58 | import com.phonepe.mustang.detail.impl.ExistenceDetail; |
| 59 | +import com.phonepe.mustang.detail.impl.IntersectionDetail; |
59 | 60 | import com.phonepe.mustang.detail.impl.NonExistenceDetail; |
60 | 61 | import com.phonepe.mustang.detail.impl.RangeDetail; |
61 | 62 | import com.phonepe.mustang.detail.impl.RegexDetail; |
@@ -6521,4 +6522,181 @@ public void testDNFMultiValueMultiEclipsingNeutralised() throws JsonProcessingEx |
6521 | 6522 | assertThat(ratificationResult.getAnamolyDetails(), is(empty())); |
6522 | 6523 | } |
6523 | 6524 |
|
| 6525 | + @Test |
| 6526 | + public void testDNFPositiveIntersectionMatch() throws Exception { |
| 6527 | + Criteria c1 = DNFCriteria.builder() |
| 6528 | + .id("C1") |
| 6529 | + .conjunction(Conjunction.builder() |
| 6530 | + .predicate(IncludedPredicate.builder() |
| 6531 | + .lhs("$.a") |
| 6532 | + .detail(IntersectionDetail.builder() |
| 6533 | + .values(Sets.newHashSet("A1", "A2")) |
| 6534 | + .build()) |
| 6535 | + .build()) |
| 6536 | + .build()) |
| 6537 | + .build(); |
| 6538 | + Criteria c2 = DNFCriteria.builder() |
| 6539 | + .id("C2") |
| 6540 | + .conjunction(Conjunction.builder() |
| 6541 | + .predicate(IncludedPredicate.builder() |
| 6542 | + .lhs("$.a") |
| 6543 | + .detail(IntersectionDetail.builder() |
| 6544 | + .values(Sets.newHashSet("A4", "A5")) |
| 6545 | + .build()) |
| 6546 | + .build()) |
| 6547 | + .build()) |
| 6548 | + .build(); |
| 6549 | + Map<String, Object> testQuery = Maps.newHashMap(); |
| 6550 | + testQuery.put("a", Lists.newArrayList("A2", "A3")); |
| 6551 | + |
| 6552 | + engine.add("test", c1); |
| 6553 | + engine.add("test", c2); |
| 6554 | + final Set<String> searchResults = engine.search("test", RequestContext.builder() |
| 6555 | + .node(mapper.valueToTree(testQuery)) |
| 6556 | + .build()); |
| 6557 | + assertThat(searchResults, hasSize(1)); |
| 6558 | + assertThat(searchResults, contains("C1")); |
| 6559 | + |
| 6560 | + engine.ratify("test"); |
| 6561 | + final RatificationResult ratificationResult = engine.getRatificationResult("test"); |
| 6562 | + assertThat(ratificationResult.getStatus(), is(true)); |
| 6563 | + assertThat(ratificationResult.getAnamolyDetails(), is(empty())); |
| 6564 | + } |
| 6565 | + |
| 6566 | + @Test |
| 6567 | + public void testDNFNoIntersectionMatch() throws Exception { |
| 6568 | + Criteria c1 = DNFCriteria.builder() |
| 6569 | + .id("C1") |
| 6570 | + .conjunction(Conjunction.builder() |
| 6571 | + .predicate(IncludedPredicate.builder() |
| 6572 | + .lhs("$.a") |
| 6573 | + .detail(IntersectionDetail.builder() |
| 6574 | + .values(Sets.newHashSet("A1", "A2")) |
| 6575 | + .build()) |
| 6576 | + .build()) |
| 6577 | + .build()) |
| 6578 | + .build(); |
| 6579 | + Map<String, Object> testQuery = Maps.newHashMap(); |
| 6580 | + testQuery.put("a", Lists.newArrayList("A8", "A9")); |
| 6581 | + |
| 6582 | + engine.add("test", c1); |
| 6583 | + final Set<String> searchResults = engine.search("test", RequestContext.builder() |
| 6584 | + .node(mapper.valueToTree(testQuery)) |
| 6585 | + .build()); |
| 6586 | + assertThat(searchResults, is(empty())); |
| 6587 | + |
| 6588 | + engine.ratify("test"); |
| 6589 | + final RatificationResult ratificationResult = engine.getRatificationResult("test"); |
| 6590 | + assertThat(ratificationResult.getStatus(), is(true)); |
| 6591 | + assertThat(ratificationResult.getAnamolyDetails(), is(empty())); |
| 6592 | + } |
| 6593 | + |
| 6594 | + @Test |
| 6595 | + public void testDNFIntersectionWithNonCollectionQuery() throws Exception { |
| 6596 | + // When the query value is not a collection, intersection never matches. |
| 6597 | + Criteria c1 = DNFCriteria.builder() |
| 6598 | + .id("C1") |
| 6599 | + .conjunction(Conjunction.builder() |
| 6600 | + .predicate(IncludedPredicate.builder() |
| 6601 | + .lhs("$.a") |
| 6602 | + .detail(IntersectionDetail.builder() |
| 6603 | + .values(Sets.newHashSet("A1", "A2")) |
| 6604 | + .build()) |
| 6605 | + .build()) |
| 6606 | + .build()) |
| 6607 | + .build(); |
| 6608 | + Map<String, Object> testQuery = Maps.newHashMap(); |
| 6609 | + testQuery.put("a", "A1"); |
| 6610 | + |
| 6611 | + engine.add("test", c1); |
| 6612 | + final Set<String> searchResults = engine.search("test", RequestContext.builder() |
| 6613 | + .node(mapper.valueToTree(testQuery)) |
| 6614 | + .build()); |
| 6615 | + assertThat(searchResults, is(empty())); |
| 6616 | + |
| 6617 | + engine.ratify("test"); |
| 6618 | + final RatificationResult ratificationResult = engine.getRatificationResult("test"); |
| 6619 | + assertThat(ratificationResult.getStatus(), is(true)); |
| 6620 | + assertThat(ratificationResult.getAnamolyDetails(), is(empty())); |
| 6621 | + } |
| 6622 | + |
| 6623 | + @Test |
| 6624 | + public void testCNFPositiveIntersectionMatch() throws Exception { |
| 6625 | + Criteria c1 = CNFCriteria.builder() |
| 6626 | + .id("C1") |
| 6627 | + .disjunction(Disjunction.builder() |
| 6628 | + .predicate(IncludedPredicate.builder() |
| 6629 | + .lhs("$.a") |
| 6630 | + .detail(IntersectionDetail.builder() |
| 6631 | + .values(Sets.newHashSet("A1", "A2")) |
| 6632 | + .build()) |
| 6633 | + .build()) |
| 6634 | + .build()) |
| 6635 | + .disjunction(Disjunction.builder() |
| 6636 | + .predicate(IncludedPredicate.builder() |
| 6637 | + .lhs("$.b") |
| 6638 | + .detail(IntersectionDetail.builder() |
| 6639 | + .values(Sets.newHashSet("B1", "B2")) |
| 6640 | + .build()) |
| 6641 | + .build()) |
| 6642 | + .build()) |
| 6643 | + .build(); |
| 6644 | + Criteria c2 = CNFCriteria.builder() |
| 6645 | + .id("C2") |
| 6646 | + .disjunction(Disjunction.builder() |
| 6647 | + .predicate(IncludedPredicate.builder() |
| 6648 | + .lhs("$.b") |
| 6649 | + .detail(IntersectionDetail.builder() |
| 6650 | + .values(Sets.newHashSet("B8", "B9")) |
| 6651 | + .build()) |
| 6652 | + .build()) |
| 6653 | + .build()) |
| 6654 | + .build(); |
| 6655 | + Map<String, Object> testQuery = Maps.newHashMap(); |
| 6656 | + testQuery.put("a", Lists.newArrayList("A2", "A3")); |
| 6657 | + testQuery.put("b", Lists.newArrayList("B2", "B3")); |
| 6658 | + |
| 6659 | + engine.add("test", c1); |
| 6660 | + engine.add("test", c2); |
| 6661 | + final Set<String> searchResults = engine.search("test", RequestContext.builder() |
| 6662 | + .node(mapper.valueToTree(testQuery)) |
| 6663 | + .build()); |
| 6664 | + assertThat(searchResults, hasSize(1)); |
| 6665 | + assertThat(searchResults, contains("C1")); |
| 6666 | + |
| 6667 | + engine.ratify("test"); |
| 6668 | + final RatificationResult ratificationResult = engine.getRatificationResult("test"); |
| 6669 | + assertThat(ratificationResult.getStatus(), is(true)); |
| 6670 | + assertThat(ratificationResult.getAnamolyDetails(), is(empty())); |
| 6671 | + } |
| 6672 | + |
| 6673 | + @Test |
| 6674 | + public void testDNFIntegerIntersectionMatch() throws Exception { |
| 6675 | + Criteria c1 = DNFCriteria.builder() |
| 6676 | + .id("C1") |
| 6677 | + .conjunction(Conjunction.builder() |
| 6678 | + .predicate(IncludedPredicate.builder() |
| 6679 | + .lhs("$.a") |
| 6680 | + .detail(IntersectionDetail.builder() |
| 6681 | + .values(Sets.newHashSet(1, 2, 3)) |
| 6682 | + .build()) |
| 6683 | + .build()) |
| 6684 | + .build()) |
| 6685 | + .build(); |
| 6686 | + Map<String, Object> testQuery = Maps.newHashMap(); |
| 6687 | + testQuery.put("a", Lists.newArrayList(3, 4, 5)); |
| 6688 | + |
| 6689 | + engine.add("test", c1); |
| 6690 | + final Set<String> searchResults = engine.search("test", RequestContext.builder() |
| 6691 | + .node(mapper.valueToTree(testQuery)) |
| 6692 | + .build()); |
| 6693 | + assertThat(searchResults, hasSize(1)); |
| 6694 | + assertThat(searchResults, contains("C1")); |
| 6695 | + |
| 6696 | + engine.ratify("test"); |
| 6697 | + final RatificationResult ratificationResult = engine.getRatificationResult("test"); |
| 6698 | + assertThat(ratificationResult.getStatus(), is(true)); |
| 6699 | + assertThat(ratificationResult.getAnamolyDetails(), is(empty())); |
| 6700 | + } |
| 6701 | + |
6524 | 6702 | } |
0 commit comments