package com.processpuzzle.fitnesse.persistence; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import java.lang.reflect.Field; import java.util.List; import org.junit.Before; import org.junit.Test; import com.google.common.collect.Lists; import com.processpuzzle.commons.persistence.RepositoryResultSet; import com.processpuzzle.persistence.domain.SimpleResultSet; import com.processpuzzle.persistence.domain.TestEntity; public class RepositoryResultSetCheckerTest { private RepositoryResultSet<TestEntity> resultSet; private TestEntity firstEntity; private TestEntity secondEntity; private RepositoryResultSetChecker resultChecker; private Class<?> expectedTargetClass; private Field nameField; @Before public void beforeEachTest() throws ClassNotFoundException, SecurityException, NoSuchFieldException { setUpResultSet(); resultChecker = new RepositoryResultSetChecker( resultSet, TestEntity.class ); expectedTargetClass = resultChecker.getCompilerClassLoader().loadClass( "com.processpuzzle.fitnesse.persistence.DefaultPersistentObjectWrapper" ); nameField = expectedTargetClass.getDeclaredField( "name" ); } @Test public void getTargetClass_IsSubclassOfPersistentObjectWrapper() { assertThat( resultChecker.getTargetClass().equals( expectedTargetClass ), is( true )); } @Test public void query_ReturnsArrayOfWrappedObjects() throws Exception { //SETUP: Implicit //EXCERCISE: Object[] entities = resultChecker.query(); //VERIFY: assertThat( entities.length, equalTo( 2 )); assertThat( entities[0], instanceOf( PersistentObjectWrapper.class )); assertThat( entities[1], instanceOf( PersistentObjectWrapper.class )); assertThat( (String)nameField.get( entities[0] ), equalTo( "FirstEntity" )); assertThat( (String)nameField.get( entities[1] ), equalTo( "SecondEntity" )); } private void setUpResultSet() { firstEntity = new TestEntity( "FirstEntity" ); secondEntity = new TestEntity( "SecondEntity" ); List<TestEntity> entityList = Lists.newArrayList(); entityList.add( firstEntity ); entityList.add( secondEntity ); resultSet = new SimpleResultSet<TestEntity>( entityList ); } }