package com.processpuzzle.party.domain; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsEqual.equalTo; import static org.hamcrest.core.IsNull.notNullValue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.sql.Timestamp; import java.util.List; import org.junit.Test; import com.processpuzzle.commons.persistence.RepositoryResultSet; import com.processpuzzle.commons.persistence.UnitOfWork; import com.processpuzzle.commons.rdbms.NoDataAvailableException; import com.processpuzzle.fundamental_types.domain.TimePeriod; import com.processpuzzle.fundamental_types.domain.TimePoint; import com.processpuzzle.litest.template.RepositoryTestTemplate; import com.processpuzzle.party.partytype.domain.PartyType; import com.processpuzzle.persistence.domain.DefaultUnitOfWork; import com.processpuzzle.sharedfixtures.domaintier.DomainTierTestConfiguration; public class PersonRepositoryTest extends RepositoryTestTemplate<PersonRepository, PersonRepositoryTestFixture, Person> { public PersonRepositoryTest() { super( DomainTierTestConfiguration.FIXTURE_CONTAINER_DEFINITION_PATH ); } @Override @Test public void testFindById() { DefaultUnitOfWork work = new DefaultUnitOfWork( true ); Person savedPerson = sut.findById( work, root.getId() ); assertThat( savedPerson.getId(), equalTo(root.getId()) ); assertThat( savedPerson.getPartyName(), notNullValue() ); assertThat( savedPerson.getPersonName().getName(), equalTo( root.getPersonName().getName() ) ); work.finish(); } @Override @Test public void testAdd_ForOwnedAttributesAndComponents() { assertThat( databaseSpy.retrieveColumnFromRow( "T_PARTY_NAME", root.getPartyName().getId(), String.class, "name" ), equalTo( root.getPartyName().getName() ) ); } @Override @Test public void testAdd_ForReferencedAggregateRoots() {} @Override @Test public void testDelete_ForOwnedAttributesAndComponents() { Person testPerson = fixture.createTestPerson(); Integer partyNameForeignKey = testPerson.getPartyName().getId(); DefaultUnitOfWork deleteWork = new DefaultUnitOfWork( true ); repository.delete( deleteWork, testPerson ); deleteWork.finish(); try{ databaseSpy.retrieveColumnFromRow( "T_PARTY_NAME", partyNameForeignKey, String.class, "name" ); fail(); }catch( NoDataAvailableException e ){ assertTrue( "Party name is deleted", true ); } } @Test public void findPersonByPartyName() { UnitOfWork work = new DefaultUnitOfWork( true ); String expectedPartyName = "Bárczi Benő"; List<Party> parties = fixture.getPartyRepository().findPartiesByPartyName( work, expectedPartyName ); work.finish(); assertThat( parties, notNullValue() ); assertThat( parties.size(), is( 1 ) ); } @Test public void testFindByPartyTypeName() { DefaultUnitOfWork work = new DefaultUnitOfWork( true ); String partyTypeName = root.getType().getName(); RepositoryResultSet<Person> result = sut.findByPartyTypeName( work, partyTypeName ); Person p = (Person) result.iterator().next(); assertEquals( "Person found by PartyType name", root.getId(), p.getId() ); work.finish(); } @Override @Test public void testFindAll_ForResultCount() { assertEquals( 1, repository.findAll( testWork ).size() ); } @Override public void testFindById_ForEagerLoadedComponents() { // TODO Auto-generated method stub } @Override public void testFindById_ForLazyLoadedComponents() { // TODO Auto-generated method stub } @Override @Test public void testFindByQuery_ForComponentAttributes() { } @Override public void testFindByQuery_ForDirectAttributes() { // TODO Auto-generated method stub } @Override public void testUpdate_ForOwnedAttributesAndComponents() { root.renameName( "newname" ); root.setValid( new TimePeriod( new TimePoint( 2008, 1, 1 ), new TimePoint( 2008, 12, 31 ) ) ); DefaultUnitOfWork work = new DefaultUnitOfWork( true ); repository.update( work, root ); assertEquals( "New name is updated", root.getName(), repository.findById( work, root.getId() ).getName() ); work.finish(); assertThat( "Valid TimePeriod is updated", databaseSpy.retrieveColumnFromRow( "T_PARTY", root.getId(), Timestamp.class, "validBegin" ), equalTo( new Timestamp( root.getValid().getBegin().getValue().getTime() ) ) ); assertThat( "Valid TimePeriod is updated", databaseSpy.retrieveColumnFromRow( "T_PARTY", root.getId(), Timestamp.class, "validEnd" ), equalTo( new Timestamp( root.getValid().getEnd().getValue().getTime() ) ) ); } @Override @Test public void testUpdate_ForReferencedAggregateRoots() { // SETUP DefaultUnitOfWork work = new DefaultUnitOfWork( true ); PartyType type = new PartyType( "OtherType" ); fixture.getPartyTypeRepository().add( work, type ); // EXERCISE //root.setPartyType( type ); repository.update( work, root ); work.finish(); // VERIFY assertEquals( "PartyType is updated", root.getType().getName(), databaseSpy.retrieveColumnFromRow( "T_PARTY_TYPE", root.getType().getId(), String.class, "name" ) ); // TEARDOWN DefaultUnitOfWork work2 = new DefaultUnitOfWork( true ); //root.setPartyType( partyType ); repository.update( work2, root ); fixture.getPartyTypeRepository().delete( work2, type ); work2.finish(); } }