package services; import dao.*; import model.AuthToken; import model.Person; import model.User; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import request.LoginRequest; import request.PersonRequest; import result.LoginResult; import result.PersonResult; import result.PersonsResult; import java.util.ArrayList; import java.util.List; import static org.junit.jupiter.api.Assertions.*; public class PersonServiceTest { private Database db; PersonDAO pDao; UserDAO uDao; AuthTokenDAO aDao; @BeforeEach public void setUp() throws DataAccessException { db = new Database(); db.openConnection(); db.clearTables(); db.closeConnection(true); } @AfterEach public void tearDown() throws DataAccessException { db.openConnection(); db.clearTables(); db.closeConnection(true); } /** * Puts a user, authToken, and person into the database, then attempts to retrieve the person * that was placed in the database * @throws DataAccessException */ @Test public void personServicePass() throws DataAccessException { User user = new User("JohnA", "subway", "ja@gmail.com", "John", "Allen", "m", "abc123"); uDao = new UserDAO(db.getConnection()); uDao.createUser(user); db.closeConnection(true); AuthToken authToken = new AuthToken("JohnA", "1234"); aDao = new AuthTokenDAO(db.getConnection()); aDao.createAuthToken(authToken); db.closeConnection(true); Person person = new Person("1702", "JohnA", "Sally", "Jenkins", "f", "4029", "2093", "1023"); pDao = new PersonDAO(db.getConnection()); pDao.createPerson(person); db.closeConnection(true); PersonService pService = new PersonService(); PersonRequest request = new PersonRequest("1702", "1234"); PersonResult pResult = pService.getPerson(request); assertEquals(user.getUsername(), pResult.getAssociatedUsername()); assertEquals(person.getPersonID(), request.getPersonID()); assertEquals(person.getFirstName(), pResult.getFirstName()); assertEquals(person.getLastName(), pResult.getLastName()); assertEquals(person.getGender(), pResult.getGender()); assertEquals(person.getFatherID(), pResult.getFatherID()); assertEquals(person.getFirstName(), pResult.getFirstName()); assertEquals(person.getFatherID(), pResult.getFatherID()); assertEquals(person.getMotherID(), pResult.getMotherID()); assertEquals(person.getSpouseID(), pResult.getSpouseID()); assertTrue(pResult.isSuccess()); } /** * Same thing as the first test except we provide an invalid authToken (so the person cannot be fetched) * @throws DataAccessException */ @Test public void personServiceFail() throws DataAccessException { User user = new User("JohnA", "subway", "ja@gmail.com", "John", "Allen", "m", "abc123"); uDao = new UserDAO(db.getConnection()); uDao.createUser(user); db.closeConnection(true); AuthToken authToken = new AuthToken("JohnA", "1234"); aDao = new AuthTokenDAO(db.getConnection()); aDao.createAuthToken(authToken); db.closeConnection(true); Person person = new Person("1702", "JohnA", "Sally", "Jenkins", "f", "4029", "2093", "1023"); pDao = new PersonDAO(db.getConnection()); pDao.createPerson(person); db.closeConnection(true); PersonService pService = new PersonService(); //Test should fail because the authToken does not match the user PersonRequest request = new PersonRequest("1702", "0987"); PersonResult pResult = pService.getPerson(request); assertTrue(pResult.getMessage().contains("Error:")); assertFalse(pResult.isSuccess()); } /** * Tests retrieving multiple persons in the database * @throws DataAccessException */ @Test public void personsServicePass() throws DataAccessException { User user = new User("JohnA", "subway", "ja@gmail.com", "John", "Allen", "m", "abc123"); uDao = new UserDAO(db.getConnection()); uDao.createUser(user); db.closeConnection(true); AuthToken authToken = new AuthToken("JohnA", "1234"); aDao = new AuthTokenDAO(db.getConnection()); aDao.createAuthToken(authToken); db.closeConnection(true); Person person1 = new Person("1702", "JohnA", "Sally", "Jenkins", "f", "4029", "2093", "1023"); Person person2 = new Person("6705", "JohnA", "James", "Smith", "m", "4278", "5971", "5940"); pDao = new PersonDAO(db.getConnection()); pDao.createPerson(person1); pDao.createPerson(person2); db.closeConnection(true); PersonService pService = new PersonService(); PersonRequest request = new PersonRequest("1702", "1234"); PersonsResult pResult = pService.getPersons(request); List persons = new ArrayList<>(); persons = pResult.getData(); //Check the two persons in our list to make sure their data matches with the initial persons we created assertEquals(persons.get(0).getPersonID(), person1.getPersonID()); assertEquals(persons.get(0).getAssociatedUsername(), person1.getAssociatedUsername()); assertEquals(persons.get(0).getFirstName(), person1.getFirstName()); assertEquals(persons.get(0).getLastName(), person1.getLastName()); assertEquals(persons.get(0).getGender(), person1.getGender()); assertEquals(persons.get(0).getFatherID(), person1.getFatherID()); assertEquals(persons.get(0).getMotherID(), person1.getMotherID()); assertEquals(persons.get(0).getSpouseID(), person1.getSpouseID()); assertEquals(persons.get(1).getPersonID(), person2.getPersonID()); assertEquals(persons.get(1).getAssociatedUsername(), person2.getAssociatedUsername()); assertEquals(persons.get(1).getFirstName(), person2.getFirstName()); assertEquals(persons.get(1).getGender(), person2.getGender()); assertEquals(persons.get(1).getFatherID(), person2.getFatherID()); assertEquals(persons.get(1).getMotherID(), person2.getMotherID()); assertEquals(persons.get(1).getSpouseID(), person2.getSpouseID()); assertTrue(pResult.isSuccess()); } /** * Tests retrieving multiple persons in the database except the provided authToken is invalid * @throws DataAccessException */ @Test public void personsServiceFail() throws DataAccessException { User user = new User("JohnA", "subway", "ja@gmail.com", "John", "Allen", "m", "abc123"); uDao = new UserDAO(db.getConnection()); uDao.createUser(user); db.closeConnection(true); AuthToken authToken = new AuthToken("JohnA", "1234"); aDao = new AuthTokenDAO(db.getConnection()); aDao.createAuthToken(authToken); db.closeConnection(true); Person person1 = new Person("1702", "JohnA", "Sally", "Jenkins", "f", "4029", "2093", "1023"); Person person2 = new Person("6705", "JohnA", "James", "Smith", "m", "4278", "5971", "5940"); pDao = new PersonDAO(db.getConnection()); pDao.createPerson(person1); pDao.createPerson(person2); db.closeConnection(true); PersonService pService = new PersonService(); //Test should fail because the authToken does not match the user PersonRequest request = new PersonRequest("1702", "2535"); PersonsResult pResult = pService.getPersons(request); List persons = new ArrayList<>(); persons = pResult.getData(); assertTrue(pResult.getMessage().contains("Error:")); assertFalse(pResult.isSuccess()); } }