Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
- Nitrite now supports JPMS. It is now modular and can be used in Java 9 or above.
- Version upgrade for several dependencies

### Issue Fixes

- Fix for #935

## Release 4.2.2 - Mar 5, 2024

### Issue Fixes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,183 +17,24 @@

package org.dizitart.no2.common.mapper;

import com.fasterxml.jackson.databind.DeserializationConfig;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.cfg.ContextAttributes;
import com.fasterxml.jackson.databind.introspect.VisibilityChecker;
import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.BinaryNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import org.dizitart.no2.NitriteConfig;
import org.dizitart.no2.common.mapper.modules.NitriteIdModule;
import org.dizitart.no2.exceptions.ObjectMappingException;
import org.junit.Test;

import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.text.DateFormat;

import static org.junit.Assert.*;

public class JacksonMapperTest {
@Test
public void testConstructor() {
ObjectMapper objectMapper = (new JacksonMapper()).getObjectMapper();
PolymorphicTypeValidator polymorphicTypeValidator = objectMapper.getPolymorphicTypeValidator();
assertTrue(polymorphicTypeValidator instanceof LaissezFaireSubTypeValidator);
VisibilityChecker<?> visibilityChecker = objectMapper.getVisibilityChecker();
assertTrue(visibilityChecker instanceof VisibilityChecker.Std);
assertNull(objectMapper.getPropertyNamingStrategy());
assertTrue(objectMapper
.getDeserializationContext() instanceof com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.Impl);
assertSame(objectMapper.getFactory(), objectMapper.getJsonFactory());
assertTrue(objectMapper.getSerializerFactory() instanceof com.fasterxml.jackson.databind.ser.BeanSerializerFactory);
assertTrue(objectMapper
.getSerializerProvider() instanceof com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.Impl);
assertTrue(objectMapper
.getSerializerProviderInstance() instanceof com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.Impl);
assertTrue(
objectMapper.getSubtypeResolver() instanceof com.fasterxml.jackson.databind.jsontype.impl.StdSubtypeResolver);
DeserializationConfig deserializationConfig = objectMapper.getDeserializationConfig();
assertTrue(deserializationConfig
.getAnnotationIntrospector() instanceof com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector);
assertNull(deserializationConfig.getActiveView());
assertNull(deserializationConfig.getHandlerInstantiator());
assertSame(visibilityChecker, deserializationConfig.getDefaultVisibilityChecker());
assertTrue(deserializationConfig
.getClassIntrospector() instanceof com.fasterxml.jackson.databind.introspect.BasicClassIntrospector);
DateFormat expectedDateFormat = objectMapper.getDateFormat();
assertSame(expectedDateFormat, deserializationConfig.getDateFormat());
assertNull(deserializationConfig.getFullRootName());
JsonNodeFactory expectedNodeFactory = objectMapper.getNodeFactory();
assertSame(expectedNodeFactory, deserializationConfig.getNodeFactory());
assertSame(polymorphicTypeValidator, deserializationConfig.getPolymorphicTypeValidator());
assertNull(deserializationConfig.getDefaultMergeable());
assertEquals(237020288, deserializationConfig.getDeserializationFeatures());
assertTrue(deserializationConfig.getAttributes() instanceof ContextAttributes.Impl);
}

@Test
public void testConstructor2() {
NitriteIdModule nitriteIdModule = new NitriteIdModule();
NitriteIdModule nitriteIdModule1 = new NitriteIdModule();
JacksonMapper jacksonMapper = new JacksonMapper();
jacksonMapper.registerJacksonModule(nitriteIdModule);
jacksonMapper.registerJacksonModule(nitriteIdModule1);
jacksonMapper.registerJacksonModule(new NitriteIdModule());
ObjectMapper objectMapper = jacksonMapper.getObjectMapper();
PolymorphicTypeValidator polymorphicTypeValidator = objectMapper.getPolymorphicTypeValidator();
assertTrue(polymorphicTypeValidator instanceof LaissezFaireSubTypeValidator);
VisibilityChecker<?> visibilityChecker = objectMapper.getVisibilityChecker();
assertTrue(visibilityChecker instanceof VisibilityChecker.Std);
assertNull(objectMapper.getPropertyNamingStrategy());
assertTrue(objectMapper
.getDeserializationContext() instanceof com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.Impl);
assertSame(objectMapper.getFactory(), objectMapper.getJsonFactory());
assertTrue(objectMapper.getSerializerFactory() instanceof com.fasterxml.jackson.databind.ser.BeanSerializerFactory);
assertTrue(objectMapper
.getSerializerProvider() instanceof com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.Impl);
assertTrue(objectMapper
.getSerializerProviderInstance() instanceof com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.Impl);
assertTrue(
objectMapper.getSubtypeResolver() instanceof com.fasterxml.jackson.databind.jsontype.impl.StdSubtypeResolver);
DeserializationConfig deserializationConfig = objectMapper.getDeserializationConfig();
assertTrue(deserializationConfig
.getAnnotationIntrospector() instanceof com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector);
assertNull(deserializationConfig.getActiveView());
assertNull(deserializationConfig.getHandlerInstantiator());
assertSame(visibilityChecker, deserializationConfig.getDefaultVisibilityChecker());
assertTrue(deserializationConfig
.getClassIntrospector() instanceof com.fasterxml.jackson.databind.introspect.BasicClassIntrospector);
DateFormat expectedDateFormat = objectMapper.getDateFormat();
assertSame(expectedDateFormat, deserializationConfig.getDateFormat());
assertNull(deserializationConfig.getFullRootName());
JsonNodeFactory expectedNodeFactory = objectMapper.getNodeFactory();
assertSame(expectedNodeFactory, deserializationConfig.getNodeFactory());
assertSame(polymorphicTypeValidator, deserializationConfig.getPolymorphicTypeValidator());
assertNull(deserializationConfig.getDefaultMergeable());
assertEquals(237020288, deserializationConfig.getDeserializationFeatures());
assertTrue(deserializationConfig.getAttributes() instanceof ContextAttributes.Impl);
}

@Test
public void testConstructor3() {
JacksonMapper jacksonMapper = new JacksonMapper();
jacksonMapper.registerJacksonModule(new NitriteIdModule());
ObjectMapper objectMapper = jacksonMapper.getObjectMapper();
PolymorphicTypeValidator polymorphicTypeValidator = objectMapper.getPolymorphicTypeValidator();
assertTrue(polymorphicTypeValidator instanceof LaissezFaireSubTypeValidator);
VisibilityChecker<?> visibilityChecker = objectMapper.getVisibilityChecker();
assertTrue(visibilityChecker instanceof VisibilityChecker.Std);
assertNull(objectMapper.getPropertyNamingStrategy());
assertTrue(objectMapper
.getDeserializationContext() instanceof com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.Impl);
assertSame(objectMapper.getFactory(), objectMapper.getJsonFactory());
assertTrue(objectMapper.getSerializerFactory() instanceof com.fasterxml.jackson.databind.ser.BeanSerializerFactory);
assertTrue(objectMapper
.getSerializerProvider() instanceof com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.Impl);
assertTrue(objectMapper
.getSerializerProviderInstance() instanceof com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.Impl);
assertTrue(
objectMapper.getSubtypeResolver() instanceof com.fasterxml.jackson.databind.jsontype.impl.StdSubtypeResolver);
DeserializationConfig deserializationConfig = objectMapper.getDeserializationConfig();
assertTrue(deserializationConfig
.getAnnotationIntrospector() instanceof com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector);
assertNull(deserializationConfig.getActiveView());
assertNull(deserializationConfig.getHandlerInstantiator());
assertSame(visibilityChecker, deserializationConfig.getDefaultVisibilityChecker());
assertTrue(deserializationConfig
.getClassIntrospector() instanceof com.fasterxml.jackson.databind.introspect.BasicClassIntrospector);
DateFormat expectedDateFormat = objectMapper.getDateFormat();
assertSame(expectedDateFormat, deserializationConfig.getDateFormat());
assertNull(deserializationConfig.getFullRootName());
JsonNodeFactory expectedNodeFactory = objectMapper.getNodeFactory();
assertSame(expectedNodeFactory, deserializationConfig.getNodeFactory());
assertSame(polymorphicTypeValidator, deserializationConfig.getPolymorphicTypeValidator());
assertNull(deserializationConfig.getDefaultMergeable());
assertEquals(237020288, deserializationConfig.getDeserializationFeatures());
assertTrue(deserializationConfig.getAttributes() instanceof ContextAttributes.Impl);
}

@Test
public void testGetObjectMapper() {
ObjectMapper actualCreateObjectMapperResult = (new JacksonMapper()).getObjectMapper();
PolymorphicTypeValidator polymorphicTypeValidator = actualCreateObjectMapperResult.getPolymorphicTypeValidator();
assertTrue(polymorphicTypeValidator instanceof LaissezFaireSubTypeValidator);
VisibilityChecker<?> visibilityChecker = actualCreateObjectMapperResult.getVisibilityChecker();
assertTrue(visibilityChecker instanceof VisibilityChecker.Std);
assertNull(actualCreateObjectMapperResult.getPropertyNamingStrategy());
assertTrue(actualCreateObjectMapperResult
.getDeserializationContext() instanceof com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.Impl);
assertSame(actualCreateObjectMapperResult.getFactory(), actualCreateObjectMapperResult.getJsonFactory());
assertTrue(actualCreateObjectMapperResult
.getSerializerFactory() instanceof com.fasterxml.jackson.databind.ser.BeanSerializerFactory);
assertTrue(actualCreateObjectMapperResult
.getSerializerProvider() instanceof com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.Impl);
assertTrue(actualCreateObjectMapperResult
.getSerializerProviderInstance() instanceof com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.Impl);
assertTrue(actualCreateObjectMapperResult
.getSubtypeResolver() instanceof com.fasterxml.jackson.databind.jsontype.impl.StdSubtypeResolver);
DeserializationConfig deserializationConfig = actualCreateObjectMapperResult.getDeserializationConfig();
assertTrue(deserializationConfig.getAttributes() instanceof ContextAttributes.Impl);
assertTrue(deserializationConfig
.getAnnotationIntrospector() instanceof com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector);
assertNull(deserializationConfig.getActiveView());
assertEquals(237020288, deserializationConfig.getDeserializationFeatures());
DateFormat expectedDateFormat = actualCreateObjectMapperResult.getDateFormat();
assertSame(expectedDateFormat, deserializationConfig.getDateFormat());
assertNull(deserializationConfig.getDefaultMergeable());
assertSame(visibilityChecker, deserializationConfig.getDefaultVisibilityChecker());
assertNull(deserializationConfig.getHandlerInstantiator());
JsonNodeFactory expectedNodeFactory = actualCreateObjectMapperResult.getNodeFactory();
assertSame(expectedNodeFactory, deserializationConfig.getNodeFactory());
assertSame(polymorphicTypeValidator, deserializationConfig.getPolymorphicTypeValidator());
assertTrue(deserializationConfig
.getClassIntrospector() instanceof com.fasterxml.jackson.databind.introspect.BasicClassIntrospector);
assertNull(deserializationConfig.getFullRootName());
assertNull(deserializationConfig.getProblemHandlers());
assertNotNull(actualCreateObjectMapperResult);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -822,4 +822,32 @@ public void testByIdFilter() {
result = collection.find(or(byId(nitriteId), where("tag").eq(document.get("tag")))).firstOrNull();
assertEquals(document, result);
}

@Test
public void testByNonExistingId() {
Document doc1 = createDocument("age", 31).put("tag", "one");
Document doc2 = createDocument("age", 32).put("tag", "two");
Document doc3 = createDocument("age", 33).put("tag", "three");
Document doc4 = createDocument("age", 34).put("tag", "four");
Document doc5 = createDocument("age", 35).put("tag", "five");

NitriteCollection collection = db.getCollection("tag");
collection.insert(doc1, doc2, doc3, doc4, doc5);

NitriteId nitriteId = NitriteId.newId();
Document result = collection.find(byId(nitriteId)).firstOrNull();
assertNull(result);

result = collection.find(and(byId(nitriteId), where("age").notEq(null))).firstOrNull();
assertNull(result);

result = collection.find(or(byId(nitriteId), where("tag").eq("one"))).firstOrNull();
assertNotNull(result);
assertEquals(result.get("tag"), "one");

DocumentCursor cursor = collection.find(where("_id").eq(nitriteId.getIdValue()));
Iterator<Document> idIter = cursor.iterator();
assertFalse(idIter.hasNext());
assertEquals(cursor.size(), 0);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -822,4 +822,32 @@ public void testByIdFilter() {
result = collection.find(or(byId(nitriteId), where("tag").eq(document.get("tag")))).firstOrNull();
assertEquals(document, result);
}

@Test
public void testByNonExistingId() {
Document doc1 = createDocument("age", 31).put("tag", "one");
Document doc2 = createDocument("age", 32).put("tag", "two");
Document doc3 = createDocument("age", 33).put("tag", "three");
Document doc4 = createDocument("age", 34).put("tag", "four");
Document doc5 = createDocument("age", 35).put("tag", "five");

NitriteCollection collection = db.getCollection("tag");
collection.insert(doc1, doc2, doc3, doc4, doc5);

NitriteId nitriteId = NitriteId.newId();
Document result = collection.find(byId(nitriteId)).firstOrNull();
assertNull(result);

result = collection.find(and(byId(nitriteId), where("age").notEq(null))).firstOrNull();
assertNull(result);

result = collection.find(or(byId(nitriteId), where("tag").eq("one"))).firstOrNull();
assertNotNull(result);
assertEquals(result.get("tag"), "one");

DocumentCursor cursor = collection.find(where("_id").eq(nitriteId.getIdValue()));
Iterator<Document> idIter = cursor.iterator();
assertFalse(idIter.hasNext());
assertEquals(cursor.size(), 0);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,12 @@ private RecordStream<Pair<NitriteId, Document>> findSuitableStream(FindPlan find
if (findPlan.getByIdFilter() != null) {
FieldBasedFilter byIdFilter = findPlan.getByIdFilter();
NitriteId nitriteId = NitriteId.createId((String) byIdFilter.getValue());
Document document = nitriteMap.get(nitriteId);
rawStream = RecordStream.single(pair(nitriteId, document));
if (nitriteMap.containsKey(nitriteId)) {
Document document = nitriteMap.get(nitriteId);
rawStream = RecordStream.single(pair(nitriteId, document));
} else {
rawStream = RecordStream.empty();
}
} else {
IndexDescriptor indexDescriptor = findPlan.getIndexDescriptor();
if (indexDescriptor != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -852,4 +852,32 @@ public void testByIdFilter() {
result = collection.find(or(byId(nitriteId), where("tag").eq(document.get("tag")))).firstOrNull();
assertEquals(document, result);
}

@Test
public void testByNonExistingId() {
Document doc1 = createDocument("age", 31).put("tag", "one");
Document doc2 = createDocument("age", 32).put("tag", "two");
Document doc3 = createDocument("age", 33).put("tag", "three");
Document doc4 = createDocument("age", 34).put("tag", "four");
Document doc5 = createDocument("age", 35).put("tag", "five");

NitriteCollection collection = db.getCollection("tag");
collection.insert(doc1, doc2, doc3, doc4, doc5);

NitriteId nitriteId = NitriteId.newId();
Document result = collection.find(byId(nitriteId)).firstOrNull();
assertNull(result);

result = collection.find(and(byId(nitriteId), where("age").notEq(null))).firstOrNull();
assertNull(result);

result = collection.find(or(byId(nitriteId), where("tag").eq("one"))).firstOrNull();
assertNotNull(result);
assertEquals(result.get("tag"), "one");

DocumentCursor cursor = collection.find(where("_id").eq(nitriteId.getIdValue()));
Iterator<Document> idIter = cursor.iterator();
assertFalse(idIter.hasNext());
assertEquals(cursor.size(), 0);
}
}