package functional; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import models.User; import org.junit.After; import org.junit.Before; import org.junit.Test; import play.Logger; import play.cache.Cache; import play.mvc.Http; import play.test.Fixtures; import play.test.FunctionalTest; import utils.GsonFactory; import DTO.MeetingDTO; import assemblers.MeetingAssembler; /** * Tests the Locations Controller * * @see Locations * @author Alex Jarvis axj7@aber.ac.uk */ public class LocationsTest extends FunctionalTest { public static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; private Http.Response response; private static final String BASE_CONTROLLER_PATH = "/locations"; private static final String MEETINGS_CONTROLLER_PATH = "/meetings"; private String userBaseQuery = "?oauth_token="; private String user1Query = ""; private String user2Query = ""; private User user1; private User user2; @Before public void setUp() { Fixtures.deleteDatabase(); Cache.clear(); Fixtures.loadModels("test-data.yml"); user1 = User.find("byEmail", "bob@gmail.com").first(); user1Query += userBaseQuery + user1.accessToken; user2 = User.find("byEmail", "bob2@gmail.com").first(); user2Query += userBaseQuery + user2.accessToken; } @After public void log() { if (response != null) { Logger.debug("Response Status: " + response.status.toString()); Logger.debug("Response: " + (response.out.toString().isEmpty() ? "" : "\n" + response.out.toString()) ); } } @Test public void testRecent() { // Create a meeting fifteen minutes from now Date now = new Date(); Calendar fifteenMinsFromNow = new GregorianCalendar(); fifteenMinsFromNow.setTime(now); fifteenMinsFromNow.add(Calendar.MINUTE, 15); DateFormat dateFormat = new SimpleDateFormat(ISO8601_DATE_FORMAT); String fifteenMinsFromNowString = dateFormat.format(fifteenMinsFromNow.getTime()); String body = "{\"time\":\"" + fifteenMinsFromNowString + "\"," + "\"place\":{\"latitude\":52.416117,\"longitude\":-4.083803}," + "\"attendees\":[{\"id\":" + user1.id + "},{\"id\":" + user2.id + "}]," + "\"title\":\"Meeting title\"," + "\"description\":\"Meeting description\"," + "\"type\":\"Meeting type\"}"; Http.Request request = newRequest(); request.params.put("body", body); response = POST(request, MEETINGS_CONTROLLER_PATH + user1Query, "application/json; charset=UTF-8", body); assertStatus(201, response); // Get user2 to accept the meeting MeetingDTO meetingDTO = MeetingAssembler.meetingDTOWithJsonString(response.out.toString()); response = POST(MEETINGS_CONTROLLER_PATH + "/" + meetingDTO.id + "/accept" + user2Query); assertIsOk(response); // Update user2's location testUpdateUser2(); // Get the Recent locations response = GET(BASE_CONTROLLER_PATH + user1Query); assertIsOk(response); assertTrue(response.out.size() > 0); } @Test public void testUpdate() { DateFormat dateFormat = new SimpleDateFormat(ISO8601_DATE_FORMAT); String dateNow = dateFormat.format(new Date()); String body = "[{\"time\":\"" + dateNow + "\"," + "\"coordinate\":{\"latitude\":52.416117,\"longitude\":-4.083803}," + "\"speed\":0," + "\"altitude\":0," + "\"trueHeading\":0," + "\"verticalAccuracy\":0," + "\"horizontalAccuracy\":0}]"; Http.Request request = newRequest(); request.params.put("body", body); response = POST(request, BASE_CONTROLLER_PATH + user1Query, "application/json; charset=UTF-8", body); assertStatus(200, response); } @Test public void testUpdateUser2() { DateFormat dateFormat = new SimpleDateFormat(ISO8601_DATE_FORMAT); String dateNow = dateFormat.format(new Date()); String body = "[{\"time\":\"" + dateNow + "\"," + "\"coordinate\":{\"latitude\":52.416117,\"longitude\":-4.083803}," + "\"speed\":0," + "\"altitude\":0," + "\"trueHeading\":0," + "\"verticalAccuracy\":0," + "\"horizontalAccuracy\":0}]"; Http.Request request = newRequest(); request.params.put("body", body); response = POST(request, BASE_CONTROLLER_PATH + user2Query, "application/json; charset=UTF-8", body); assertStatus(200, response); } }