package com.ufund.api.ufundapi.persistence; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.io.File; import java.io.IOException; import com.fasterxml.jackson.databind.ObjectMapper; import com.ufund.api.ufundapi.model.Need; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import com.ufund.api.ufundapi.model.Need.GoalType; @Tag("Persistence-tier") public class CupboardFileDAOTest { CupboardFileDAO cupboardFileDao; Need[] testNeeds; ObjectMapper mockObjectMapper; @BeforeEach public void setupCupboardFileDao() throws IOException { mockObjectMapper = mock(ObjectMapper.class); testNeeds = new Need[3]; testNeeds[0] = new Need("one", 0, 100, Need.GoalType.MONETARY); testNeeds[1] = new Need("two", 1, 100, Need.GoalType.MONETARY); testNeeds[2] = new Need("three", 2, 100, Need.GoalType.MONETARY); // When the object mapper is supposed to read from the file // the mock object mapper will return the hero array above when(mockObjectMapper .readValue(new File("doesnt_matter.txt"),Need[].class)) .thenReturn(testNeeds); cupboardFileDao = new CupboardFileDAO("doesnt_matter.txt",mockObjectMapper); } @Test public void GetNeedsTest() throws IOException { Need[] needs = cupboardFileDao.getNeeds(); assertEquals(needs.length,testNeeds.length); assertEquals(needs[0].getName(), testNeeds[0].getName()); } @Test public void GetNeedTest() throws IOException { Need need1 = cupboardFileDao.getNeed(0); assertEquals(testNeeds[0], need1); } @Test public void Fet() throws IOException { String targetName1 = "one"; String targetName2 = "two"; Need need1 = cupboardFileDao.findNeeds(targetName1)[0]; Need need2 = cupboardFileDao.findNeeds(targetName2)[0]; assertEquals(testNeeds[0], need1); assertEquals(testNeeds[1], need2); } @Test public void CreateNeedTest() throws IOException { Need newNeed = new Need("sea urchin hats", 3, 100, GoalType.PHYSICAL); Need actualNeed = cupboardFileDao.createNeed(newNeed); assertNotNull(actualNeed); assertEquals(actualNeed.getName(), newNeed.getName()); } @Test public void DeleteNeedTest() throws IOException { Need undeletedNeed = cupboardFileDao.getNeed(0); assertNotNull(undeletedNeed); boolean isDeleted = cupboardFileDao.deleteNeed(0); assertTrue(isDeleted); Need deletedNeed = cupboardFileDao.getNeed(0); assertNull(deletedNeed); } @Test public void UpdateNeedTest() throws IOException { Need[] needs = cupboardFileDao.getNeeds(); Need unupdatedNeed = needs[needs.length - 1]; assertNotNull(unupdatedNeed); Need updatedNeed = new Need("sequin sea urchin hats", 2, 100, GoalType.PHYSICAL); Need actualNeed = cupboardFileDao.updateNeed(updatedNeed); assertEquals(actualNeed, updatedNeed); assertNotEquals(actualNeed, unupdatedNeed); } }