Skip to content

Commit

Permalink
new tests
Browse files Browse the repository at this point in the history
introduce QueryTestOptions and simplify calls
  • Loading branch information
evanchooly committed Jun 13, 2024
1 parent 2c5f0ac commit 5bd48de
Show file tree
Hide file tree
Showing 35 changed files with 161 additions and 51 deletions.
20 changes: 8 additions & 12 deletions core/src/test/java/dev/morphia/test/query/filters/FilterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

import dev.morphia.query.MorphiaQuery;
import dev.morphia.query.Query;
import dev.morphia.test.ServerVersion;
import dev.morphia.test.TemplatedTestBase;
import dev.morphia.test.aggregation.model.Martian;
import dev.morphia.test.models.User;
Expand All @@ -30,17 +29,14 @@ public FilterTest() {
.codecProvider(new ZDTCodecProvider()));
}

public void testQuery(ServerVersion serverVersion,
Function<Query<Document>, Query<Document>> function) {
testQuery(serverVersion, true, true, function);
public void testQuery(Function<Query<Document>, Query<Document>> function) {
testQuery(new QueryTestOptions(), function);
}

public void testQuery(ServerVersion serverVersion,
boolean removeIds,
boolean orderMatters,
public void testQuery(QueryTestOptions options,
Function<Query<Document>, Query<Document>> function) {

checkMinServerVersion(serverVersion);
checkMinServerVersion(options.serverVersion());
checkMinDriverVersion(minDriver);
var resourceName = discoverResourceName();
validateTestName(resourceName);
Expand All @@ -53,11 +49,11 @@ public void testQuery(ServerVersion serverVersion,
if (!skipDataCheck) {
List<Document> expected = loadExpected(resourceName);

actual = removeIds ? removeIds(actual) : actual;
expected = removeIds ? removeIds(expected) : expected;
actual = options.removeIds() ? removeIds(actual) : actual;
expected = options.removeIds() ? removeIds(expected) : expected;

try {
Comparanator.of(null, actual, expected, orderMatters).compare();
Comparanator.of(null, actual, expected, options.orderMatters()).compare();
} catch (AssertionError e) {
throw new AssertionError("%s\n\n actual: %s".formatted(e.getMessage(), toString(actual, "\n\t")),
e);
Expand All @@ -69,7 +65,7 @@ private void validateTestName(String resourceName) {
Method method = findTestMethod();
Test test = method.getAnnotation(Test.class);
assertEquals(
loadTestName(resourceName), test.testName(),
test.testName(), loadTestName(resourceName),
"%s#%s does not have a name configured on the test.".formatted(method.getDeclaringClass().getName(),
method.getName()));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package dev.morphia.test.query.filters;

import dev.morphia.test.ServerVersion;

import static dev.morphia.test.ServerVersion.ANY;

public class QueryTestOptions {
private ServerVersion serverVersion = ANY;
private boolean removeIds = false;
private boolean orderMatters = true;

public QueryTestOptions() {
serverVersion = ANY;
}

public ServerVersion serverVersion() {
return serverVersion;
}

public QueryTestOptions serverVersion(ServerVersion serverVersion) {
this.serverVersion = serverVersion;
return this;
}

public boolean removeIds() {
return removeIds;
}

public QueryTestOptions removeIds(boolean removeIds) {
this.removeIds = removeIds;
return this;
}

public boolean orderMatters() {
return orderMatters;
}

public QueryTestOptions orderMatters(boolean orderMatters) {
this.orderMatters = orderMatters;
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

import java.util.List;

import dev.morphia.test.ServerVersion;

import org.testng.annotations.Test;

import static dev.morphia.query.filters.Filters.all;
Expand All @@ -14,12 +12,12 @@
public class TestAll extends FilterTest {
@Test(testName = "Use ``$all`` to Match Values")
public void testExample1() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(all("tags", List.of("appliance", "school", "book"))));
testQuery((query) -> query.filter(all("tags", List.of("appliance", "school", "book"))));
}

@Test(testName = "Use ``$all`` with ``$elemMatch``")
public void testExample2() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(all("qty",
testQuery((query) -> query.filter(all("qty",
List.of(elemMatch(eq("size", "M"), gt("num", 50)),
elemMatch(eq("num", 100), eq("color", "green"))))));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,25 @@
package dev.morphia.test.query.filters;

import dev.morphia.test.ServerVersion;

import org.testng.annotations.Test;

import static dev.morphia.query.filters.Filters.bitsAllClear;

public class TestBitsAllClear extends FilterTest {
@Test(testName = "Bit Position Array")
public void testExample1() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
bitsAllClear("a", new int[] { 1, 5 })));
}

@Test(testName = "Integer Bitmask")
public void testExample2() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
bitsAllClear("a", 35)));
}

@Test(testName = "BinData Bitmask")
public void testExample3() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
bitsAllClear("a", new byte[] { 32 })));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,25 @@
package dev.morphia.test.query.filters;

import dev.morphia.test.ServerVersion;

import org.testng.annotations.Test;

import static dev.morphia.query.filters.Filters.bitsAllSet;

public class TestBitsAllSet extends FilterTest {
@Test(testName = "Bit Position Array")
public void testExample1() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
bitsAllSet("a", new int[] { 1, 5 })));
}

@Test(testName = "Integer Bitmask")
public void testExample2() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
bitsAllSet("a", 50)));
}

@Test(testName = "BinData Bitmask")
public void testExample3() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
bitsAllSet("a", new byte[] { 48 })));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,25 @@
package dev.morphia.test.query.filters;

import dev.morphia.test.ServerVersion;

import org.testng.annotations.Test;

import static dev.morphia.query.filters.Filters.bitsAnyClear;

public class TestBitsAnyClear extends FilterTest {
@Test(testName = "Bit Position Array")
public void testExample1() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
bitsAnyClear("a", new int[] { 1, 5 })));
}

@Test(testName = "Integer Bitmask")
public void testExample2() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
bitsAnyClear("a", 35)));
}

@Test(testName = "BinData Bitmask")
public void testExample3() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
bitsAnyClear("a", new byte[] { 48 })));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,25 @@
package dev.morphia.test.query.filters;

import dev.morphia.test.ServerVersion;

import org.testng.annotations.Test;

import static dev.morphia.query.filters.Filters.bitsAnySet;

public class TestBitsAnySet extends FilterTest {
@Test(testName = "Bit Position Array")
public void testExample1() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
bitsAnySet("a", new int[] { 1, 5 })));
}

@Test(testName = "Integer Bitmask")
public void testExample2() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
bitsAnySet("a", 35)));
}

@Test(testName = "BinData Bitmask")
public void testExample3() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
bitsAnySet("a", new byte[] { 48 })));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package dev.morphia.test.query.filters;

import dev.morphia.test.ServerVersion;

import org.testng.annotations.Test;

import static dev.morphia.query.filters.Filters.elemMatch;
Expand All @@ -12,19 +10,19 @@
public class TestElemMatch extends FilterTest {
@Test(testName = "Element Match")
public void testExample1() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
elemMatch("results", gte(80), lt(85))));
}

@Test(testName = "Array of Embedded Documents")
public void testExample2() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
elemMatch("results", eq("product", "xyz"), gte("score", 8))));
}

@Test(testName = "Single Query Condition")
public void testExample3() {
testQuery(ServerVersion.ANY, false, true, (query) -> query.filter(
testQuery((query) -> query.filter(
elemMatch("results", eq("product", "xyz"))));
}

Expand Down
43 changes: 43 additions & 0 deletions core/src/test/java/dev/morphia/test/query/filters/TestEq.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package dev.morphia.test.query.filters;

import java.util.List;
import java.util.regex.Pattern;

import org.testng.annotations.Test;

import static dev.morphia.query.filters.Filters.eq;

public class TestEq extends FilterTest {
@Test(testName = "Equals a Specified Value")
public void testExample1() {
testQuery((query) -> query.filter(
eq("qty", 20)));
}

@Test(testName = "Field in Embedded Document Equals a Value")
public void testExample2() {
testQuery((query) -> query.filter(
eq("item.name", "ab")));
}

@Test(testName = "Array Element Equals a Value")
public void testExample3() {
testQuery((query) -> query.filter(
eq("tags", "B")));
}

@Test(testName = "Equals an Array Value")
public void testExample4() {
testQuery((query) -> query.filter(
eq("tags", List.of("A", "B"))

));
}

@Test(testName = "Regex Match Behaviour")
public void testExample5() {
testQuery(new QueryTestOptions().removeIds(true), (query) -> query.filter(
eq("company", Pattern.compile("MongoDB"))));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
db.inventory.find( { qty: 20 } )
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] },
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] },
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] },
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] },
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] },
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
update action to use shortened version of $eq
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Equals a Specified Value
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
db.inventory.find( { "item.name": "ab" } )
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] },
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] },
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] },
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] },
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[ { _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] } ]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
update action to use shortened version of $eq
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Field in Embedded Document Equals a Value
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
db.inventory.find( { tags: "B" } )
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] },
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] },
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] },
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] },
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] },
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] },
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] },
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] }
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
update action to use shortened version of $eq
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Array Element Equals a Value
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
db.inventory.find( { tags: [ "A", "B" ] } )
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] },
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] },
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] },
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] },
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] },
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
update action to use shortened version of $eq
Loading

0 comments on commit 5bd48de

Please sign in to comment.