package org.om.core.impl.persistence.interceptor;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import org.junit.Before;
import org.junit.Test;
import org.om.core.api.mapping.EntityMapping;
import org.om.core.api.mapping.MappedField;
import org.om.core.impl.mapping.extractor.EntityMappingExtractorImpl;
import org.om.core.impl.persistence.delegate.TestingPersistenceAdapter;
import org.om.core.impl.persistence.delegate.TestingPersistenceContext;
import org.om.core.impl.persistence.interceptor.handler.ItemHandlerFactoryImpl;
import org.om.core.impl.test.EntityWithPrimitiveProperties;
public class PersistenceInterceptorImplWithPrimitiveTypesTest {
private EntityMapping entityMapping;
private PersistenceInterceptorImpl interceptor;
private TestingPersistenceContext persistenceContext;
@Before
public void setUp() {
entityMapping = new EntityMappingExtractorImpl().extract(EntityWithPrimitiveProperties.class);
persistenceContext = new TestingPersistenceContext();
interceptor = new PersistenceInterceptorImpl(null, new ItemHandlerFactoryImpl(), new TestingPersistenceAdapter(entityMapping, persistenceContext));
}
@Test
public void testPrimitiveType() {
persistenceContext.addProperty("primitiveInt", "2706");
MappedField mappedField = entityMapping.getByFieldName("primitiveInt");
int property = (Integer) interceptor.get(mappedField);
assertThat(property, notNullValue());
assertThat(property, is(2706));
// I would love to do that, but java will automatically box the result
// assertEquals(int.class, property.getClass());
}
@Test
public void testStringType() {
persistenceContext.addProperty("fieldWithDefaultSettings", "I love Oreos!");
MappedField mappedField = entityMapping.getByFieldName("fieldWithDefaultSettings");
String property = (String) interceptor.get(mappedField);
assertThat(property, notNullValue());
assertEquals(String.class, property.getClass());
assertThat(property, is("I love Oreos!"));
}
@Test
public void testAutoBoxingType() {
persistenceContext.addProperty("complexFloat", "27.06");
MappedField mappedField = entityMapping.getByFieldName("complexFloat");
Float property = (Float) interceptor.get(mappedField);
assertThat(property, notNullValue());
assertThat(property, is(Float.valueOf(27.06F)));
}
@Test(expected = RuntimeException.class)
public void testPropertyMissingThrowingException() {
MappedField mappedField = entityMapping.getByFieldName("fieldWithAllSettings");
Float property = (Float) interceptor.get(mappedField);
assertThat(property, notNullValue());
assertThat(property, is(Float.valueOf(27.06F)));
}
@Test
public void testPropertyMissingWithDefaultValue() {
MappedField mappedField = entityMapping.getByFieldName("fieldWithMissingStrategy");
String property = (String) interceptor.get(mappedField);
assertThat(property, notNullValue());
assertThat(property, is("default value"));
}
@Test
public void testPropertyMissingWithDefaultValueRequiringParsing() {
MappedField mappedField = entityMapping.getByFieldName("primitiveIntWithDefaultValue");
int property = (Integer) interceptor.get(mappedField);
assertThat(property, notNullValue());
assertThat(property, is(2706));
}
}