/* * Hibernate OGM, Domain model persistence for NoSQL datastores * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.ogm.test.datastore.document; import static org.fest.assertions.Assertions.assertThat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.hibernate.ogm.datastore.document.impl.EmbeddableStateFinder; import org.hibernate.ogm.datastore.map.impl.MapTupleSnapshot; import org.hibernate.ogm.dialect.batch.spi.OperationsQueue; import org.hibernate.ogm.dialect.spi.TransactionContext; import org.hibernate.ogm.dialect.spi.TupleContext; import org.hibernate.ogm.dialect.spi.TupleTypeContext; import org.hibernate.ogm.model.spi.Tuple; import org.hibernate.ogm.model.spi.Tuple.SnapshotType; import org.hibernate.ogm.utils.GridDialectOperationContexts; import org.junit.Test; /** * @author Emmanuel Bernard <emmanuel@hibernate.org> */ public class EmbeddableStateFinderTest { @Test public void testEmbeddableData() throws Exception { final Map<String, Object> tupleData = new HashMap<String, Object>(); tupleData.put( "foo", 1 ); tupleData.put( "null1.b1", null ); tupleData.put( "null1.b2", null ); tupleData.put( "nonnull1.1", null ); tupleData.put( "nonnull1.2", 1 ); tupleData.put( "nested1.null1.b1", null ); tupleData.put( "nested1.null1.b2", null ); tupleData.put( "nested1.notnull2", 1 ); tupleData.put( "nested2.nonnull1.1", null ); tupleData.put( "nested2.nonnull1.2", 1 ); tupleData.put( "nested3.null1.b1", null ); tupleData.put( "nested3.null1.b2", null ); tupleData.put( "nested3.null2", null ); Tuple tuple = new Tuple( new MapTupleSnapshot( tupleData ), SnapshotType.UPDATE ); TupleContext context = new TupleContext() { @Override public OperationsQueue getOperationsQueue() { return null; } @Override public TransactionContext getTransactionContext() { return null; } @Override public TupleTypeContext getTupleTypeContext() { List<String> results = new ArrayList<String>(); results.addAll( tupleData.keySet() ); return new GridDialectOperationContexts.TupleTypeContextBuilder().selectableColumns( results ).buildTupleTypeContext(); } }; EmbeddableStateFinder data = new EmbeddableStateFinder( tuple, context ); assertThat( data.getOuterMostNullEmbeddableIfAny( "foo" ) ).isNull(); assertThat( data.getOuterMostNullEmbeddableIfAny( "null1.b1" ) ).isEqualTo( "null1" ); assertThat( data.getOuterMostNullEmbeddableIfAny( "null1.b2" ) ).isEqualTo( "null1" ); assertThat( data.getOuterMostNullEmbeddableIfAny( "nonnull1.1" ) ).isEqualTo( null ); assertThat( data.getOuterMostNullEmbeddableIfAny( "nonnull1.2" ) ).isEqualTo( null ); assertThat( data.getOuterMostNullEmbeddableIfAny( "nested1.notnull2" ) ).isEqualTo( null ); assertThat( data.getOuterMostNullEmbeddableIfAny( "nested1.null1.b1" ) ).isEqualTo( "nested1.null1" ); assertThat( data.getOuterMostNullEmbeddableIfAny( "nested1.null1.b2" ) ).isEqualTo( "nested1.null1" ); assertThat( data.getOuterMostNullEmbeddableIfAny( "nested2.nonnull1.1" ) ).isEqualTo( null ); assertThat( data.getOuterMostNullEmbeddableIfAny( "nested2.nonnull1.2" ) ).isEqualTo( null ); assertThat( data.getOuterMostNullEmbeddableIfAny( "nested3.null1.b2" ) ).isEqualTo( "nested3" ); assertThat( data.getOuterMostNullEmbeddableIfAny( "nested3.null2" ) ).isEqualTo( "nested3" ); } }