diff --git a/src/main/java/org/springframework/data/gemfire/mapping/PdxReaderPropertyAccessor.java b/src/main/java/org/springframework/data/gemfire/mapping/PdxReaderPropertyAccessor.java index 09cafb68..88e2af6e 100644 --- a/src/main/java/org/springframework/data/gemfire/mapping/PdxReaderPropertyAccessor.java +++ b/src/main/java/org/springframework/data/gemfire/mapping/PdxReaderPropertyAccessor.java @@ -44,7 +44,7 @@ enum PdxReaderPropertyAccessor implements PropertyAccessor { * @see org.springframework.expression.PropertyAccessor#canRead(org.springframework.expression.EvaluationContext, java.lang.Object, java.lang.String) */ @Override - public boolean canRead(EvaluationContext context, Object target, String name) { + public boolean canRead(EvaluationContext evaluationContext, Object target, String name) { return ((PdxReader) target).hasField(name); } @@ -53,9 +53,11 @@ enum PdxReaderPropertyAccessor implements PropertyAccessor { * @see org.springframework.expression.PropertyAccessor#read(org.springframework.expression.EvaluationContext, java.lang.Object, java.lang.String) */ @Override - public TypedValue read(EvaluationContext context, Object target, String name) { + public TypedValue read(EvaluationContext evaluationContext, Object target, String name) { + Object object = ((PdxReader) target).readObject(name); - return object == null ? TypedValue.NULL : new TypedValue(object); + + return object != null ? new TypedValue(object) : TypedValue.NULL; } /* @@ -63,7 +65,7 @@ enum PdxReaderPropertyAccessor implements PropertyAccessor { * @see org.springframework.expression.PropertyAccessor#canWrite(org.springframework.expression.EvaluationContext, java.lang.Object, java.lang.String) */ @Override - public boolean canWrite(EvaluationContext context, Object target, String name) { + public boolean canWrite(EvaluationContext evaluationContext, Object target, String name) { return false; } @@ -72,7 +74,7 @@ enum PdxReaderPropertyAccessor implements PropertyAccessor { * @see org.springframework.expression.PropertyAccessor#write(org.springframework.expression.EvaluationContext, java.lang.Object, java.lang.String, java.lang.Object) */ @Override - public void write(EvaluationContext context, Object target, String name, Object newValue) { + public void write(EvaluationContext evaluationContext, Object target, String name, Object newValue) { throw new UnsupportedOperationException(); } } diff --git a/src/test/java/org/springframework/data/gemfire/mapping/PdxReaderPropertyAccessorUnitTests.java b/src/test/java/org/springframework/data/gemfire/mapping/PdxReaderPropertyAccessorUnitTests.java index d796e174..3b4c5da1 100644 --- a/src/test/java/org/springframework/data/gemfire/mapping/PdxReaderPropertyAccessorUnitTests.java +++ b/src/test/java/org/springframework/data/gemfire/mapping/PdxReaderPropertyAccessorUnitTests.java @@ -15,72 +15,95 @@ */ package org.springframework.data.gemfire.mapping; -import static org.hamcrest.CoreMatchers.hasItem; -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.apache.geode.pdx.PdxReader; - import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import org.apache.geode.pdx.PdxReader; + import org.springframework.core.convert.TypeDescriptor; +import org.springframework.expression.EvaluationContext; import org.springframework.expression.TypedValue; /** + * Unit Tests for {@link PdxReaderPropertyAccessor}. * * @author Oliver Gierke + * @author John Blum + * @see org.junit.Test + * @see org.mockito.Mock + * @see org.mockito.Mockito + * @see org.mockito.junit.MockitoJUnitRunner + * @see org.springframework.data.gemfire.mapping.PdxReaderPropertyAccessor */ @RunWith(MockitoJUnitRunner.class) public class PdxReaderPropertyAccessorUnitTests { @Mock - PdxReader reader; + private EvaluationContext mockEvaluationContext; + + @Mock + private PdxReader mockReader; @Test public void appliesToPdxReadersOnly() { + List> classes = Arrays.asList(PdxReaderPropertyAccessor.INSTANCE.getSpecificTargetClasses()); - assertThat(classes, hasItem(PdxReader.class)); + + assertThat(classes).contains(PdxReader.class); } @Test public void canReadPropertyIfReaderHasField() { - when(reader.hasField("key")).thenReturn(true); - assertThat(PdxReaderPropertyAccessor.INSTANCE.canRead(null, reader, "key"), is(true)); + when(this.mockReader.hasField("key")).thenReturn(true); - when(reader.hasField("key")).thenReturn(false); - assertThat(PdxReaderPropertyAccessor.INSTANCE.canRead(null, reader, "key"), is(false)); + assertThat(PdxReaderPropertyAccessor.INSTANCE.canRead(this.mockEvaluationContext, this.mockReader, "key")) + .isTrue(); + } + + @Test + public void cannotReadPropertyWhenReaderDoesNotHaveField() { + + when(this.mockReader.hasField("key")).thenReturn(false); + + assertThat(PdxReaderPropertyAccessor.INSTANCE.canRead(this.mockEvaluationContext, this.mockReader, "key")) + .isFalse(); } @Test public void returnsTypedNullIfNullIsReadFromReader() { - when(reader.readObject("key")).thenReturn(null); - assertThat(PdxReaderPropertyAccessor.INSTANCE.read(null, reader, "key"), is(TypedValue.NULL)); + when(this.mockReader.readObject("key")).thenReturn(null); + + assertThat(PdxReaderPropertyAccessor.INSTANCE.read(this.mockEvaluationContext, this.mockReader, "key")) + .isEqualTo(TypedValue.NULL); } @Test public void returnsTypeValueWithValueReadFromReader() { - when(reader.readObject("key")).thenReturn("String"); + when(this.mockReader.readObject("key")).thenReturn("String"); - TypedValue result = PdxReaderPropertyAccessor.INSTANCE.read(null, reader, "key"); + TypedValue result = PdxReaderPropertyAccessor.INSTANCE.read(this.mockEvaluationContext, this.mockReader, "key"); - assertThat(result.getTypeDescriptor(), is(TypeDescriptor.valueOf(String.class))); - assertThat(result.getValue(), is((Object) "String")); + assertThat(result.getTypeDescriptor()).isEqualTo(TypeDescriptor.valueOf(String.class)); + assertThat(result.getValue()).isEqualTo("String"); } + @SuppressWarnings("all") @Test(expected = UnsupportedOperationException.class) public void doesNotSupportWrites() { - assertThat(PdxReaderPropertyAccessor.INSTANCE.canWrite(null, null, null), is(false)); - PdxReaderPropertyAccessor.INSTANCE.write(null, null, null, reader); + assertThat(PdxReaderPropertyAccessor.INSTANCE.canWrite(this.mockEvaluationContext, null, null)).isFalse(); + + PdxReaderPropertyAccessor.INSTANCE.write(this.mockEvaluationContext, null, null, this.mockReader); } } diff --git a/src/test/java/org/springframework/data/gemfire/repository/support/GemfireRepositoryFactoryUnitTests.java b/src/test/java/org/springframework/data/gemfire/repository/support/GemfireRepositoryFactoryUnitTests.java index 59197330..c8ad384c 100644 --- a/src/test/java/org/springframework/data/gemfire/repository/support/GemfireRepositoryFactoryUnitTests.java +++ b/src/test/java/org/springframework/data/gemfire/repository/support/GemfireRepositoryFactoryUnitTests.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.data.gemfire.repository.support; import static org.assertj.core.api.Assertions.assertThat; @@ -22,8 +21,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.verifyNoMoreInteractions; -import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import static org.springframework.data.gemfire.util.RuntimeExceptionFactory.newUnsupportedOperationException; @@ -31,15 +30,15 @@ import java.io.Serializable; import java.util.Arrays; import java.util.Collections; -import org.apache.geode.cache.Region; -import org.apache.geode.cache.RegionAttributes; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.RegionAttributes; + import org.springframework.aop.framework.Advised; import org.springframework.data.gemfire.GemfireTemplate; import org.springframework.data.gemfire.mapping.GemfireMappingContext; @@ -53,11 +52,12 @@ import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.core.support.RepositoryComposition; /** - * Unit tests for {@link GemfireRepositoryFactory}. + * Unit Tests for {@link GemfireRepositoryFactory}. * * @author Oliver Gierke * @author John Blum * @see org.junit.Test + * @see org.mockito.Mock * @see org.mockito.Mockito * @see org.springframework.data.gemfire.repository.support.GemfireRepositoryFactory */ @@ -76,24 +76,24 @@ public class GemfireRepositoryFactoryUnitTests { @Before @SuppressWarnings("unchecked") public void setup() { + this.mappingContext = new GemfireMappingContext(); - configureMockRegion(this.mockRegion, "simple", Object.class, Object.class); + + configureMockRegion(this.mockRegion, "simple", Object.class); } @SuppressWarnings("unchecked") - private Region mockRegion(String name, Class keyType, Class valueType) { - return configureMockRegion(this.mockRegion, name, keyType, valueType); + private Region mockRegion(String name, Class keyType) { + return configureMockRegion(this.mockRegion, name, keyType); } @SuppressWarnings("unchecked") - private Region configureMockRegion(Region mockRegion, String name, - Class keyType, Class valueType) { + private Region configureMockRegion(Region mockRegion, String name, Class keyType) { when(mockRegion.getAttributes()).thenReturn(this.mockRegionAttributes); when(mockRegion.getFullPath()).thenReturn(RegionUtils.toRegionPath(name)); when(mockRegion.getName()).thenReturn(name); when(this.mockRegionAttributes.getKeyConstraint()).thenReturn(keyType); - when(this.mockRegionAttributes.getValueConstraint()).thenReturn(valueType); return mockRegion; } @@ -122,6 +122,7 @@ public class GemfireRepositoryFactoryUnitTests { assertThat(repositoryFactory.getRegions()).contains(this.mockRegion); } + @SuppressWarnings("all") @Test(expected = IllegalArgumentException.class) public void constructGemfireRepositoryFactoryWithNullMappingContextThrowsIllegalArgumentException() { @@ -137,6 +138,7 @@ public class GemfireRepositoryFactoryUnitTests { } } + @SuppressWarnings("all") @Test(expected = IllegalArgumentException.class) public void constructGemfireRepositoryFactoryWithNullRegionsThrowsIllegalArgumentException() { @@ -169,7 +171,7 @@ public class GemfireRepositoryFactoryUnitTests { verify(mockPersistentEntity, times(1)).getRegionName(); verify(mockPersistentEntity, never()).getType(); - verifyZeroInteractions(mockRepositoryMetadata); + verifyNoInteractions(mockRepositoryMetadata); } @Test @@ -190,7 +192,7 @@ public class GemfireRepositoryFactoryUnitTests { verify(mockPersistentEntity, times(1)).getRegionName(); verify(mockPersistentEntity, times(1)).getType(); - verifyZeroInteractions(mockRepositoryMetadata); + verifyNoInteractions(mockRepositoryMetadata); } @Test @@ -284,8 +286,8 @@ public class GemfireRepositoryFactoryUnitTests { RepositoryMetadata mockRepositoryMetadata = mockRepositoryMetadata(Person.class, Long.class, PeopleRepository.class); - Region mockRegionOne = mockRegion("RegionOne", Person.class, Long.class); - Region mockRegionTwo = mockRegion("RegionTwo", Object.class, Long.class); + Region mockRegionOne = mockRegion("RegionOne", Person.class); + Region mockRegionTwo = mockRegion("RegionTwo", Object.class); GemfireRepositoryFactory repositoryFactory = new GemfireRepositoryFactory(Arrays.asList(mockRegionOne, mockRegionTwo), this.mappingContext); @@ -296,7 +298,7 @@ public class GemfireRepositoryFactoryUnitTests { assertThat(repositoryFactory.resolveRegion(mockRepositoryMetadata, mockRegionOne.getFullPath())) .isEqualTo(mockRegionOne); - verifyZeroInteractions(mockRepositoryMetadata); + verifyNoInteractions(mockRepositoryMetadata); } @Test(expected = IllegalStateException.class) @@ -329,7 +331,7 @@ public class GemfireRepositoryFactoryUnitTests { RepositoryMetadata mockRepositoryMetadata = mockRepositoryMetadata(Person.class, Long.class, PeopleRepository.class); - Region mockPeopleRegion = mockRegion("People", Long.class, Person.class); + Region mockPeopleRegion = mockRegion("People", Long.class); GemfireRepositoryFactory repositoryFactory = new GemfireRepositoryFactory(Arrays.asList(this.mockRegion, mockPeopleRegion), mappingContext); @@ -376,7 +378,7 @@ public class GemfireRepositoryFactoryUnitTests { RepositoryMetadata mockRepositoryMetadata = mockRepositoryMetadata(Person.class, Long.class, PeopleRepository.class); - Region mockPeopleRegion = mockRegion("People", Integer.class, Person.class); + Region mockPeopleRegion = mockRegion("People", Integer.class); GemfireRepositoryFactory gemfireRepositoryFactory = new GemfireRepositoryFactory(Collections.singleton(mockPeopleRegion), this.mappingContext); @@ -410,7 +412,7 @@ public class GemfireRepositoryFactoryUnitTests { RepositoryMetadata mockRepositoryMetadata = mockRepositoryMetadata(Person.class, Integer.class, PeopleIntegerRepository.class); - Region mockPeopleRegion = mockRegion("People", null, null); + Region mockPeopleRegion = mockRegion("People", null); GemfireRepositoryFactory gemfireRepositoryFactory = new GemfireRepositoryFactory(Collections.singleton(mockPeopleRegion), this.mappingContext); @@ -505,8 +507,7 @@ public class GemfireRepositoryFactoryUnitTests { assertThat(((Advised) gemfireRepository).getTargetClass()).isEqualTo(TestCustomBaseRepository.class); } - interface SamplePagingAndSortingRepository extends PagingAndSortingRepository { - } + interface SamplePagingAndSortingRepository extends PagingAndSortingRepository { } static class TestCustomBaseRepository extends SimpleGemfireRepository { @@ -522,7 +523,7 @@ public class GemfireRepositoryFactoryUnitTests { } - class TestCustomRepositoryImpl implements TestCustomRepository { + static class TestCustomRepositoryImpl implements TestCustomRepository { @Override public void doCustomUpdate(T entity) {