package com.urbanairship.api.templates; import com.urbanairship.api.client.Request; import com.urbanairship.api.client.ResponseParser; import com.urbanairship.api.push.model.DeviceType; import com.urbanairship.api.push.model.DeviceTypeData; import com.urbanairship.api.push.model.audience.Selectors; import com.urbanairship.api.templates.model.TemplatePushPayload; import com.urbanairship.api.templates.model.TemplateResponse; import com.urbanairship.api.templates.model.TemplateSelector; import com.urbanairship.api.templates.parse.TemplatesObjectMapper; import org.apache.http.HttpHeaders; import org.apache.http.entity.ContentType; import org.codehaus.jackson.map.ObjectMapper; 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 junit.framework.Assert.assertEquals; public class TemplatePushRequestTest { private final static ObjectMapper mapper = TemplatesObjectMapper.getInstance(); private final static String PATH_NAME = "/api/templates/push/"; TemplatePushRequest request; TemplatePushRequest requestValidateOnly; TemplatePushPayload payload = TemplatePushPayload.newBuilder() .setAudience(Selectors.namedUser("named_user")) .setDeviceTypes(DeviceTypeData.of(DeviceType.ANDROID)) .setMergeData(TemplateSelector.newBuilder() .setTemplateId("template-id") .addSubstitution("FIRST_NAME", "Firsty") .addSubstitution("LAST_NAME", "Lasty") .addSubstitution("TITLE", "Dr.") .build()) .build(); @Before public void setup() { request = TemplatePushRequest.newRequest() .addTemplatePushPayload(payload); requestValidateOnly = TemplatePushRequest.newRequest() .addTemplatePushPayload(payload) .setValidateOnly(true); } @Test public void testContentType() throws Exception { assertEquals(request.getContentType(), ContentType.APPLICATION_JSON); assertEquals(requestValidateOnly.getContentType(), ContentType.APPLICATION_JSON); } @Test public void testMethod() throws Exception { assertEquals(request.getHttpMethod(), Request.HttpMethod.POST); assertEquals(requestValidateOnly.getHttpMethod(), Request.HttpMethod.POST); } @Test public void testBody() throws Exception { assertEquals(request.getRequestBody(), mapper.writeValueAsString(payload)); assertEquals(requestValidateOnly.getRequestBody(), mapper.writeValueAsString(payload)); } @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(request.getRequestHeaders(), headers); assertEquals(requestValidateOnly.getRequestHeaders(), headers); } @Test public void testURI() throws Exception { URI baseURI = URI.create("https://go.urbanairship.com"); URI expectedUri = URI.create("https://go.urbanairship.com" + PATH_NAME); assertEquals(request.getUri(baseURI), expectedUri); expectedUri = URI.create("https://go.urbanairship.com" + PATH_NAME + "validate/"); assertEquals(requestValidateOnly.getUri(baseURI), expectedUri); } @Test public void testResponseParser() throws Exception { String responseJson = "{" + "\"ok\": true," + "\"operation_id\": \"df6a6b50-9843-0304-d5a5-743f246a4946\"," + "\"push_ids\": [" + "\"9d78a53b-b16a-c58f-b78d-181d5e242078\"," + "\"1cbfbfa2-08d1-92c2-7119-f8f7f670f5f6\"" + "]" + "}"; final ResponseParser responseParser = new ResponseParser<TemplateResponse>() { @Override public TemplateResponse parse(String response) throws IOException { return mapper.readValue(response, TemplateResponse.class); } }; assertEquals(request.getResponseParser().parse(responseJson), responseParser.parse(responseJson)); assertEquals(requestValidateOnly.getResponseParser().parse(responseJson), responseParser.parse(responseJson)); } }