/** * This file is part of lavagna. * * lavagna is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * lavagna is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with lavagna. If not, see <http://www.gnu.org/licenses/>. */ package io.lavagna.service; import io.lavagna.config.PersistenceAndServiceConfig; import io.lavagna.model.*; import io.lavagna.model.BoardColumn.BoardColumnLocation; import io.lavagna.model.Event.EventType; import io.lavagna.service.config.TestServiceConfig; import org.junit.Assert; import org.junit.Before; 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.transaction.annotation.Transactional; import java.util.*; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { TestServiceConfig.class, PersistenceAndServiceConfig.class }) @Transactional public class CardRepositoryTest { @Autowired private UserRepository userRepository; @Autowired private BoardRepository boardRepository; @Autowired private BoardColumnRepository boardColumnRepository; @Autowired private CardService cardService; @Autowired private CardRepository cardRepository; @Autowired private ProjectService projectService; private Project project; private Board board; private BoardColumn col1; private BoardColumn col2; private User user; private static void checkCard(Card card, String expectedName, int expectedOrder) { Assert.assertEquals(expectedName, card.getName()); Assert.assertEquals(expectedOrder, card.getOrder()); } @Before public void prepare() { Helper.createUser(userRepository, "test", "test-user"); user = userRepository.findUserByName("test", "test-user"); project = projectService.create("test", "TEST", "desc"); boardRepository .createNewBoard("test-board", "TESTBRD", null, project.getId()); board = boardRepository.findBoardByShortName("TESTBRD"); Map<ColumnDefinition, BoardColumnDefinition> definitions = projectService.findMappedColumnDefinitionsByProjectId(projectService.findByShortName("TEST").getId()); boardColumnRepository.addColumnToBoard("col1", definitions.get(ColumnDefinition.OPEN).getId(), BoardColumnLocation.BOARD, board.getId()); boardColumnRepository.addColumnToBoard("col2", definitions.get(ColumnDefinition.CLOSED).getId(), BoardColumnLocation.BOARD, board.getId()); List<BoardColumn> cols = boardColumnRepository.findAllColumnsFor(board.getId(), BoardColumnLocation.BOARD); col1 = cols.get(0); col2 = cols.get(1); } @Test public void testCreateCardAndFetch() { Assert.assertTrue(cardRepository.findAllByBoardIdAndLocation(board.getId(), BoardColumnLocation.BOARD).isEmpty()); Assert.assertTrue(cardRepository.findAllByColumnId(col1.getId()).isEmpty()); Assert.assertTrue(cardRepository.findAllByColumnId(col2.getId()).isEmpty()); Assert.assertEquals("card1", cardService.createCard("card1", col1.getId(), new Date(), user).getName()); Assert.assertEquals(1, cardRepository.findAllByBoardIdAndLocation(board.getId(), BoardColumnLocation.BOARD).size()); List<CardFull> cardsCol1 = cardRepository.findAllByColumnId(col1.getId()); Assert.assertEquals(1, cardsCol1.size()); Assert.assertTrue(cardRepository.findAllByColumnId(col2.getId()).isEmpty()); Card cardById = cardRepository.findBy(cardsCol1.get(0).getId()); Assert.assertEquals(cardsCol1.get(0).getId(), cardById.getId()); Assert.assertEquals(cardsCol1.get(0).getName(), cardById.getName()); } @Test public void testCreateCardAndFetchFull() { Assert.assertTrue(cardRepository.findAllByBoardIdAndLocation(board.getId(), BoardColumnLocation.BOARD).isEmpty()); Assert.assertTrue(cardRepository.findAllByColumnId(col1.getId()).isEmpty()); Assert.assertTrue(cardRepository.findAllByColumnId(col2.getId()).isEmpty()); Assert.assertEquals("card1", cardService.createCard("card1", col1.getId(), new Date(), user).getName()); Assert.assertEquals(1, cardRepository.findAllByBoardIdAndLocation(board.getId(), BoardColumnLocation.BOARD).size()); List<CardFull> cardsCol1 = cardRepository.findAllByColumnId(col1.getId()); Assert.assertEquals(1, cardsCol1.size()); Assert.assertTrue(cardRepository.findAllByColumnId(col2.getId()).isEmpty()); Card cardById = cardRepository.findBy(cardsCol1.get(0).getId()); Assert.assertEquals(cardsCol1.get(0).getId(), cardById.getId()); Assert.assertEquals(cardsCol1.get(0).getName(), cardById.getName()); CardFull cardFullById = cardRepository.findFullBy(cardsCol1.get(0).getId()); Assert.assertEquals(cardById.getId(), cardFullById.getId()); Assert.assertEquals(cardById.getName(), cardFullById.getName()); } @Test public void testFindFullById() { Card c1 = cardService.createCard("card1", col1.getId(), new Date(), user); Card found = cardRepository.findFullBy(c1.getId()); Assert.assertEquals(c1.getId(), found.getId()); Assert.assertEquals(c1.getName(), found.getName()); } @Test public void testFindFullBySeq() { Card c1 = cardService.createCard("card1", col1.getId(), new Date(), user); Card found = cardRepository.findFullBy(board.getShortName(), c1.getSequence()); Assert.assertEquals(c1.getId(), found.getId()); Assert.assertEquals(c1.getName(), found.getName()); } @Test public void testFindAllByIds() { Card c1 = cardService.createCard("card1", col1.getId(), new Date(), user); Card c2 = cardService.createCard("card2", col1.getId(), new Date(), user); List<CardFull> res = cardRepository.findAllByIds(Arrays.asList(c1.getId(), c2.getId())); Assert.assertTrue(res.size() == 2); Assert.assertTrue(cardRepository.findAllByIds(Collections.<Integer>emptyList()).isEmpty()); } @Test public void testExistCardWith() { Card c1 = cardService.createCard("card1", col1.getId(), new Date(), user); Assert.assertFalse(cardRepository.existCardWith(board.getShortName(), c1.getSequence()+1)); Assert.assertTrue(cardRepository.existCardWith(board.getShortName(), c1.getSequence())); } @Test public void testCreateCardFromTopAndOrder() { Card card1 = cardService.createCardFromTop("card1", col1.getId(), new Date(), user); Assert.assertEquals("card1", card1.getName()); Assert.assertEquals(1, cardRepository.findAllByBoardIdAndLocation(board.getId(), BoardColumnLocation.BOARD).size()); Card card0 = cardService.createCardFromTop("card0", col1.getId(), new Date(), user); Assert.assertEquals("card0", card0.getName()); List<CardFull> cards = cardRepository.findAllByColumnId(col1.getId()); Assert.assertEquals(2, cards.size()); checkCard(cards.get(0), "card0", 0); checkCard(cards.get(1), "card1", 1); } @Test public void testUpdateCardOrderEmpty() {// nothing should happen cardRepository.updateCardOrder(Collections.<Integer> emptyList(), col1.getId()); } @Test public void testUpdateCardOrder() { cardService.createCard("card1", col1.getId(), new Date(), user); cardService.createCard("card2", col1.getId(), new Date(), user); cardService.createCard("card3", col1.getId(), new Date(), user); List<CardFull> cards = cardRepository.findAllByColumnId(col1.getId()); checkCard(cards.get(0), "card1", 1); checkCard(cards.get(1), "card2", 2); checkCard(cards.get(2), "card3", 3); // invert the order cardRepository.updateCardOrder(Arrays.asList(cards.get(2).getId(), cards.get(1).getId(), cards.get(0).getId()), col1.getId()); List<CardFull> cardsUpdated = cardRepository.findAllByColumnId(col1.getId()); checkCard(cardsUpdated.get(0), "card3", 1); checkCard(cardsUpdated.get(1), "card2", 2); checkCard(cardsUpdated.get(2), "card1", 3); } @Test public void testMoveCardToColumnAndReorder() { cardService.createCard("card1", col1.getId(), new Date(), user); cardService.createCard("card2", col1.getId(), new Date(), user); cardService.createCard("card3", col1.getId(), new Date(), user); List<CardFull> cards = cardRepository.findAllByColumnId(col1.getId()); Assert.assertEquals(3, cards.size()); Assert.assertTrue(cardRepository.findAllByColumnId(col2.getId()).isEmpty()); // move the first card in the second column cardRepository.moveCardToColumnAndReorder(cards.get(0).getId(), col1.getId(), col2.getId(), Arrays.asList(cards.get(0).getId())); List<CardFull> cardsCol1 = cardRepository.findAllByColumnId(col1.getId()); List<CardFull> cardsCol2 = cardRepository.findAllByColumnId(col2.getId()); Assert.assertEquals(2, cardsCol1.size()); Assert.assertEquals(1, cardsCol2.size()); checkCard(cardsCol1.get(0), "card2", 2); checkCard(cardsCol1.get(1), "card3", 3); checkCard(cardsCol2.get(0), "card1", 1); } @Test public void testMoveCardsToColumnWithoutReorder() { cardService.createCard("card1", col1.getId(), new Date(), user); cardService.createCard("card2", col1.getId(), new Date(), user); cardService.createCard("card3", col1.getId(), new Date(), user); List<CardFull> cards = cardRepository.findAllByColumnId(col1.getId()); Assert.assertEquals(3, cards.size()); Assert.assertTrue(cardRepository.findAllByColumnId(col2.getId()).isEmpty()); cardService.moveCardsToColumn(Arrays.asList(cards.get(0).getId(), cards.get(1).getId(), cards.get(2).getId()), col1.getId(), col2.getId(), user.getId(), EventType.CARD_MOVE, new Date()); List<CardFull> cardsCol1 = cardRepository.findAllByColumnId(col1.getId()); List<CardFull> cardsCol2 = cardRepository.findAllByColumnId(col2.getId()); Assert.assertEquals(0, cardsCol1.size()); Assert.assertEquals(3, cardsCol2.size()); } @Test public void testUpdateCard() { Card c = cardService.createCard("card1", col1.getId(), new Date(), user); cardRepository.updateCard(c.getId(), "new-name"); Card updated = cardRepository.findBy(c.getId()); Assert.assertEquals(c.getId(), updated.getId()); Assert.assertEquals(c.getOrder(), updated.getOrder()); Assert.assertEquals(c.getSequence(), updated.getSequence()); Assert.assertEquals(c.getOrder(), updated.getOrder()); Assert.assertEquals("new-name", updated.getName()); } @Test public void testFindCards() { cardService.createCard("card1", col1.getId(), new Date(), user); cardService.createCard("card2", col1.getId(), new Date(), user); cardService.createCard("card3", col1.getId(), new Date(), user); Assert.assertEquals(0, cardRepository.findCards(board.getId(), "z").size()); Assert.assertEquals(3, cardRepository.findCards(board.getId(), "card").size()); } @Test public void testFindCardsId() { Card c1 = cardService.createCard("card1", col1.getId(), new Date(), user); Card c2 = cardService.createCard("card2", col1.getId(), new Date(), user); Card c3 = cardService.createCard("card3", col1.getId(), new Date(), user); Map<String, Integer> res = cardRepository.findCardsIds(Arrays.asList("TESTBRD-" + c1.getSequence(), "TESTBRD-" + c2.getSequence(), "TESTBRD-" + c3.getSequence(), "TESTBRD-abcd")); Assert.assertEquals(res.get("TESTBRD-" + c1.getSequence()).intValue(), c1.getId()); Assert.assertEquals(res.get("TESTBRD-" + c2.getSequence()).intValue(), c2.getId()); Assert.assertEquals(res.get("TESTBRD-" + c3.getSequence()).intValue(), c3.getId()); } @Test public void testFindCardBy() { Card c1 = cardService.createCard("card1", col1.getId(), new Date(), user); // find by card "title" Assert.assertEquals(c1.getId(), cardRepository.findCardBy("card1", null).get(0).getId()); // find by card sequenceNr Assert.assertEquals(c1.getId(), cardRepository.findCardBy(Integer.toString(c1.getSequence()), null).get(0).getId()); // find by board short name Assert.assertEquals(c1.getId(), cardRepository.findCardBy("TESTBRD", null).get(0).getId()); Assert.assertEquals(c1.getId(), cardRepository.findCardBy("TESTBRD-", null).get(0).getId()); // find by board short name + seq nr Assert.assertEquals(c1.getId(), cardRepository.findCardBy("TESTBRD-" + c1.getSequence(), null).get(0).getId()); Assert.assertTrue(cardRepository.findCardBy(null, null).isEmpty()); } @Test public void testFindCardByInProject() { Card c1 = cardService.createCard("card1", col1.getId(), new Date(), user); Set<Integer> projects = Collections.singleton(board.getProjectId()); // find by card "title" Assert.assertEquals(c1.getId(), cardRepository.findCardBy("card1", projects).get(0).getId()); // find by card sequenceNr Assert.assertEquals(c1.getId(), cardRepository.findCardBy(Integer.toString(c1.getSequence()), projects).get(0).getId()); // find by board short name Assert.assertEquals(c1.getId(), cardRepository.findCardBy("TESTBRD", projects).get(0).getId()); Assert.assertEquals(c1.getId(), cardRepository.findCardBy("TESTBRD-", projects).get(0).getId()); // find by board short name + seq nr Assert.assertEquals(c1.getId(), cardRepository.findCardBy("TESTBRD-" + c1.getSequence(), projects).get(0).getId()); // Assert.assertTrue(cardRepository.findCardBy(null, Collections.<Integer>emptySet()).isEmpty()); } @Test public void testFetchAllActivityByCardId() { Card c1 = cardService.createCard("card1", col1.getId(), new Date(), user); //card creation activity Assert.assertEquals(1, cardRepository.fetchAllActivityByCardId(c1.getId()).size()); cardService.updateCardName(c1.getId(), "new name", user, new Date()); //card update activity Assert.assertEquals(2, cardRepository.fetchAllActivityByCardId(c1.getId()).size()); } @Test public void testFetchPaginatedByBoardIdAndLocation() { for(int i = 0; i<11;i++) { cardService.createCard("card1", col1.getId(), new Date(), user); } Assert.assertEquals(11, cardRepository.fetchPaginatedByBoardIdAndLocation(board.getId(), BoardColumnLocation.BOARD, 0).size()); Assert.assertEquals(1, cardRepository.fetchPaginatedByBoardIdAndLocation(board.getId(), BoardColumnLocation.BOARD, 1).size()); } }