package com.ufund.api.ufundapi.persistence; import java.io.File; import java.io.IOException; 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 org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import com.fasterxml.jackson.databind.ObjectMapper; import com.ufund.api.ufundapi.model.User; @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() { 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].getUsername().equals(user.getUsername())) { isInArray = true; break; } } assertTrue(isInArray); } } @Test public void findUsersTest() { User realUser1 = userFileDAO.getUser("bob"); User realUser2 = userFileDAO.getUser("admin"); assertEquals(testUsers[0], realUser1); assertEquals(testUsers[1], realUser2); } @Test public void findUsersNullTest() { User fakeUser = userFileDAO.getUser("phil.n.thropist"); assertNull(fakeUser); } @Test public void createUserTest() throws IOException { User newUser = new User("keshey"); userFileDAO.addUser(newUser); User actualUser = userFileDAO.getUser("keshey"); assertNotNull(actualUser); assertEquals(actualUser.getUsername(), newUser.getUsername()); } @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 = User.create("admin", "newPass"); updatedUser = userFileDAO.updateUser(updatedUser); assertNotEquals(toBeUpdatedUser, updatedUser); assertEquals("admin", updatedUser.getUsername()); } }