/** * 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.service.config.TestServiceConfig; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.time.DateUtils; 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.dao.DataIntegrityViolationException; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; import java.io.*; import java.util.*; import static java.util.EnumSet.of; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; //TODO, FIXME: wall of copy paste, what will your oshi say about that? @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { TestServiceConfig.class, PersistenceAndServiceConfig.class }) @Transactional public class CardDataServiceTest { @Autowired private ProjectService projectService; @Autowired private UserRepository userRepository; @Autowired private BoardRepository boardRepository; @Autowired private BoardColumnRepository boardColumnRepository; @Autowired private CardRepository cardRepository; @Autowired private CardService cardService; @Autowired private CardDataService cardDataService; @Autowired private CardDataRepository cardDataRepo; private Board board; private BoardColumn col1; private Card card1; private User user; private static InputStream from(String s) throws UnsupportedEncodingException { return new ByteArrayInputStream(s.getBytes("UTF-8")); } @Before public void prepare() { Helper.createUser(userRepository, "test", "test-user"); user = userRepository.findUserByName("test", "test-user"); Project project = projectService.create("test", "TEST", "desc"); board = boardRepository.createNewBoard("test-board", "TEST-BRD", null, project.getId()); List<BoardColumnDefinition> definitions = projectService.findColumnDefinitionsByProjectId(project.getId()); boardColumnRepository.addColumnToBoard("col1", definitions.get(0).getId(), BoardColumnLocation.BOARD, board.getId()); List<BoardColumn> cols = boardColumnRepository.findAllColumnsFor(board.getId(), BoardColumnLocation.BOARD); col1 = cols.get(0); cardService.createCard("card1", col1.getId(), new Date(), user); List<CardFull> cards = cardRepository.findAllByColumnId(col1.getId()); card1 = cards.get(0); } @Test public void findByIds() { cardDataService.createComment(card1.getId(), "hello world1", new Date(), user.getId()); cardDataService.createComment(card1.getId(), "hello world2", new Date(), user.getId()); List<CardData> created = cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.COMMENT); assertTrue(created.size() == 2); Map<Integer, String> resById = cardDataRepo.findDataByIds(Arrays.asList(created.get(0).getId(), created.get(1) .getId())); assertEquals(created.get(0).getContent(), resById.get(created.get(0).getId())); assertEquals(created.get(1).getContent(), resById.get(created.get(1).getId())); } @Test public void TestUpdateDescription() { assertTrue(cardDataService.findAllCommentsByCardId(card1.getId()).isEmpty()); // when updating a card that has no description, a fresh one is created String newCardDescription = "test-update-description"; cardDataService.updateDescription(card1.getId(), newCardDescription, DateUtils.addHours(new Date(), -3), user.getId()); assertEquals(cardDataService.findDescriptionByCardId(card1.getId()).size(), 1); assertEquals(newCardDescription, cardDataService.findLatestDescriptionByCardId(card1.getId()).getContent()); List<CardData> cardData = cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.DESCRIPTION); assertEquals(1, cardData.size()); CardData cardData1 = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); assertEquals(CardType.DESCRIPTION, cardData1.getType()); cardDataService.updateDescription(card1.getId(), "test-update-description-after-update", new Date(), user.getId()); List<CardData> updatedCardData = cardDataRepo.findAllDataLightByCardId(card1.getId()); assertEquals(2, updatedCardData.size()); assertEquals(1, cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.DESCRIPTION_HISTORY) .size()); assertEquals(1, cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.DESCRIPTION).size()); assertEquals(cardData1.getId(), updatedCardData.get(0).getId()); assertEquals("test-update-description-after-update", updatedCardData.get(0).getContent()); assertEquals("test-update-description-after-update", cardDataService.findLatestDescriptionByCardId(card1.getId()).getContent()); } @Test public void TestCreateCommentAndFetch() { assertTrue(cardDataService.findAllCommentsByCardId(card1.getId()).isEmpty()); assertTrue(cardDataRepo.findCountsByBoardIdAndLocation(board.getId(), BoardColumnLocation.BOARD).isEmpty()); assertEquals("test-comment", cardDataService.createComment(card1.getId(), "test-comment", new Date(), user.getId()) .getContent()); assertEquals(cardDataService.findAllCommentsByCardId(card1.getId()).size(), 1); assertEquals(1, cardDataRepo.findCountsByBoardIdAndLocation(board.getId(), BoardColumnLocation.BOARD).size()); List<CardData> cardData = cardDataRepo.findAllDataLightByCardId(card1.getId()); assertEquals(1, cardData.size()); CardData cardData1 = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); assertEquals(cardData1.getId(), cardData.get(0).getId()); assertEquals(cardData1.getContent(), cardData.get(0).getContent()); assertEquals(cardData1.getType(), cardData.get(0).getType()); } @Test public void TestUpdateComment() { assertTrue(cardDataService.findAllCommentsByCardId(card1.getId()).isEmpty()); assertEquals("test-update-comment", cardDataService.createComment(card1.getId(), "test-update-comment", new Date(), user.getId()).getContent()); assertEquals(cardDataService.findAllCommentsByCardId(card1.getId()).size(), 1); List<CardData> cardData = cardDataRepo.findAllDataLightByCardId(card1.getId()); assertEquals(1, cardData.size()); CardData cardData1 = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); cardDataService.updateComment(cardData1.getId(), "test-update-comment-after-update", new Date(), user); List<CardData> updatedCardData = cardDataRepo.findAllDataLightByCardId(card1.getId()); assertEquals(2, updatedCardData.size()); assertEquals(1, cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.COMMENT_HISTORY).size()); assertEquals(1, cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.COMMENT).size()); assertEquals(cardData1.getId(), updatedCardData.get(0).getId()); assertEquals("test-update-comment-after-update", updatedCardData.get(0).getContent()); } @Test public void TestDeleteCommentAndUndo() { assertTrue(cardDataService.findAllCommentsByCardId(card1.getId()).isEmpty()); assertTrue(cardDataRepo.findCountsByBoardIdAndLocation(board.getId(), BoardColumnLocation.BOARD).isEmpty()); assertEquals("test-update-comment", cardDataService.createComment(card1.getId(), "test-update-comment", new Date(), user.getId()).getContent()); assertEquals(cardDataService.findAllCommentsByCardId(card1.getId()).size(), 1); assertEquals(1, cardDataRepo.findCountsByBoardIdAndLocation(board.getId(), BoardColumnLocation.BOARD).size()); List<CardData> cardData = cardDataRepo.findAllDataLightByCardId(card1.getId()); assertEquals(1, cardData.size()); CardData cardData1 = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); Event deleteCommentEvent = cardDataService.deleteComment(cardData1.getId(), user, new Date()); assertTrue(cardDataService.findAllCommentsByCardId(card1.getId()).isEmpty()); assertTrue(cardDataRepo.findCountsByBoardIdAndLocation(board.getId(), BoardColumnLocation.BOARD).isEmpty()); cardDataService.undoDeleteComment(deleteCommentEvent); assertEquals(1, cardDataService.findAllCommentsByCardId(card1.getId()).size()); assertEquals(1, cardDataRepo.findCountsByBoardIdAndLocation(board.getId(), BoardColumnLocation.BOARD).size()); } @Test public void TestActionListAndItems() { assertTrue(cardDataService.findAllActionListsAndItemsByCardId(card1.getId()).isEmpty()); assertEquals("test-list", cardDataService.createActionList(card1.getId(), "test-list", user.getId(), new Date()) .getContent()); assertEquals(1, cardDataRepo.findAllDataByCardIdAndType(card1.getId(), CardType.ACTION_LIST).size()); List<CardData> cardData = cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.ACTION_LIST); assertEquals(1, cardData.size()); CardData list1 = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); assertEquals(list1.getId(), cardData.get(0).getId()); assertEquals(list1.getContent(), cardData.get(0).getContent()); assertEquals(list1.getType(), cardData.get(0).getType()); // add action item assertEquals("test-unchecked", cardDataService.createActionItem(card1.getId(), list1.getId(), "test-unchecked", user.getId(), new Date()) .getContent()); cardData = cardDataRepo.findAllDataLightByCardIdAndTypes(card1.getId(), of(CardType.ACTION_CHECKED, CardType.ACTION_UNCHECKED)); assertEquals(1, cardData.size()); CardData item1 = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); assertEquals(1, item1.getOrder()); assertEquals(CardType.ACTION_UNCHECKED, item1.getType()); assertEquals("test-order", cardDataService.createActionItem(card1.getId(), list1.getId(), "test-order", user.getId(), new Date()) .getContent()); cardData = cardDataRepo.findAllDataLightByCardIdAndTypes(card1.getId(), of(CardType.ACTION_CHECKED, CardType.ACTION_UNCHECKED)); assertEquals(2, cardData.size()); CardData item2 = cardDataRepo.getUndeletedDataLightById(cardData.get(1).getId()); assertEquals(2, item2.getOrder()); } @Test public void TestUpdateActionList() { assertTrue(cardDataService.findAllActionListsAndItemsByCardId(card1.getId()).isEmpty()); assertEquals("test-list-update", cardDataService.createActionList(card1.getId(), "test-list-update", user.getId(), new Date()).getContent()); assertEquals(1, cardDataRepo.findAllDataByCardIdAndType(card1.getId(), CardType.ACTION_LIST).size()); List<CardData> cardData = cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.ACTION_LIST); assertEquals(1, cardData.size()); CardData list1 = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); assertEquals(list1.getId(), cardData.get(0).getId()); assertEquals(list1.getContent(), cardData.get(0).getContent()); assertEquals(list1.getType(), cardData.get(0).getType()); cardDataService.updateActionList(list1.getId(), "test-list-update-new"); CardData list1updated = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); assertEquals("test-list-update-new", list1updated.getContent()); } @Test public void TestToggleActionItem() { assertTrue(cardDataService.findAllActionListsAndItemsByCardId(card1.getId()).isEmpty()); assertEquals("test-list-toggle", cardDataService.createActionList(card1.getId(), "test-list-toggle", user.getId(), new Date()).getContent()); assertEquals(1, cardDataRepo.findAllDataByCardIdAndType(card1.getId(), CardType.ACTION_LIST).size()); List<CardData> cardData = cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.ACTION_LIST); assertEquals(1, cardData.size()); CardData list1 = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); assertEquals(list1.getId(), cardData.get(0).getId()); assertEquals(list1.getContent(), cardData.get(0).getContent()); assertEquals(list1.getType(), cardData.get(0).getType()); // add action item assertEquals( "test-toggle-unchecked", cardDataService.createActionItem(card1.getId(), list1.getId(), "test-toggle-unchecked", user.getId(), new Date()).getContent()); cardData = cardDataRepo.findAllDataLightByCardIdAndTypes(card1.getId(), of(CardType.ACTION_CHECKED, CardType.ACTION_UNCHECKED)); assertEquals(1, cardData.size()); CardData item1 = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); cardDataService.toggleActionItem(item1.getId(), true, user.getId(), new Date()); item1 = cardDataRepo.getUndeletedDataLightById(item1.getId()); assertEquals(CardType.ACTION_CHECKED, item1.getType()); cardData = cardDataRepo.findAllDataLightByCardIdAndTypes(card1.getId(), of(CardType.ACTION_CHECKED, CardType.ACTION_UNCHECKED)); assertEquals(1, cardData.size()); cardDataService.toggleActionItem(item1.getId(), false, user.getId(), new Date()); item1 = cardDataRepo.getUndeletedDataLightById(item1.getId()); assertEquals(CardType.ACTION_UNCHECKED, item1.getType()); } @Test public void TestUpdateActionItem() { assertTrue(cardDataService.findAllActionListsAndItemsByCardId(card1.getId()).isEmpty()); assertEquals("test-list-update", cardDataService.createActionList(card1.getId(), "test-list-update", user.getId(), new Date()).getContent()); assertEquals(1, cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.ACTION_LIST).size()); List<CardData> cardData = cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.ACTION_LIST); assertEquals(1, cardData.size()); CardData list1 = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); // add action item assertEquals("test-update", cardDataService.createActionItem(card1.getId(), list1.getId(), "test-update", user.getId(), new Date()) .getContent()); cardData = cardDataRepo.findAllDataLightByCardIdAndTypes(card1.getId(), of(CardType.ACTION_CHECKED, CardType.ACTION_UNCHECKED)); assertEquals(1, cardData.size()); CardData item1 = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); cardDataService.updateActionItem(item1.getId(), "test-update-after"); cardData = cardDataRepo.findAllDataLightByCardIdAndTypes(card1.getId(), of(CardType.ACTION_CHECKED, CardType.ACTION_UNCHECKED)); assertEquals(1, cardData.size()); assertEquals(item1.getId(), cardData.get(0).getId()); assertEquals("test-update-after", cardData.get(0).getContent()); } @Test public void TestDeleteActionItemAndUndo() { assertTrue(cardDataService.findAllActionListsAndItemsByCardId(card1.getId()).isEmpty()); assertEquals("test-list-delete", cardDataService.createActionList(card1.getId(), "test-list-delete", user.getId(), new Date()).getContent()); assertEquals(1, cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.ACTION_LIST).size()); List<CardData> cardData = cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.ACTION_LIST); assertEquals(1, cardData.size()); CardData list1 = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); // add action item assertEquals("test-delete", cardDataService.createActionItem(card1.getId(), list1.getId(), "test-delete", user.getId(), new Date()) .getContent()); cardData = cardDataRepo.findAllDataLightByCardIdAndTypes(card1.getId(), of(CardType.ACTION_CHECKED, CardType.ACTION_UNCHECKED)); assertEquals(1, cardData.size()); CardData item1 = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); Event deleteActionItemEvent = cardDataService.deleteActionItem(item1.getId(), user, new Date()); cardData = cardDataRepo.findAllDataLightByCardIdAndTypes(card1.getId(), of(CardType.ACTION_CHECKED, CardType.ACTION_UNCHECKED)); assertEquals(0, cardData.size()); cardDataService.undoDeleteActionItem(deleteActionItemEvent); cardData = cardDataRepo.findAllDataLightByCardIdAndTypes(card1.getId(), of(CardType.ACTION_CHECKED, CardType.ACTION_UNCHECKED)); assertEquals(1, cardData.size()); } @Test public void TestReorderActionLists() { assertTrue(cardDataService.findAllActionListsAndItemsByCardId(card1.getId()).isEmpty()); assertEquals("test-list-reorder1", cardDataService.createActionList(card1.getId(), "test-list-reorder1", user.getId(), new Date()).getContent()); assertEquals(1, cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.ACTION_LIST).size()); assertEquals("test-list-reorder2", cardDataService.createActionList(card1.getId(), "test-list-reorder2", user.getId(), new Date()).getContent()); assertEquals(2, cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.ACTION_LIST).size()); List<CardData> cardData = cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.ACTION_LIST); assertEquals(2, cardData.size()); CardData list1 = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); assertEquals(1, list1.getOrder()); CardData list2 = cardDataRepo.getUndeletedDataLightById(cardData.get(1).getId()); assertEquals(2, list2.getOrder()); List<Integer> newOrder = Arrays.asList(list2.getId(), list1.getId()); cardDataRepo.updateActionListOrder(card1.getId(), newOrder); CardData list1reorder = cardDataRepo.getUndeletedDataLightById(cardData.get(0).getId()); assertEquals("test-list-reorder1", list1reorder.getContent()); assertEquals(2, list1reorder.getOrder()); CardData list2reorder = cardDataRepo.getUndeletedDataLightById(cardData.get(1).getId()); assertEquals("test-list-reorder2", list2reorder.getContent()); assertEquals(1, list2reorder.getOrder()); } @Test public void TestReorderActionList() { int numberOfActionItems = 3; assertTrue(numberOfActionItems > 0); assertTrue(cardDataService.findAllActionListsAndItemsByCardId(card1.getId()).isEmpty()); assertEquals("test-list-reorder1", cardDataService.createActionList(card1.getId(), "test-list-reorder1", user.getId(), new Date()).getContent()); List<CardData> actionLists = cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.ACTION_LIST); assertEquals(1, actionLists.size()); CardData list1 = cardDataRepo.getUndeletedDataLightById(actionLists.get(0).getId()); // add action item for (int i = 1; i < numberOfActionItems + 1; i++) { assertEquals(i, cardDataService.createActionItem(card1.getId(), list1.getId(), "test-order-" + i, user.getId(), new Date()) .getOrder()); } List<CardData> actionItems = cardDataRepo.findAllDataLightByCardIdAndTypes(card1.getId(), of(CardType.ACTION_CHECKED, CardType.ACTION_UNCHECKED)); assertEquals(3, actionItems.size()); List<Integer> newOrder = new ArrayList<>(); for (int i = numberOfActionItems; i > 0; i--) { assertEquals(i, actionItems.get(i - 1).getOrder()); newOrder.add(actionItems.get(i - 1).getId()); } cardDataRepo.updateOrderByCardAndReferenceId(card1.getId(), list1.getId(), newOrder); for (int i = 0; i < numberOfActionItems; i++) { CardData actionItem = cardDataRepo.getUndeletedDataLightById(actionItems.get(i).getId()); assertEquals(numberOfActionItems - i, actionItem.getOrder()); } } @Test public void TestMoveActionItem() { int numberOfActionItems = 3; assertTrue(numberOfActionItems > 0); assertTrue(cardDataService.findAllActionListsAndItemsByCardId(card1.getId()).isEmpty()); assertEquals("test-list-reorder1", cardDataService.createActionList(card1.getId(), "test-list-reorder1", user.getId(), new Date()).getContent()); assertEquals("test-list-reorder2", cardDataService.createActionList(card1.getId(), "test-list-reorder2", user.getId(), new Date()).getContent()); List<CardData> actionLists = cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.ACTION_LIST); assertEquals(2, actionLists.size()); CardData list1 = cardDataRepo.getUndeletedDataLightById(actionLists.get(0).getId()); assertEquals("test-list-reorder1", list1.getContent()); CardData list2 = cardDataRepo.getUndeletedDataLightById(actionLists.get(1).getId()); assertEquals("test-list-reorder2", list2.getContent()); // add action item for (int l = 0; l < actionLists.size(); l++) { for (int i = 1; i < numberOfActionItems + 1; i++) { assertEquals( i, cardDataService.createActionItem(card1.getId(), actionLists.get(l).getId(), "test-move-" + i, user.getId(), new Date()).getOrder()); } } List<CardData> actionItems = cardDataRepo.findAllDataLightByCardIdAndTypes(card1.getId(), of(CardType.ACTION_CHECKED, CardType.ACTION_UNCHECKED)); assertEquals(numberOfActionItems * actionLists.size(), actionItems.size()); List<CardData> actionList1Items = cardDataRepo.findAllDataLightByReferenceId(list1.getId()); assertEquals(3, actionList1Items.size()); List<CardData> actionList2Items = cardDataRepo.findAllDataLightByReferenceId(list2.getId()); assertEquals(3, actionList2Items.size()); // move middle item of list 2 to the beginning of list 1 int indexToMove = Math.round(numberOfActionItems / 2); CardData itemToMove = actionList2Items.get(indexToMove); // create destination list IDs List<Integer> newActionListOrder = new ArrayList<>(); newActionListOrder.add(itemToMove.getId()); for (int i = 0; i < actionList1Items.size(); i++) { newActionListOrder.add(actionList1Items.get(i).getId()); } cardDataService.moveActionItem(card1.getId(), itemToMove.getId(), list1.getId(), newActionListOrder, user, new Date()); List<CardData> actionList1ItemsReOrdered = cardDataRepo.findAllDataLightByReferenceId(list1.getId()); assertEquals(4, actionList1ItemsReOrdered.size()); assertEquals(itemToMove.getContent(), actionList1ItemsReOrdered.get(0).getContent()); List<CardData> actionList2ItemsReOrdered = cardDataRepo.findAllDataLightByReferenceId(list2.getId()); assertEquals(2, actionList2ItemsReOrdered.size()); } @Test public void TestDeleteActionListWithContentAndUndo() { int numberOfActionItems = 3; assertTrue(numberOfActionItems > 0); assertTrue(cardDataService.findAllActionListsAndItemsByCardId(card1.getId()).isEmpty()); assertEquals("test-list-reorder1", cardDataService.createActionList(card1.getId(), "test-list-reorder1", user.getId(), new Date()).getContent()); assertEquals("test-list-reorder2", cardDataService.createActionList(card1.getId(), "test-list-reorder2", user.getId(), new Date()).getContent()); List<CardData> actionLists = cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.ACTION_LIST); assertEquals(2, actionLists.size()); CardData list1 = cardDataRepo.getUndeletedDataLightById(actionLists.get(0).getId()); assertEquals("test-list-reorder1", list1.getContent()); CardData list2 = cardDataRepo.getUndeletedDataLightById(actionLists.get(1).getId()); assertEquals("test-list-reorder2", list2.getContent()); // add action item for (int l = 0; l < actionLists.size(); l++) { for (int i = 1; i < numberOfActionItems + 1; i++) { assertEquals( i, cardDataService.createActionItem(card1.getId(), actionLists.get(l).getId(), "test-move-" + i, user.getId(), new Date()).getOrder()); } } List<CardData> actionItems = cardDataRepo.findAllDataLightByCardIdAndTypes(card1.getId(), of(CardType.ACTION_CHECKED, CardType.ACTION_UNCHECKED)); assertEquals(numberOfActionItems * actionLists.size(), actionItems.size()); Event deleteActionListEvent = cardDataService.deleteActionList(list1.getId(), user, new Date()); List<CardData> remainingActionLists = cardDataRepo.findAllDataLightByCardIdAndType(card1.getId(), CardType.ACTION_LIST); assertEquals(1, remainingActionLists.size()); assertEquals(list2.getContent(), remainingActionLists.get(0).getContent()); List<CardData> remainingActionItems = cardDataRepo.findAllDataLightByCardIdAndTypes(card1.getId(), of(CardType.ACTION_CHECKED, CardType.ACTION_UNCHECKED)); assertEquals(3, remainingActionItems.size()); cardDataService.undoDeleteActionList(deleteActionListEvent); actionItems = cardDataRepo.findAllDataLightByCardIdAndTypes(card1.getId(), of(CardType.ACTION_CHECKED, CardType.ACTION_UNCHECKED)); assertEquals(numberOfActionItems * actionLists.size(), actionItems.size()); } @Test public void TestUploadFiles() throws IOException { String testData = "derp"; // InputStream input = new // ByteArrayInputStream(testData.getBytes("UTF-8")); String fileDigest = DigestUtils.sha256Hex(from(testData)); cardDataService.createFile("test.txt", fileDigest, 4, card1.getId(), from(testData), "text", user, new Date()); List<FileDataLight> files = cardDataRepo.findAllFilesByCardId(card1.getId()); assertEquals(1, files.size()); FileDataLight file = files.get(0); assertEquals(fileDigest, file.getDigest()); assertEquals("test.txt", file.getName()); assertEquals("text", file.getContentType()); Assert.assertNull(file.getReferenceId()); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); cardDataRepo.outputFileContent(fileDigest, outputStream); assertEquals(testData, outputStream.toString("UTF-8")); String testData2 = "herp"; String fileDigest2 = DigestUtils.sha256Hex(from(testData2)); cardDataService.createFile("test2.txt", fileDigest2, 4, card1.getId(), from(testData2), "text", user, new Date()); files = cardDataRepo.findAllFilesByCardId(card1.getId()); assertEquals(2, files.size()); FileDataLight file2 = files.get(1); assertEquals(fileDigest2, file2.getDigest()); assertEquals("test2.txt", file2.getName()); assertEquals("text", file2.getContentType()); Assert.assertNull(file2.getReferenceId()); ByteArrayOutputStream outputStream2 = new ByteArrayOutputStream(); cardDataRepo.outputFileContent(fileDigest2, outputStream2); assertEquals(testData2, outputStream2.toString("UTF-8")); FileDataLight fileData = cardDataRepo.getUndeletedFileByCardDataId(file.getCardDataId()); assertEquals(file.getContentType(), fileData.getContentType()); assertEquals(file.getDigest(), fileData.getDigest()); assertEquals(file.getName(), fileData.getName()); } @Test public void TestUploadSameFileToCard() throws IOException { String testData = "derp"; String fileDigest = DigestUtils.sha256Hex(from(testData)); cardDataService.createFile("test.txt", fileDigest, 4, card1.getId(), from(testData), "text", user, new Date()); List<FileDataLight> files = cardDataRepo.findAllFilesByCardId(card1.getId()); assertEquals(1, files.size()); FileDataLight file = files.get(0); assertEquals(fileDigest, file.getDigest()); assertEquals("test.txt", file.getName()); assertEquals("text", file.getContentType()); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); cardDataRepo.outputFileContent(fileDigest, outputStream); assertEquals(testData, outputStream.toString("UTF-8")); // without reference String fileDigest2 = DigestUtils.sha256Hex(from(testData)); assertEquals(fileDigest, fileDigest2); cardDataService .createFile("test2.txt", fileDigest2, 4, card1.getId(), from(testData), "text", user, new Date()); // with reference String fileDigest3 = DigestUtils.sha256Hex(from(testData)); assertEquals(fileDigest, fileDigest3); cardDataService .createFile("test3.txt", fileDigest3, 4, card1.getId(), from(testData), "text", user, new Date()); files = cardDataRepo.findAllFilesByCardId(card1.getId()); assertEquals(1, files.size()); } @Test public void TestDeleteFilesAndUndo() throws IOException { String testData = "derp"; String fileDigest = DigestUtils.sha256Hex(from(testData)); cardDataService.createFile("test.txt", fileDigest, 4, card1.getId(), from(testData), "text", user, new Date()); List<FileDataLight> files = cardDataRepo.findAllFilesByCardId(card1.getId()); assertEquals(1, files.size()); FileDataLight file = files.get(0); assertEquals(fileDigest, file.getDigest()); assertEquals("test.txt", file.getName()); assertEquals("text", file.getContentType()); Assert.assertNull(file.getReferenceId()); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); cardDataRepo.outputFileContent(fileDigest, outputStream); assertEquals(testData, outputStream.toString("UTF-8")); Event deleteFileEvent = cardDataService.deleteFile(file.getCardDataId(), user, new Date()); List<FileDataLight> files2 = cardDataRepo.findAllFilesByCardId(card1.getId()); assertEquals(0, files2.size()); cardDataService.undoDeleteFile(deleteFileEvent); files2 = cardDataRepo.findAllFilesByCardId(card1.getId()); assertEquals(1, files2.size()); } @Test(expected = DataIntegrityViolationException.class) public void testCheckEnsureReferenceIdConstraints() { CardData list = cardDataService.createActionList(card1.getId(), "name", user.getId(), new Date()); cardDataRepo.createDataWithReferenceOrder(card1.getId(), list.getId(), CardType.COMMENT, "body"); } }