package no.niths.infrastructure.battlestation; import no.niths.common.config.HibernateConfig; import no.niths.common.config.TestAppConfig; import no.niths.domain.battlestation.Loan; import no.niths.infrastructure.battlestation.interfaces.LoanRepository; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.transaction.TransactionConfiguration; import org.springframework.transaction.annotation.Transactional; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.List; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { TestAppConfig.class, HibernateConfig.class }) @Transactional @TransactionConfiguration(transactionManager = "transactionManager") public class LoanRepositoryTest { private static final GregorianCalendar LOAN_DATE = new GregorianCalendar(); private static final GregorianCalendar RETURN_DATE = new GregorianCalendar(); @Autowired private LoanRepository loanRepository; @Test(expected = IllegalArgumentException.class) public void whenInsertNull_persistenceShouldFail() { loanRepository.create(null); } @Test public void whenLoanIsCreated_LoanShouldBePersisted() { int size = loanRepository.getAll(null).size(); Loan loan = new Loan(); loan.setStartTime(LOAN_DATE); loanRepository.create(loan); assertThat(size + 1, is(equalTo(loanRepository.getAll(null).size()))); } @Test public void whenGetById_LoanShouldBeReturned() { int size = loanRepository.getAll(null).size(); Loan loan = new Loan(); loan.setStartTime(LOAN_DATE); loan.setEndTime(RETURN_DATE); loanRepository.create(loan); assertThat(size + 1, is(equalTo(loanRepository.getAll(null).size()))); Loan result = loanRepository.getById(loan.getId()); assertThat(result, is(equalTo(loan))); result = loanRepository.getById(999L); assertThat(result, is(equalTo(null))); } @Test public void whenLoanIsUpdated_LoanShouldBeUpdated() { int size = loanRepository.getAll(null).size(); Loan loan = new Loan(); loan.setStartTime(LOAN_DATE); loanRepository.create(loan); assertThat(size + 1, is(equalTo(loanRepository.getAll(null).size()))); loan.setEndTime(RETURN_DATE); loanRepository.update(loan); assertThat(RETURN_DATE, is(equalTo(loanRepository.getById(loan.getId()).getEndTime()))); } @Test public void whenGetAll_allShouldBeReturned() { int size = loanRepository.getAll(null).size(); Loan loan = new Loan(); loan.setStartTime(new GregorianCalendar(2011, Calendar.APRIL, 10, 15, 10)); loanRepository.create(loan); Loan otherLoan = new Loan(); otherLoan.setStartTime(new GregorianCalendar(2011, Calendar.APRIL, 10, 15, 10)); loanRepository.create(otherLoan); Loan thirdLoan = new Loan(); thirdLoan.setStartTime(new GregorianCalendar(2009, Calendar.APRIL, 10, 15, 10)); loanRepository.create(thirdLoan); assertThat(size + 3, is(equalTo(loanRepository.getAll(null).size()))); assertThat(1, is(equalTo(loanRepository.getAll(thirdLoan).size()))); } @Test public void testGetLoansBetweenToDates(){ GregorianCalendar startTime = new GregorianCalendar(2012, Calendar.APRIL, 10, 15, 10); GregorianCalendar endDate = new GregorianCalendar(2012, Calendar.APRIL, 15, 22, 20); GregorianCalendar oldDate = new GregorianCalendar(2012, Calendar.APRIL, 15, 22, 21); Loan loan = new Loan(startTime); Loan otherLoan = new Loan(endDate); Loan thirdLoan = new Loan(oldDate); loanRepository.create(loan); loanRepository.create(otherLoan); loanRepository.create(thirdLoan); List<Loan> loans = loanRepository.getLoansBetweenDates(startTime, endDate); assertEquals(2, loans.size()); } @Test public void testGetEventsAfterADate(){ GregorianCalendar startTime = new GregorianCalendar(2012, Calendar.MAY, 10, 15, 10); GregorianCalendar endDate = new GregorianCalendar(2012, Calendar.MAY, 15, 22, 20); GregorianCalendar oldDate = new GregorianCalendar(2012, Calendar.MAY, 15, 22, 21); Loan loan = new Loan(startTime); Loan otherLoan = new Loan(endDate); Loan thirdLoan = new Loan(oldDate); loanRepository.create(loan); loanRepository.create(otherLoan); loanRepository.create(thirdLoan); List<Loan> loans = loanRepository.getLoansBetweenDates(endDate, null); assertEquals(2, loans.size()); } }