Skip to content

Commit 776a5eb

Browse files
tighten mongoast testing by using extended format (#96)
1 parent 2bd6d04 commit 776a5eb

13 files changed

+43
-39
lines changed

src/main/java/com/mongodb/hibernate/internal/MongoConstants.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,16 @@
1616

1717
package com.mongodb.hibernate.internal;
1818

19+
import org.bson.json.JsonMode;
20+
import org.bson.json.JsonWriterSettings;
21+
1922
public final class MongoConstants {
2023

2124
private MongoConstants() {}
2225

26+
public static final JsonWriterSettings EXTENDED_JSON_WRITER_SETTINGS =
27+
JsonWriterSettings.builder().outputMode(JsonMode.EXTENDED).build();
28+
2329
public static final String MONGO_DBMS_NAME = "MongoDB";
2430
public static final String MONGO_JDBC_DRIVER_NAME = "MongoDB Java Driver JDBC Adapter";
2531
public static final String ID_FIELD_NAME = "_id";

src/main/java/com/mongodb/hibernate/internal/translate/AbstractMqlTranslator.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import static com.mongodb.hibernate.internal.MongoAssertions.assertNotNull;
2020
import static com.mongodb.hibernate.internal.MongoAssertions.assertTrue;
21+
import static com.mongodb.hibernate.internal.MongoConstants.EXTENDED_JSON_WRITER_SETTINGS;
2122
import static com.mongodb.hibernate.internal.MongoConstants.ID_FIELD_NAME;
2223
import static com.mongodb.hibernate.internal.MongoConstants.MONGO_DBMS_NAME;
2324
import static com.mongodb.hibernate.internal.translate.AstVisitorValueDescriptor.COLLECTION_AGGREGATE;
@@ -76,9 +77,7 @@
7677
import org.bson.BsonInt64;
7778
import org.bson.BsonString;
7879
import org.bson.BsonValue;
79-
import org.bson.json.JsonMode;
8080
import org.bson.json.JsonWriter;
81-
import org.bson.json.JsonWriterSettings;
8281
import org.bson.types.Decimal128;
8382
import org.hibernate.engine.spi.SessionFactoryImplementor;
8483
import org.hibernate.internal.util.collections.Stack;
@@ -178,8 +177,6 @@
178177
import org.jspecify.annotations.Nullable;
179178

180179
abstract class AbstractMqlTranslator<T extends JdbcOperation> implements SqlAstTranslator<T> {
181-
private static final JsonWriterSettings JSON_WRITER_SETTINGS =
182-
JsonWriterSettings.builder().outputMode(JsonMode.EXTENDED).build();
183180

184181
private final SessionFactoryImplementor sessionFactory;
185182

@@ -233,7 +230,7 @@ List<JdbcParameterBinder> getParameterBinders() {
233230

234231
static String renderMongoAstNode(AstNode rootAstNode) {
235232
try (var stringWriter = new StringWriter();
236-
var jsonWriter = new JsonWriter(stringWriter, JSON_WRITER_SETTINGS)) {
233+
var jsonWriter = new JsonWriter(stringWriter, EXTENDED_JSON_WRITER_SETTINGS)) {
237234
rootAstNode.render(jsonWriter);
238235
jsonWriter.flush();
239236
return stringWriter.toString();

src/test/java/com/mongodb/hibernate/internal/translate/mongoast/AstNodeAssertions.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.mongodb.hibernate.internal.translate.mongoast;
1818

19+
import static com.mongodb.hibernate.internal.MongoConstants.EXTENDED_JSON_WRITER_SETTINGS;
1920
import static org.junit.jupiter.api.Assertions.assertEquals;
2021

2122
import java.io.IOException;
@@ -26,17 +27,17 @@ public final class AstNodeAssertions {
2627

2728
private AstNodeAssertions() {}
2829

29-
public static void assertRender(String expectedJson, AstNode node) {
30-
doAssertRender(expectedJson, node, false);
30+
public static void assertRendering(String expectedJson, AstNode node) {
31+
doAssertRendering(expectedJson, node, false);
3132
}
3233

33-
public static void assertElementRender(String expectedJson, AstNode node) {
34-
doAssertRender(expectedJson, node, true);
34+
public static void assertElementRendering(String expectedJson, AstNode node) {
35+
doAssertRendering(expectedJson, node, true);
3536
}
3637

37-
private static void doAssertRender(String expectedJson, AstNode node, boolean isElement) {
38+
private static void doAssertRendering(String expectedJson, AstNode node, boolean isElement) {
3839
try (var stringWriter = new StringWriter();
39-
var jsonWriter = new JsonWriter(stringWriter)) {
40+
var jsonWriter = new JsonWriter(stringWriter, EXTENDED_JSON_WRITER_SETTINGS)) {
4041
if (isElement) {
4142
jsonWriter.writeStartDocument();
4243
}

src/test/java/com/mongodb/hibernate/internal/translate/mongoast/command/AstDeleteCommandTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.mongodb.hibernate.internal.translate.mongoast.command;
1818

19-
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRender;
19+
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRendering;
2020
import static com.mongodb.hibernate.internal.translate.mongoast.filter.AstComparisonFilterOperator.EQ;
2121

2222
import com.mongodb.hibernate.internal.translate.mongoast.AstLiteralValue;
@@ -38,9 +38,9 @@ void testRendering() {
3838

3939
var expectedJson =
4040
"""
41-
{"delete": "books", "deletes": [{"q": {"isbn": {"$eq": "978-3-16-148410-0"}}, "limit": 0}]}\
41+
{"delete": "books", "deletes": [{"q": {"isbn": {"$eq": "978-3-16-148410-0"}}, "limit": {"$numberInt": "0"}}]}\
4242
""";
4343

44-
assertRender(expectedJson, deleteCommand);
44+
assertRendering(expectedJson, deleteCommand);
4545
}
4646
}

src/test/java/com/mongodb/hibernate/internal/translate/mongoast/command/AstInsertCommandTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.mongodb.hibernate.internal.translate.mongoast.command;
1818

19-
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRender;
19+
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRendering;
2020

2121
import com.mongodb.hibernate.internal.translate.mongoast.AstDocument;
2222
import com.mongodb.hibernate.internal.translate.mongoast.AstElement;
@@ -41,8 +41,8 @@ void testRendering() {
4141

4242
var expectedJson =
4343
"""
44-
{"insert": "books", "documents": [{"title": "War and Peace", "year": 1867, "_id": {"$undefined": true}}]}\
44+
{"insert": "books", "documents": [{"title": "War and Peace", "year": {"$numberInt": "1867"}, "_id": {"$undefined": true}}]}\
4545
""";
46-
assertRender(expectedJson, insertCommand);
46+
assertRendering(expectedJson, insertCommand);
4747
}
4848
}

src/test/java/com/mongodb/hibernate/internal/translate/mongoast/command/AstUpdateCommandTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.mongodb.hibernate.internal.translate.mongoast.command;
1818

19-
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRender;
19+
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRendering;
2020

2121
import com.mongodb.hibernate.internal.translate.mongoast.AstFieldUpdate;
2222
import com.mongodb.hibernate.internal.translate.mongoast.AstLiteralValue;
@@ -48,8 +48,8 @@ void testRendering() {
4848

4949
final String expectedJson =
5050
"""
51-
{"update": "books", "updates": [{"q": {"_id": {"$eq": 12345}}, "u": {"$set": {"title": "War and Peace", "author": "Leo Tolstoy"}}, "multi": true}]}\
51+
{"update": "books", "updates": [{"q": {"_id": {"$eq": {"$numberLong": "12345"}}}, "u": {"$set": {"title": "War and Peace", "author": "Leo Tolstoy"}}, "multi": true}]}\
5252
""";
53-
assertRender(expectedJson, updateCommand);
53+
assertRendering(expectedJson, updateCommand);
5454
}
5555
}

src/test/java/com/mongodb/hibernate/internal/translate/mongoast/command/aggregate/AstAggregateCommandTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.mongodb.hibernate.internal.translate.mongoast.command.aggregate;
1818

19-
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRender;
19+
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRendering;
2020

2121
import com.mongodb.hibernate.internal.translate.mongoast.AstLiteralValue;
2222
import com.mongodb.hibernate.internal.translate.mongoast.filter.AstComparisonFilterOperation;
@@ -38,8 +38,8 @@ void testRendering() {
3838
var aggregateCommand = new AstAggregateCommand("books", List.of(matchStage, projectStage));
3939
var expectedJson =
4040
"""
41-
{"aggregate": "books", "pipeline": [{"$match": {"_id": {"$eq": 1}}}, {"$project": {"title": true}}]}\
41+
{"aggregate": "books", "pipeline": [{"$match": {"_id": {"$eq": {"$numberInt": "1"}}}}, {"$project": {"title": true}}]}\
4242
""";
43-
assertRender(expectedJson, aggregateCommand);
43+
assertRendering(expectedJson, aggregateCommand);
4444
}
4545
}

src/test/java/com/mongodb/hibernate/internal/translate/mongoast/command/aggregate/AstMatchStageTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.mongodb.hibernate.internal.translate.mongoast.command.aggregate;
1818

19-
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRender;
19+
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRendering;
2020
import static com.mongodb.hibernate.internal.translate.mongoast.filter.AstComparisonFilterOperator.EQ;
2121

2222
import com.mongodb.hibernate.internal.translate.mongoast.AstLiteralValue;
@@ -36,6 +36,6 @@ void testRendering() {
3636
var expectedJson = """
3737
{"$match": {"title": {"$eq": "Jane Eyre"}}}\
3838
""";
39-
assertRender(expectedJson, astMatchStage);
39+
assertRendering(expectedJson, astMatchStage);
4040
}
4141
}

src/test/java/com/mongodb/hibernate/internal/translate/mongoast/command/aggregate/AstProjectStageIncludeSpecificationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.mongodb.hibernate.internal.translate.mongoast.command.aggregate;
1818

19-
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertElementRender;
19+
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertElementRendering;
2020

2121
import org.junit.jupiter.api.Test;
2222

@@ -28,6 +28,6 @@ void testRendering() {
2828
var expectedJson = """
2929
{"name": true}\
3030
""";
31-
assertElementRender(expectedJson, projectStageIncludeSpecification);
31+
assertElementRendering(expectedJson, projectStageIncludeSpecification);
3232
}
3333
}

src/test/java/com/mongodb/hibernate/internal/translate/mongoast/command/aggregate/AstProjectStageTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.mongodb.hibernate.internal.translate.mongoast.command.aggregate;
1818

19-
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRender;
19+
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRendering;
2020
import static java.util.Collections.singletonList;
2121

2222
import org.junit.jupiter.api.Test;
@@ -29,6 +29,6 @@ void testRendering() {
2929
var expectedJson = """
3030
{"$project": {"title": true}}\
3131
""";
32-
assertRender(expectedJson, astProjectStage);
32+
assertRendering(expectedJson, astProjectStage);
3333
}
3434
}

src/test/java/com/mongodb/hibernate/internal/translate/mongoast/filter/AstComparisonFilterOperationTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.mongodb.hibernate.internal.translate.mongoast.filter;
1818

19-
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRender;
19+
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRendering;
2020

2121
import com.mongodb.hibernate.internal.translate.mongoast.AstLiteralValue;
2222
import org.bson.BsonInt32;
@@ -31,9 +31,9 @@ void testRendering(AstComparisonFilterOperator operator) {
3131
var operation = new AstComparisonFilterOperation(operator, new AstLiteralValue(new BsonInt32(1)));
3232

3333
var expectedJson = """
34-
{"%s": 1}\
34+
{"%s": {"$numberInt": "1"}}\
3535
"""
3636
.formatted(operator.getOperatorName());
37-
assertRender(expectedJson, operation);
37+
assertRendering(expectedJson, operation);
3838
}
3939
}

src/test/java/com/mongodb/hibernate/internal/translate/mongoast/filter/AstFieldOperationFilterTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.mongodb.hibernate.internal.translate.mongoast.filter;
1818

19-
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRender;
19+
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRendering;
2020
import static com.mongodb.hibernate.internal.translate.mongoast.filter.AstComparisonFilterOperator.EQ;
2121

2222
import com.mongodb.hibernate.internal.translate.mongoast.AstLiteralValue;
@@ -32,8 +32,8 @@ void testRendering() {
3232
"fieldName", new AstComparisonFilterOperation(EQ, new AstLiteralValue(new BsonInt32(1))));
3333

3434
var expectedJson = """
35-
{"fieldName": {"$eq": 1}}\
36-
""";
37-
assertRender(expectedJson, astFieldOperationFilter);
35+
{"fieldName": {"$eq": {"$numberInt": "1"}}}\
36+
""";
37+
assertRendering(expectedJson, astFieldOperationFilter);
3838
}
3939
}

src/test/java/com/mongodb/hibernate/internal/translate/mongoast/filter/AstLogicalFilterTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.mongodb.hibernate.internal.translate.mongoast.filter;
1818

19-
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRender;
19+
import static com.mongodb.hibernate.internal.translate.mongoast.AstNodeAssertions.assertRendering;
2020
import static com.mongodb.hibernate.internal.translate.mongoast.filter.AstComparisonFilterOperator.EQ;
2121

2222
import com.mongodb.hibernate.internal.translate.mongoast.AstLiteralValue;
@@ -41,9 +41,9 @@ void testRendering(AstLogicalFilterOperator operator) {
4141

4242
var expectedJson =
4343
"""
44-
{"%s": [{"field1": {"$eq": 1}}, {"field2": {"$eq": "1"}}]}\
44+
{"%s": [{"field1": {"$eq": {"$numberInt": "1"}}}, {"field2": {"$eq": "1"}}]}\
4545
"""
4646
.formatted(operator.getOperatorName());
47-
assertRender(expectedJson, astLogicalFilter);
47+
assertRendering(expectedJson, astLogicalFilter);
4848
}
4949
}

0 commit comments

Comments
 (0)