package com.urbanairship.api.reports; import com.google.common.net.HttpHeaders; import com.urbanairship.api.client.Request; import com.urbanairship.api.client.ResponseParser; import com.urbanairship.api.reports.model.PlatformStatsResponse; import com.urbanairship.api.reports.model.Precision; import com.urbanairship.api.reports.parse.ReportsObjectMapper; import org.apache.http.entity.ContentType; import org.codehaus.jackson.map.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.Period; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.net.URI; import java.util.HashMap; import java.util.Map; import static org.junit.Assert.assertEquals; public class PlatformStatsRequestTest { ObjectMapper mapper = ReportsObjectMapper.getInstance(); DateTime start = new DateTime(2014, 10, 1, 12, 0, 0, 0, DateTimeZone.UTC); DateTime end = start.plus(Period.hours(48)); PlatformStatsRequest timeInAppRequest; PlatformStatsRequest appOpensRequest; PlatformStatsRequest optInsRequest; PlatformStatsRequest optOutsRequest; PlatformStatsRequest pushSendsRequest; PlatformStatsRequest nextPageRequest; String appOpensUri = "https://go.urbanairship.com/api/reports/opens/?start=2014-10-01T12%3A00%3A00&end=2014-10-03T12%3A00%3A00&precision=DAILY"; String timeInAppUri = "https://go.urbanairship.com/api/reports/timeinapp/?start=2014-10-01T12%3A00%3A00&end=2014-10-03T12%3A00%3A00&precision=DAILY"; String optInsUri = "https://go.urbanairship.com/api/reports/optins/?start=2014-10-01T12%3A00%3A00&end=2014-10-03T12%3A00%3A00&precision=DAILY"; String optOutsUri = "https://go.urbanairship.com/api/reports/optouts/?start=2014-10-01T12%3A00%3A00&end=2014-10-03T12%3A00%3A00&precision=DAILY"; String pushSendsUri = "https://go.urbanairship.com/api/reports/sends/?start=2014-10-01T12%3A00%3A00&end=2014-10-03T12%3A00%3A00&precision=DAILY"; String nextPageUri = "https://go.urbanairship.com/api/reports/opens/?start=2014-05-05T03:00:00.000Z&end=2014-11-29T00:00:00.000Z&precision=HOURLY"; @Before public void setupCreate() { DateTime start = new DateTime(2014, 10, 1, 12, 0, 0, 0, DateTimeZone.UTC); DateTime end = start.plus(Period.hours(48)); timeInAppRequest = PlatformStatsRequest.newRequest(PlatformStatsRequestType.TIME_IN_APP) .setStart(start) .setEnd(end) .setPrecision(Precision.DAILY); appOpensRequest = PlatformStatsRequest.newRequest(PlatformStatsRequestType.APP_OPENS) .setStart(start) .setEnd(end) .setPrecision(Precision.DAILY); optInsRequest = PlatformStatsRequest.newRequest(PlatformStatsRequestType.OPT_INS) .setStart(start) .setEnd(end) .setPrecision(Precision.DAILY); optOutsRequest = PlatformStatsRequest.newRequest(PlatformStatsRequestType.OPT_OUTS) .setStart(start) .setEnd(end) .setPrecision(Precision.DAILY); pushSendsRequest = PlatformStatsRequest.newRequest(PlatformStatsRequestType.SENDS) .setStart(start) .setEnd(end) .setPrecision(Precision.DAILY); nextPageRequest = PlatformStatsRequest.newRequest(URI.create(nextPageUri)); } @Test public void testContentType() throws Exception { assertEquals(timeInAppRequest.getContentType(), ContentType.APPLICATION_JSON); assertEquals(appOpensRequest.getContentType(), ContentType.APPLICATION_JSON); assertEquals(optInsRequest.getContentType(), ContentType.APPLICATION_JSON); assertEquals(optOutsRequest.getContentType(), ContentType.APPLICATION_JSON); assertEquals(pushSendsRequest.getContentType(), ContentType.APPLICATION_JSON); assertEquals(nextPageRequest.getContentType(), ContentType.APPLICATION_JSON); } @Test public void testMethod() throws Exception { assertEquals(timeInAppRequest.getHttpMethod(), Request.HttpMethod.GET); assertEquals(appOpensRequest.getHttpMethod(), Request.HttpMethod.GET); assertEquals(optInsRequest.getHttpMethod(), Request.HttpMethod.GET); assertEquals(optOutsRequest.getHttpMethod(), Request.HttpMethod.GET); assertEquals(pushSendsRequest.getHttpMethod(), Request.HttpMethod.GET); assertEquals(nextPageRequest.getHttpMethod(), Request.HttpMethod.GET); } @Test public void testBody() throws Exception { assertEquals(timeInAppRequest.getRequestBody(), null); assertEquals(appOpensRequest.getRequestBody(), null); assertEquals(optInsRequest.getRequestBody(), null); assertEquals(optOutsRequest.getRequestBody(), null); assertEquals(pushSendsRequest.getRequestBody(), null); assertEquals(nextPageRequest.getRequestBody(), null); } @Test public void testHeaders() throws Exception { Map<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.CONTENT_TYPE, Request.CONTENT_TYPE_JSON); headers.put(HttpHeaders.ACCEPT, Request.UA_VERSION_JSON); assertEquals(timeInAppRequest.getRequestHeaders(), headers); assertEquals(appOpensRequest.getRequestHeaders(), headers); assertEquals(optInsRequest.getRequestHeaders(), headers); assertEquals(optOutsRequest.getRequestHeaders(), headers); assertEquals(pushSendsRequest.getRequestHeaders(), headers); assertEquals(nextPageRequest.getRequestHeaders(), headers); } @Test public void testURI() throws Exception { URI baseURI = URI.create("https://go.urbanairship.com"); URI expectedTimeInAppURI = URI.create(timeInAppUri); assertEquals(timeInAppRequest.getUri(baseURI), expectedTimeInAppURI); URI expectedAppOpensUri = URI.create(appOpensUri); assertEquals(appOpensRequest.getUri(baseURI), expectedAppOpensUri); URI expectedOptInsUri = URI.create(optInsUri); assertEquals(optInsRequest.getUri(baseURI), expectedOptInsUri); URI expectedOptOutsUri = URI.create(optOutsUri); assertEquals(optOutsRequest.getUri(baseURI), expectedOptOutsUri); URI expectedPushSendsUri = URI.create(pushSendsUri); assertEquals(pushSendsRequest.getUri(baseURI), expectedPushSendsUri); assertEquals(nextPageRequest.getUri(baseURI), URI.create(nextPageUri)); } @Test public void testPlatformStatsParser() throws Exception { ResponseParser responseParser = new ResponseParser<PlatformStatsResponse>() { @Override public PlatformStatsResponse parse(String response) throws IOException { return mapper.readValue(response, PlatformStatsResponse.class); } }; String response = "{ \n" + " \"next_page\":\"Value for Next Page\",\n" + " \"timeinapp\":[ \n" + " { \n" + " \"date\":\"2013-07-01 00:00:00\",\n" + " \"ios\":1470,\n" + " \"android\":458\n" + " },\n" + " { \n" + " \"date\":\"2013-08-01 00:00:00\",\n" + " \"ios\":1662,\n" + " \"android\":523\n" + " }\n" + " ]\n" + "}"; assertEquals(timeInAppRequest.getResponseParser().parse(response), responseParser.parse(response)); } }