Family-Map-Project / FamilyMapServer / FamilyMapServerStudent-master / java / services / PersonServiceTest.java
PersonServiceTest.java
Raw
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<Person> 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<Person> persons = new ArrayList<>();

        persons = pResult.getData();

        assertTrue(pResult.getMessage().contains("Error:"));
        assertFalse(pResult.isSuccess());
    }
}