package br.com.caelum.calopsita.persistence.dao; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; import java.util.Collections; import java.util.List; import org.hamcrest.Matcher; import org.junit.Before; import org.junit.Test; import br.com.caelum.calopsita.model.Card; import br.com.caelum.calopsita.model.Project; import br.com.caelum.calopsita.model.Card.Status; import br.com.caelum.calopsita.plugins.PluginResultTransformer; import br.com.caelum.calopsita.plugins.Transformer; import br.com.caelum.calopsita.plugins.prioritization.PrioritizableCard; import br.com.caelum.calopsita.plugins.prioritization.PrioritizationDao; import br.com.caelum.calopsita.plugins.prioritization.PrioritizationRepository; public class PrioritizationDaoTest extends AbstractDaoTest{ private PrioritizationRepository dao; private Project project; private CardDao cardDao; @Override @Before public void setUp() throws Exception { super.setUp(); dao = new PrioritizationDao(session); PluginResultTransformer transformer = new PluginResultTransformer(session, Collections.<Transformer>emptyList()); project = new Project(new ProjectDao(session, transformer)); project.setName("A Project"); cardDao = new CardDao(session, transformer); session.save(project); } @Test public void listingCardsGroupedByPriority() throws Exception { Card card1 = givenAPrioritizableCard(withPriority(1)); Card card4 = givenAPrioritizableCard(withPriority(4)); List<List<Card>> list = dao.listCards(project); assertThat(list.size(), is(5)); assertThat(list.get(1), hasItem(card1)); assertThat(list.get(4), hasItem(card4)); } @Test public void listingOnlyCardsThatHavePriority() throws Exception { Card prioritizableCard = givenAPrioritizableCard(withPriority(0)); Card nonPrioritizableCard = givenASimpleCard(); List<List<Card>> list = dao.listCards(project); assertThat(list.size(), is(1)); assertThat(list.get(0), hasItem(prioritizableCard)); assertThat(list.get(0), doesntHaveItem(nonPrioritizableCard)); } @Test public void listingCardsDontIncludeDoneCards() throws Exception { Card cardNotDone = givenAPrioritizableCard(withPriority(1)); Card cardDone = givenAPrioritizableCard(withPriority(1)); cardDone.setStatus(Status.DONE); List<List<Card>> list = dao.listCards(project); assertThat(list.size(), is(2)); assertThat(list.get(1), hasItem(cardNotDone)); assertThat(list.get(1), not(hasItem(cardDone))); } private Card givenAPrioritizableCard(int priority) { Card card = givenASimpleCard(); PrioritizableCard pCard = new PrioritizableCard(); pCard.setCard(card); pCard.setPriority(priority); session.save(pCard); return card; } private Card givenASimpleCard() { Card card = new Card(cardDao); card.setProject(project); session.save(card); return card; } private int withPriority(int i) { return i; } private Matcher<Iterable<Card>> doesntHaveItem(Card nonPrioritizableCard) { return not(hasItem(nonPrioritizableCard)); } }