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.User; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @Tag("Persistence-tier") public class UserFileDAOTest { UserFileDAO userFileDAO; User[] testUsers; ObjectMapper mockObjectMapper; @BeforeEach public void setupHeroFileDAO() throws IOException { mockObjectMapper = mock(ObjectMapper.class); testUsers = new User[3]; testUsers[0] = new User("bob"); testUsers[1] = new User("admin"); testUsers[2] = new User("jelly12"); // 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"),User[].class)) .thenReturn(testUsers); userFileDAO = new UserFileDAO("doesnt_matter.txt",mockObjectMapper); } @Test public void GetUsersTest() throws IOException { User[] users = userFileDAO.getUsers(); assertEquals(users.length,testUsers.length); for (int i = 0; i < testUsers.length;++i) { boolean isInArray = false; for (User user : testUsers) { if (users[i].getName().equals(user.getName())) { isInArray = true; } } assertTrue(isInArray); } } @Test public void FindUsersTest() throws IOException { User realUser1 = userFileDAO.getUser("bob"); User realUser2 = userFileDAO.getUser("admin"); assertEquals(testUsers[0], realUser1); assertEquals(testUsers[1], realUser2); } @Test public void FindUsersNullTest() throws IOException { User fakeUser = userFileDAO.getUser("phil.n.thropist"); assertNull(fakeUser); } @Test public void CreateUserTest() throws IOException { User newUser = new User("keshey"); userFileDAO.createUser(newUser); User actualUser = userFileDAO.getUser("keshey"); assertNotNull(actualUser); assertEquals(actualUser.getName(), newUser.getName()); } @Test public void DeleteUserTest() throws IOException { User notDeletedUser = userFileDAO.getUser("jelly12"); assertNotNull(notDeletedUser); boolean isDeleted = userFileDAO.deleteUser("jelly12"); assertTrue(isDeleted); User deletedUser = userFileDAO.getUser("jelly12"); assertNull(deletedUser); } @Test public void UpdateUserTest() throws IOException { User toBeUpdatedUser = userFileDAO.getUser("admin"); assertNotNull(toBeUpdatedUser); User updatedUser = new User("jellinadmin"); updatedUser = userFileDAO.updateUser(updatedUser, "admin"); assertNotEquals(toBeUpdatedUser, updatedUser); assertEquals("jellinadmin", updatedUser.getName()); } }