Skip to content

Commit

Permalink
add integration test (#183)
Browse files Browse the repository at this point in the history
Co-authored-by: Srikar Mannepalli <[email protected]>
  • Loading branch information
SrikarMannepalli and Srikar Mannepalli authored Nov 8, 2023
1 parent 5822f1a commit 5f58106
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@
import org.hypertrace.core.documentstore.expression.impl.LogicalExpression;
import org.hypertrace.core.documentstore.expression.impl.RelationalExpression;
import org.hypertrace.core.documentstore.expression.impl.UnnestExpression;
import org.hypertrace.core.documentstore.expression.type.FilterTypeExpression;
import org.hypertrace.core.documentstore.model.options.UpdateOptions;
import org.hypertrace.core.documentstore.model.subdoc.SubDocumentUpdate;
import org.hypertrace.core.documentstore.model.subdoc.SubDocumentValue;
Expand Down Expand Up @@ -822,6 +823,53 @@ public void testAggregateWithFunctionalLeftHandSideFilter(final String dataStore
testCountApi(dataStoreName, query, "query/test_functional_lhs_in_filter_response.json");
}

@ParameterizedTest
@ArgumentsSource(AllProvider.class)
void testAggregateWithNestedArraysAndUnnestFilters(final String dataStoreName)
throws IOException {
final Datastore datastore = datastoreMap.get(dataStoreName);
final Collection collection = datastore.getCollection(COLLECTION_NAME);
final FilterTypeExpression filter =
LogicalExpression.builder()
.operator(AND)
.operand(
RelationalExpression.of(
IdentifierExpression.of("sales.medium.type"),
EQ,
ConstantExpression.of("distributionChannel")))
.operand(
RelationalExpression.of(
IdentifierExpression.of("price"), LT, ConstantExpression.of(20)))
.build();
final Query query =
Query.builder()
.setSelections(
List.of(
SelectionSpec.of(IdentifierExpression.of("item")),
SelectionSpec.of(IdentifierExpression.of("sales.city")),
SelectionSpec.of(IdentifierExpression.of("price")),
SelectionSpec.of(IdentifierExpression.of("sales.medium.type")),
SelectionSpec.of(IdentifierExpression.of("sales.medium.volume"))))
.setFilter(filter)
.addFromClauses(
List.of(
UnnestExpression.builder()
.preserveNullAndEmptyArrays(false)
.identifierExpression(IdentifierExpression.of("sales"))
.filterTypeExpression(filter)
.build(),
UnnestExpression.builder()
.preserveNullAndEmptyArrays(false)
.identifierExpression(IdentifierExpression.of("sales.medium"))
.filterTypeExpression(filter)
.build()))
.build();

final Iterator<Document> resultDocs = collection.aggregate(query);
assertDocsAndSizeEqual(
dataStoreName, resultDocs, "query/test_aggr_nested_arrays_and_unnest_filters.json", 4);
}

@ParameterizedTest
@ArgumentsSource(AllProvider.class)
public void testFindWithFunctionalLeftHandSideFilter(final String dataStoreName)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
[
{
"item": "Soap",
"price": 10,
"sales": {
"city": "delhi",
"medium": {
"type": "distributionChannel",
"volume": 1000
}
}
},
{
"item": "Soap",
"price": 10,
"sales": {
"city": "pune",
"medium": {
"type": "distributionChannel",
"volume": 300
}
}
},
{
"item": "Shampoo",
"price": 5,
"sales": {
"city": "delhi",
"medium": {
"type": "distributionChannel",
"volume": 3000
}
}
},
{
"item": "Shampoo",
"price": 5,
"sales": {
"city": "mumbai",
"medium": {
"type": "distributionChannel",
"volume": 700
}
}
}
]

0 comments on commit 5f58106

Please sign in to comment.