package com.urbanairship.api.nameduser;
import com.google.common.collect.ImmutableSet;
import com.google.common.net.HttpHeaders;
import com.urbanairship.api.client.Request;
import com.urbanairship.api.nameduser.parse.NamedUserObjectMapper;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.http.entity.ContentType;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.junit.Before;
import org.junit.Test;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import static org.junit.Assert.assertEquals;
public class NamedUserTagRequestTest {
private String namedUserId1;
private String namedUserId2;
private Set<String> namedUserIds;
private NamedUserTagRequest defaultRequest;
private static final ObjectMapper MAPPER = NamedUserObjectMapper.getInstance();
@Before
public void setup() {
namedUserId1 = RandomStringUtils.random(10);
namedUserId2 = RandomStringUtils.random(10);
namedUserIds = ImmutableSet.of(namedUserId1, namedUserId2);
defaultRequest = NamedUserTagRequest.newRequest()
.addNamedUsers(namedUserIds)
.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 testAddTagsBody() throws Exception {
String expected = "{" +
"\"audience\":{" +
"\"named_user_id\":[\"" + namedUserId1+ "\",\"" + namedUserId2 +"\"]" +
"}," +
"\"add\":{" +
"\"tag_group1\":[\"tag1\",\"tag2\",\"tag3\"]," +
"\"tag_group3\":[\"tag1\",\"tag2\",\"tag3\"]," +
"\"tag_group2\":[\"tag1\",\"tag2\",\"tag3\"]" +
"}" +
"}";
NamedUserTagRequest request = NamedUserTagRequest.newRequest()
.addNamedUsers(namedUserIds)
.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 expected = "{" +
"\"audience\":{" +
"\"named_user_id\":[\"" + namedUserId1+ "\",\"" + namedUserId2 +"\"]" +
"}," +
"\"remove\":{" +
"\"tag_group1\":[\"tag1\",\"tag2\",\"tag3\"]," +
"\"tag_group3\":[\"tag1\",\"tag2\",\"tag3\"]," +
"\"tag_group2\":[\"tag1\",\"tag2\",\"tag3\"]" +
"}" +
"}";
NamedUserTagRequest request = NamedUserTagRequest.newRequest()
.addNamedUsers(namedUserIds)
.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 expected = "{" +
"\"audience\":{" +
"\"named_user_id\":[\"" + namedUserId1+ "\",\"" + namedUserId2 +"\"]" +
"}," +
"\"set\":{" +
"\"tag_group1\":[\"tag1\",\"tag2\",\"tag3\"]," +
"\"tag_group3\":[\"tag1\",\"tag2\",\"tag3\"]," +
"\"tag_group2\":[\"tag1\",\"tag2\",\"tag3\"]" +
"}" +
"}";
NamedUserTagRequest request = NamedUserTagRequest.newRequest()
.addNamedUsers(namedUserIds)
.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 expected = "{" +
"\"audience\":{" +
"\"named_user_id\":[\"" + namedUserId1+ "\",\"" + namedUserId2 +"\"]" +
"}," +
"\"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\"]" +
"}" +
"}";
NamedUserTagRequest request = NamedUserTagRequest.newRequest()
.addNamedUsers(namedUserIds)
.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 {
NamedUserTagRequest request = NamedUserTagRequest.newRequest()
.addNamedUsers(namedUserId1)
.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 {
NamedUserTagRequest request = NamedUserTagRequest.newRequest()
.addNamedUsers(namedUserId1)
.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 {
NamedUserTagRequest request = NamedUserTagRequest.newRequest()
.addNamedUsers(namedUserId1);
request.getRequestBody();
}
@Test
public void testContentType() throws Exception {
assertEquals(defaultRequest.getContentType(), ContentType.APPLICATION_JSON);
}
@Test
public void testMethod() throws Exception {
assertEquals(defaultRequest.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(defaultRequest.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/named_users/tags/");
assertEquals(defaultRequest.getUri(baseURI), expextedURI);
}
@Test
public void testParser() throws Exception {
String response = "{\"ok\" : true}";
assertEquals(response, defaultRequest.getResponseParser().parse(response));
}
}