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()); } }