package org.om.core.impl.persistence.interceptor.handler;
import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.notNullValue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.junit.Test;
import org.om.core.api.mapping.CollectionMapping;
import org.om.core.api.mapping.MappedField;
import org.om.core.api.persistence.PersistenceAdapter;
import org.om.core.api.persistence.interceptor.handler.ItemHandler;
import org.om.core.api.persistence.request.ImmutablePersistenceRequest;
import org.om.core.api.persistence.request.Mode;
import org.om.core.api.persistence.request.PersistenceRequest;
import org.om.core.api.persistence.result.CollectionResult;
import org.om.core.api.persistence.result.PersistenceResult;
import org.om.core.api.session.Session;
import org.om.core.impl.persistence.result.ImmutableCollectionPersistenceResult;
import org.om.core.impl.persistence.result.ImmutablePersistenceResult;
import org.om.core.impl.test.MappedFieldBuilder;
public class ItemHandlerFactoryImplTest {
ItemHandlerFactoryImpl factory = new ItemHandlerFactoryImpl();
Session session = mock(Session.class);
PersistenceAdapter adapter = mock(PersistenceAdapter.class);
@Test
public void testIdHandler() {
MappedField field = new MappedFieldBuilder().withName("id").withType(String.class).withIdMapping().create();
ItemHandler itemHandler = factory.get(session, field);
assertThat(itemHandler, notNullValue());
when(adapter.getId()).thenReturn("/some/id");
Object retrieve = itemHandler.retrieve(field, adapter);
assertThat(retrieve, notNullValue());
assertEquals("/some/id", retrieve);
}
@Test
public void testPrimitiveHandler() {
MappedField field = new MappedFieldBuilder().withName("primitive").withType(String.class).withPropertyMapping("primitive", String.class).create();
ItemHandler itemHandler = factory.get(session, field);
assertThat(itemHandler, notNullValue());
PersistenceRequest request = new ImmutablePersistenceRequest("primitive", String.class, Mode.Relative);
PersistenceResult value = new ImmutablePersistenceResult("result");
when(adapter.getProperty(request)).thenReturn(value);
Object retrieve = itemHandler.retrieve(field, adapter);
assertThat(retrieve, notNullValue());
assertEquals("result", retrieve);
}
@Test
public void testCollectionHandler() {
MappedField field = new MappedFieldBuilder().withName("collection").withType(List.class).withCollectionMapping(List.class, String.class, "collection")
.create();
ItemHandler itemHandler = factory.get(session, field);
assertThat(itemHandler, notNullValue());
PersistenceRequest request = new ImmutablePersistenceRequest("primitive", String.class, Mode.Relative);
CollectionMapping collectionMapping = (CollectionMapping) field.getMapping();
Collection<?> result = new ArrayList<String>();
CollectionResult value = new ImmutableCollectionPersistenceResult(result);
when(adapter.getCollection(collectionMapping)).thenReturn(value);
Object retrieve = itemHandler.retrieve(field, adapter);
assertThat(retrieve, notNullValue());
assertThat(retrieve, instanceOf(List.class));
}
}