package com.urbanairship.api.channel;
import com.google.common.collect.ImmutableSet;
import com.google.common.net.HttpHeaders;
import com.urbanairship.api.channel.parse.ChannelObjectMapper;
import com.urbanairship.api.client.Request;
import org.apache.http.entity.ContentType;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.junit.Test;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import static org.junit.Assert.assertEquals;
public class ChannelTagRequestTest {
private static final ObjectMapper MAPPER = ChannelObjectMapper.getInstance();
@Test
public void testAddTagsBody() throws Exception {
String iosChannel1 = UUID.randomUUID().toString();
String iosChannel2 = UUID.randomUUID().toString();
String androidChannel = UUID.randomUUID().toString();
String expected = "{" +
"\"audience\":{" +
"\"ios_channel\":[\"" + iosChannel1+ "\",\"" + iosChannel2 +"\"]," +
"\"android_channel\":[\"" + androidChannel + "\"]" +
"}," +
"\"add\":{" +
"\"tag_group1\":[\"tag1\",\"tag2\",\"tag3\"]," +
"\"tag_group3\":[\"tag1\",\"tag2\",\"tag3\"]," +
"\"tag_group2\":[\"tag1\",\"tag2\",\"tag3\"]" +
"}" +
"}";
Set<String> iosChannels = ImmutableSet.of(iosChannel1, iosChannel2);
ChannelTagRequest request = ChannelTagRequest.newRequest()
.addIOSChannels(iosChannels)
.addAndroidChannel(androidChannel)
.addTags("tag_group1", ImmutableSet.of("tag1", "tag2", "tag3"))
.addTags("tag_group2", ImmutableSet.of("tag1", "tag2", "tag3"))
.addTags("tag_group3", ImmutableSet.of("tag1", "tag2", "tag3"));
JsonNode jsonFromObject = MAPPER.readTree(request.getRequestBody());
JsonNode jsonFromString = MAPPER.readTree(expected);
assertEquals(jsonFromObject, jsonFromString);
}
@Test
public void testRemoveTags() throws Exception {
String iosChannel1 = UUID.randomUUID().toString();
String iosChannel2 = UUID.randomUUID().toString();
String androidChannel = UUID.randomUUID().toString();
String expected = "{" +
"\"audience\":{" +
"\"ios_channel\":[\"" + iosChannel1+ "\",\"" + iosChannel2 +"\"]," +
"\"android_channel\":[\"" + androidChannel + "\"]" +
"}," +
"\"remove\":{" +
"\"tag_group1\":[\"tag1\",\"tag2\",\"tag3\"]," +
"\"tag_group3\":[\"tag1\",\"tag2\",\"tag3\"]," +
"\"tag_group2\":[\"tag1\",\"tag2\",\"tag3\"]" +
"}" +
"}";
Set<String> iosChannels = ImmutableSet.of(iosChannel1, iosChannel2);
ChannelTagRequest request = ChannelTagRequest.newRequest()
.addIOSChannels(iosChannels)
.addAndroidChannel(androidChannel)
.removeTags("tag_group1", ImmutableSet.of("tag1", "tag2", "tag3"))
.removeTags("tag_group2", ImmutableSet.of("tag1", "tag2", "tag3"))
.removeTags("tag_group3", ImmutableSet.of("tag1", "tag2", "tag3"));
JsonNode jsonFromObject = MAPPER.readTree(request.getRequestBody());
JsonNode jsonFromString = MAPPER.readTree(expected);
assertEquals(jsonFromObject, jsonFromString);
}
@Test
public void testSetTags() throws Exception {
String iosChannel1 = UUID.randomUUID().toString();
String iosChannel2 = UUID.randomUUID().toString();
String androidChannel = UUID.randomUUID().toString();
String expected = "{" +
"\"audience\":{" +
"\"ios_channel\":[\"" + iosChannel1+ "\",\"" + iosChannel2 +"\"]," +
"\"android_channel\":[\"" + androidChannel + "\"]" +
"}," +
"\"set\":{" +
"\"tag_group1\":[\"tag1\",\"tag2\",\"tag3\"]," +
"\"tag_group3\":[\"tag1\",\"tag2\",\"tag3\"]," +
"\"tag_group2\":[\"tag1\",\"tag2\",\"tag3\"]" +
"}" +
"}";
Set<String> iosChannels = ImmutableSet.of(iosChannel1, iosChannel2);
ChannelTagRequest request = ChannelTagRequest.newRequest()
.addIOSChannels(iosChannels)
.addAndroidChannel(androidChannel)
.setTags("tag_group1", ImmutableSet.of("tag1", "tag2", "tag3"))
.setTags("tag_group2", ImmutableSet.of("tag1", "tag2", "tag3"))
.setTags("tag_group3", ImmutableSet.of("tag1", "tag2", "tag3"));
JsonNode jsonFromObject = MAPPER.readTree(request.getRequestBody());
JsonNode jsonFromString = MAPPER.readTree(expected);
assertEquals(jsonFromObject, jsonFromString);
}
@Test
public void testAddAndRemoveTags() throws Exception {
String iosChannel1 = UUID.randomUUID().toString();
String iosChannel2 = UUID.randomUUID().toString();
String androidChannel = UUID.randomUUID().toString();
String expected = "{" +
"\"audience\":{" +
"\"ios_channel\":[\"" + iosChannel1+ "\",\"" + iosChannel2 +"\"]," +
"\"android_channel\":[\"" + androidChannel + "\"]" +
"}," +
"\"remove\":{" +
"\"tag_group1\":[\"tag4\",\"tag5\",\"tag6\"]," +
"\"tag_group3\":[\"tag4\",\"tag5\",\"tag6\"]," +
"\"tag_group2\":[\"tag4\",\"tag5\",\"tag6\"]" +
"}," +
"\"add\":{" +
"\"tag_group1\":[\"tag1\",\"tag2\",\"tag3\"]," +
"\"tag_group3\":[\"tag1\",\"tag2\",\"tag3\"]," +
"\"tag_group2\":[\"tag1\",\"tag2\",\"tag3\"]" +
"}" +
"}";
Set<String> iosChannels = ImmutableSet.of(iosChannel1, iosChannel2);
ChannelTagRequest request = ChannelTagRequest.newRequest()
.addIOSChannels(iosChannels)
.addAndroidChannel(androidChannel)
.addTags("tag_group1", ImmutableSet.of("tag1", "tag2", "tag3"))
.addTags("tag_group2", ImmutableSet.of("tag1", "tag2", "tag3"))
.addTags("tag_group3", ImmutableSet.of("tag1", "tag2", "tag3"))
.removeTags("tag_group1", ImmutableSet.of("tag4", "tag5", "tag6"))
.removeTags("tag_group2", ImmutableSet.of("tag4", "tag5", "tag6"))
.removeTags("tag_group3", ImmutableSet.of("tag4", "tag5", "tag6"));
JsonNode jsonFromObject = MAPPER.readTree(request.getRequestBody());
JsonNode jsonFromString = MAPPER.readTree(expected);
assertEquals(jsonFromObject, jsonFromString);
}
@Test (expected = IllegalArgumentException.class)
public void testAddAndSetTags() throws Exception {
ChannelTagRequest request = ChannelTagRequest.newRequest()
.addIOSChannel(UUID.randomUUID().toString())
.addTags("tag_group1", ImmutableSet.of("tag1", "tag2", "tag3"))
.setTags("tag_group1", ImmutableSet.of("tag4", "tag5", "tag6"));
request.getRequestBody();
}
@Test (expected = IllegalArgumentException.class)
public void testRemoveAndSetTags() throws Exception {
ChannelTagRequest request = ChannelTagRequest.newRequest()
.addIOSChannel(UUID.randomUUID().toString())
.removeTags("tag_group1", ImmutableSet.of("tag1", "tag2", "tag3"))
.setTags("tag_group1", ImmutableSet.of("tag4", "tag5", "tag6"));
request.getRequestBody();
}
@Test (expected = IllegalArgumentException.class)
public void testNoTagMutations() throws Exception {
ChannelTagRequest request = ChannelTagRequest.newRequest()
.addIOSChannel(UUID.randomUUID().toString());
request.getRequestBody();
}
String iosChannel1 = UUID.randomUUID().toString();
String iosChannel2 = UUID.randomUUID().toString();
String androidChannel = UUID.randomUUID().toString();
Set<String> iosChannels = ImmutableSet.of(iosChannel1, iosChannel2);
ChannelTagRequest request = ChannelTagRequest.newRequest()
.addIOSChannels(iosChannels)
.addAndroidChannel(androidChannel)
.addTags("tag_group1", ImmutableSet.of("tag1", "tag2", "tag3"))
.addTags("tag_group2", ImmutableSet.of("tag1", "tag2", "tag3"))
.addTags("tag_group3", ImmutableSet.of("tag1", "tag2", "tag3"));
@Test
public void testContentType() throws Exception {
assertEquals(request.getContentType(), ContentType.APPLICATION_JSON);
}
@Test
public void testMethod() throws Exception {
assertEquals(request.getHttpMethod(), Request.HttpMethod.POST);
}
@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);
}
@Test
public void testURI() throws Exception {
URI baseURI = URI.create("https://go.urbanairship.com");
URI expextedURI = URI.create("https://go.urbanairship.com/api/channels/tags/");
assertEquals(request.getUri(baseURI), expextedURI);
}
@Test
public void testPushParser() throws Exception {
String response = "{\"ok\" : true}";
assertEquals(response, request.getResponseParser().parse(response));
}
}