From b35db12876c0904fa54e83ca1b0a20a0d1c6b17e Mon Sep 17 00:00:00 2001 From: vladislav_shelengovskiy Date: Wed, 20 Oct 2021 21:53:46 +1000 Subject: [PATCH] Add fix, also fix regexp cast for non string fields --- pom.xml | 2 +- .../expect/match/smart/regexp/MatchRegExp.java | 2 +- .../mongo/internal/exportdata/MongoDataExport.java | 14 +++++++++++--- .../exportdata/scanner/CaseInsensitiveMap.java | 5 +++++ .../exportdata/scanner/DocumentClasses.java | 4 ++++ .../test/mongo/internal/MongoDbTestExpectedIT.java | 12 +++++++++++- .../mongo/junit4/MongoDbRuleExportDataSetIT.java | 3 +++ .../internal/expect/number_field_regex.json | 7 +++++++ 8 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 src/test/resources/dataset/internal/expect/number_field_regex.json diff --git a/pom.xml b/pom.xml index 60c5428..b9e4c79 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.jupiter-tools spring-test-mongo - 0.15 + 0.16 jar spring-test-mongo diff --git a/src/main/java/com/jupiter/tools/spring/test/mongo/internal/expect/match/smart/regexp/MatchRegExp.java b/src/main/java/com/jupiter/tools/spring/test/mongo/internal/expect/match/smart/regexp/MatchRegExp.java index 13bc67c..263e65f 100644 --- a/src/main/java/com/jupiter/tools/spring/test/mongo/internal/expect/match/smart/regexp/MatchRegExp.java +++ b/src/main/java/com/jupiter/tools/spring/test/mongo/internal/expect/match/smart/regexp/MatchRegExp.java @@ -20,7 +20,7 @@ public boolean match(Object originValue, Object comparableValue) { String cmpValue = (String) comparableValue; cmpValue = cmpValue.replaceFirst("regex:", "").trim(); Pattern pattern = Pattern.compile(cmpValue); - Matcher matcher = pattern.matcher((String) originValue); + Matcher matcher = pattern.matcher(originValue.toString()); return matcher.matches(); } diff --git a/src/main/java/com/jupiter/tools/spring/test/mongo/internal/exportdata/MongoDataExport.java b/src/main/java/com/jupiter/tools/spring/test/mongo/internal/exportdata/MongoDataExport.java index 9abd6eb..dba7efb 100644 --- a/src/main/java/com/jupiter/tools/spring/test/mongo/internal/exportdata/MongoDataExport.java +++ b/src/main/java/com/jupiter/tools/spring/test/mongo/internal/exportdata/MongoDataExport.java @@ -6,6 +6,8 @@ import com.jupiter.tools.spring.test.mongo.internal.DataSet; import com.jupiter.tools.spring.test.mongo.internal.exportdata.scanner.DocumentClasses; import com.jupiter.tools.spring.test.mongo.internal.geo.GeoJsonSerializationModule; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.data.mongodb.core.MongoTemplate; import java.util.HashMap; @@ -25,6 +27,7 @@ public class MongoDataExport implements DataSet { private final MongoTemplate mongoTemplate; private final ObjectMapper objectMapper; private final DocumentClasses documentClasses; + private final Logger log = LoggerFactory.getLogger(MongoDataExport.class); public MongoDataExport(MongoTemplate mongoTemplate, DocumentClasses documentClasses) { Guard.check(mongoTemplate != null, InternalException.class, MONGO_TEMPLATE_IS_MANDATORY); @@ -40,10 +43,15 @@ public Map>> read() { Map>> map = new HashMap<>(); for (String name : mongoTemplate.getCollectionNames()) { - List> dataSet = getDataSet(name); + if (documentClasses.hasCollection(name)) { - if (!dataSet.isEmpty()) - map.put(documentClasses.getDocumentClassName(name), dataSet); + List> dataSet = getDataSet(name); + + if (dataSet != null) + map.put(documentClasses.getDocumentClassName(name), dataSet); + } else { + log.warn("Not found document class for collection {}", name); + } } return map; diff --git a/src/main/java/com/jupiter/tools/spring/test/mongo/internal/exportdata/scanner/CaseInsensitiveMap.java b/src/main/java/com/jupiter/tools/spring/test/mongo/internal/exportdata/scanner/CaseInsensitiveMap.java index 3c297ce..d6fec7b 100644 --- a/src/main/java/com/jupiter/tools/spring/test/mongo/internal/exportdata/scanner/CaseInsensitiveMap.java +++ b/src/main/java/com/jupiter/tools/spring/test/mongo/internal/exportdata/scanner/CaseInsensitiveMap.java @@ -23,4 +23,9 @@ public Class put(String key, Class value) { public Class get(Object key) { return super.get(((String) key).toLowerCase()); } + + @Override + public boolean containsKey(Object key) { + return super.containsKey(((String) key).toLowerCase()); + } } \ No newline at end of file diff --git a/src/main/java/com/jupiter/tools/spring/test/mongo/internal/exportdata/scanner/DocumentClasses.java b/src/main/java/com/jupiter/tools/spring/test/mongo/internal/exportdata/scanner/DocumentClasses.java index ce8c197..f67d0da 100644 --- a/src/main/java/com/jupiter/tools/spring/test/mongo/internal/exportdata/scanner/DocumentClasses.java +++ b/src/main/java/com/jupiter/tools/spring/test/mongo/internal/exportdata/scanner/DocumentClasses.java @@ -24,4 +24,8 @@ public Class getDocumentClass(String collectionName) { public String getDocumentClassName(String collectionName) { return documents.get(collectionName).getCanonicalName(); } + + public boolean hasCollection(String collectionName) { + return documents.containsKey(collectionName); + } } diff --git a/src/test/java/com/jupiter/tools/spring/test/mongo/internal/MongoDbTestExpectedIT.java b/src/test/java/com/jupiter/tools/spring/test/mongo/internal/MongoDbTestExpectedIT.java index f63d048..e92424f 100644 --- a/src/test/java/com/jupiter/tools/spring/test/mongo/internal/MongoDbTestExpectedIT.java +++ b/src/test/java/com/jupiter/tools/spring/test/mongo/internal/MongoDbTestExpectedIT.java @@ -87,7 +87,7 @@ void testWithEmptyDataBaseAndNotEmptyDataSet() { Error error = Assertions.assertThrows(Error.class, () -> { new MongoDbTest(mongoTemplate).expect("/dataset/internal/expected_dataset.json"); }); - assertThat(error.getMessage()).contains("Not equal document collections"); + assertThat(error.getMessage()).contains("expected 2 but found 0 - com.jupiter.tools.spring.test.mongo.Bar entities"); } @Test @@ -235,6 +235,16 @@ void multipleRegexp() { // Act new MongoDbTest(mongoTemplate).expect("/dataset/internal/expect/multiple_regex.json"); } + + @Test + @MongoDataSet(cleanBefore = true, cleanAfter = true) + void numberFieldRegexp() { + // Arrange + Foo foo = new Foo("1", new Date(), 1); + mongoTemplate.save(foo); + // Act + new MongoDbTest(mongoTemplate).expect("/dataset/internal/expect/number_field_regex.json"); + } } @Nested diff --git a/src/test/java/com/jupiter/tools/spring/test/mongo/junit4/MongoDbRuleExportDataSetIT.java b/src/test/java/com/jupiter/tools/spring/test/mongo/junit4/MongoDbRuleExportDataSetIT.java index fae0150..c427b91 100644 --- a/src/test/java/com/jupiter/tools/spring/test/mongo/junit4/MongoDbRuleExportDataSetIT.java +++ b/src/test/java/com/jupiter/tools/spring/test/mongo/junit4/MongoDbRuleExportDataSetIT.java @@ -8,7 +8,9 @@ import java.nio.file.Files; import com.jupiter.tools.spring.test.mongo.annotation.ExportMongoDataSet; +import com.jupiter.tools.spring.test.mongo.annotation.MongoDataSet; import com.jupiter.tools.spring.test.mongo.internal.MongoDbTest; +import lombok.Data; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.junit.ClassRule; @@ -62,6 +64,7 @@ private String getExpectedJson() throws IOException { }; @Test + @MongoDataSet(cleanBefore = true, cleanAfter = true) @ExportMongoDataSet(outputFile = OUTPUT_FILE_NAME) public void testExportDataSet() throws Exception { new MongoDbTest(mongoTemplate).importFrom(INPUT_DATA_SET_FILE); diff --git a/src/test/resources/dataset/internal/expect/number_field_regex.json b/src/test/resources/dataset/internal/expect/number_field_regex.json new file mode 100644 index 0000000..e6e2195 --- /dev/null +++ b/src/test/resources/dataset/internal/expect/number_field_regex.json @@ -0,0 +1,7 @@ +{ + "com.jupiter.tools.spring.test.mongo.Foo": [ + { + "counter": "regex:.+" + } + ] +} \ No newline at end of file