package com.urbanairship.api.segment;
import com.google.common.net.HttpHeaders;
import com.urbanairship.api.client.Request;
import com.urbanairship.api.client.ResponseParser;
import com.urbanairship.api.push.model.audience.Selector;
import com.urbanairship.api.push.model.audience.Selectors;
import com.urbanairship.api.push.model.audience.location.DateRange;
import com.urbanairship.api.segments.SegmentRequest;
import com.urbanairship.api.segments.parse.SegmentObjectMapper;
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 org.junit.Assert.assertEquals;
public class SegmentRequestTest {
private static final String TEST_QUERY_PATH = "/api/segments/";
private static final String TEST_SEGMENT_ID = "abcdefg";
private static final ObjectMapper mapper = SegmentObjectMapper.getInstance();
String displayName = "JavaSoFunWoooooo";
Selector andSelector = Selectors.tags("java", "lib");
Selector criteria = Selectors.or(andSelector, Selectors.tag("mfd"));
DateRange dateRange = Selectors.weeks(3);
Selector location = Selectors.location("blah", dateRange);
Selector locationCriteria = Selectors.or(criteria, location);
SegmentRequest createRequest;
SegmentRequest updateRequest;
SegmentRequest createLocationRequest;
SegmentRequest updateLocationRequest;
@Before
public void setup() {
createRequest = SegmentRequest.newRequest()
.setCriteria(criteria)
.setDisplayName(displayName);
createLocationRequest = SegmentRequest.newRequest()
.setCriteria(locationCriteria)
.setDisplayName(displayName);
updateRequest = SegmentRequest.newUpdateRequest(TEST_SEGMENT_ID)
.setCriteria(criteria)
.setDisplayName(displayName);
updateLocationRequest = SegmentRequest.newUpdateRequest(TEST_SEGMENT_ID)
.setCriteria(locationCriteria)
.setDisplayName(displayName);
}
@Test
public void testContentType() throws Exception {
assertEquals(createRequest.getContentType(), ContentType.APPLICATION_JSON);
assertEquals(updateRequest.getContentType(), ContentType.APPLICATION_JSON);
assertEquals(createLocationRequest.getContentType(), ContentType.APPLICATION_JSON);
assertEquals(updateLocationRequest.getContentType(), ContentType.APPLICATION_JSON);
}
@Test
public void testMethod() throws Exception {
assertEquals(createRequest.getHttpMethod(), Request.HttpMethod.POST);
assertEquals(updateRequest.getHttpMethod(), Request.HttpMethod.PUT);
assertEquals(createLocationRequest.getHttpMethod(), Request.HttpMethod.POST);
assertEquals(updateLocationRequest.getHttpMethod(), Request.HttpMethod.PUT);
}
@Test
public void testHeaders() throws Exception {
Map<String, String> headers = new HashMap<String, String>();
headers.put(HttpHeaders.ACCEPT, Request.UA_VERSION_JSON);
assertEquals(createRequest.getRequestHeaders(), headers);
assertEquals(updateRequest.getRequestHeaders(), headers);
assertEquals(createLocationRequest.getContentType(), ContentType.APPLICATION_JSON);
assertEquals(updateLocationRequest.getContentType(), ContentType.APPLICATION_JSON);
}
@Test
public void testURI() throws Exception {
URI baseURI = URI.create("https://go.urbanairship.com");
URI expectedCreateURI = URI.create("https://go.urbanairship.com" + TEST_QUERY_PATH);
URI expectedUpdateURI = URI.create("https://go.urbanairship.com" + TEST_QUERY_PATH + TEST_SEGMENT_ID);
assertEquals(createRequest.getUri(baseURI), expectedCreateURI);
assertEquals(updateRequest.getUri(baseURI), expectedUpdateURI);
assertEquals(createLocationRequest.getUri(baseURI), expectedCreateURI);
assertEquals(updateLocationRequest.getUri(baseURI), expectedUpdateURI);
}
@Test
public void testParser() throws Exception {
ResponseParser responseParser = new ResponseParser<String>() {
@Override
public String parse(String response) throws IOException {
return response;
}
};
assertEquals(createRequest.getResponseParser().parse(null), responseParser.parse(null));
assertEquals(updateRequest.getResponseParser().parse(null), responseParser.parse(null));
assertEquals(createLocationRequest.getResponseParser().parse(null), responseParser.parse(null));
assertEquals(updateLocationRequest.getResponseParser().parse(null), responseParser.parse(null));
}
}