Family-Map-Project / FamilyMapServer / FamilyMapServerStudent-master / java / services / EventServiceTest.java
EventServiceTest.java
Raw
package services;

import dao.*;
import model.AuthToken;
import model.Event;
import model.User;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import request.EventRequest;
import result.EventResult;
import result.EventsResult;

import java.util.ArrayList;
import java.util.List;

import static org.junit.jupiter.api.Assertions.*;

public class EventServiceTest
{
    private Database db;
    EventDAO eDao;
    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 event into the database, then attempts to retrieve the event
     * that was placed in the database
     * @throws DataAccessException
     */
    @Test
    public void eventServicePass() 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);

        Event event = new Event("0689", "JohnA", "1702", 12.0122f,
                16.0325f, "Egypt", "Cairo", "Birth", 1980);

        eDao = new EventDAO(db.getConnection());
        eDao.createEvent(event);
        db.closeConnection(true);

        EventService eService = new EventService();

        EventRequest request = new EventRequest("0689", "1234");

        EventResult eResult = eService.getEvent(request);

        assertEquals(event.getEventID(), eResult.getEventID());
        assertEquals(event.getUsername(), eResult.getAssociatedUsername());
        assertEquals(event.getPersonID(), eResult.getPersonID());
        assertEquals(event.getLatitude(), eResult.getLatitude());
        assertEquals(event.getLongitude(), eResult.getLongitude());
        assertEquals(event.getCountry(), eResult.getCountry());
        assertEquals(event.getCity(), eResult.getCity());
        assertEquals(event.getEventType(), eResult.getEventType());
        assertEquals(event.getYear(), eResult.getYear());

        assertTrue(eResult.isSuccess());
    }

    /**
     * Same thing as the first test except we provide an invalid authToken (so the event cannot be fetched)
     * @throws DataAccessException
     */
    @Test
    public void eventServiceFail() 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);

        Event event = new Event("0689", "JohnA", "1702", 12.0122f,
                16.0325f, "Egypt", "Cairo", "Birth", 1980);

        eDao = new EventDAO(db.getConnection());
        eDao.createEvent(event);
        db.closeConnection(true);

        EventService eService = new EventService();

        //Invalid authtoken is provided

        EventRequest request = new EventRequest("0689", "4657");

        EventResult eResult = eService.getEvent(request);

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

    /**
     * Tests retrieving multiple events in the database
     * @throws DataAccessException
     */
    @Test
    public void eventsServicePass() 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);

        Event event1 = new Event("0689", "JohnA", "1702", 12.0122f,
                16.0325f, "Egypt", "Cairo", "Birth", 1980);

        Event event2 = new Event("1040", "JohnA", "5407",
                47.1212f, 59.1323f, "Greece", "Athens", "Marriage", 1973);

        eDao = new EventDAO(db.getConnection());
        eDao.createEvent(event1);
        eDao.createEvent(event2);
        db.closeConnection(true);

        EventService eService = new EventService();

        EventRequest request = new EventRequest("0689", "1234");

        EventsResult eResult = eService.getEvents(request);

        List<Event> events = new ArrayList<>();

        events = eResult.getData();

        //Check the two events in our list to make sure their data matches with the initial events we created

        assertEquals(events.get(0).getEventID(), event1.getEventID());
        assertEquals(events.get(0).getUsername(), event1.getUsername());
        assertEquals(events.get(0).getPersonID(), event1.getPersonID());
        assertEquals(events.get(0).getLatitude(), event1.getLatitude());
        assertEquals(events.get(0).getLongitude(), event1.getLongitude());
        assertEquals(events.get(0).getCountry(), event1.getCountry());
        assertEquals(events.get(0).getCity(), event1.getCity());
        assertEquals(events.get(0).getEventType(), event1.getEventType());
        assertEquals(events.get(0).getYear(), event1.getYear());

        assertEquals(events.get(1).getEventID(), event2.getEventID());
        assertEquals(events.get(1).getUsername(), event2.getUsername());
        assertEquals(events.get(1).getPersonID(), event2.getPersonID());
        assertEquals(events.get(1).getLatitude(), event2.getLatitude());
        assertEquals(events.get(1).getLongitude(), event2.getLongitude());
        assertEquals(events.get(1).getCountry(), event2.getCountry());
        assertEquals(events.get(1).getCity(), event2.getCity());
        assertEquals(events.get(1).getEventType(), event2.getEventType());
        assertEquals(events.get(1).getYear(), event2.getYear());

        assertTrue(eResult.isSuccess());
    }

    /**
     * Tests retrieving multiple events in the database except the provided authToken is invalid
     * @throws DataAccessException
     */
    @Test
    public void eventsServiceFail() 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);

        Event event1 = new Event("0689", "JohnA", "1702", 12.0122f,
                16.0325f, "Egypt", "Cairo", "Birth", 1980);

        Event event2 = new Event("1040", "JohnA", "5407",
                47.1212f, 59.1323f, "Greece", "Athens", "Marriage", 1973);

        eDao = new EventDAO(db.getConnection());
        eDao.createEvent(event1);
        eDao.createEvent(event2);
        db.closeConnection(true);

        EventService eService = new EventService();

        //Provide an incorrect authToken, so we shouldn't be able to find the events

        EventRequest request = new EventRequest("0689", "6547");

        EventsResult eResult = eService.getEvents(request);

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