/**
* JBoss, Home of Professional Open Source
* Copyright Red Hat, Inc., and individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.aerogear.unifiedpush.message;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.exc.UnrecognizedPropertyException;
import org.jboss.aerogear.unifiedpush.message.windows.TileType;
import org.jboss.aerogear.unifiedpush.message.windows.Type;
import org.junit.Test;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class UnifiedPushMessageTest {
@Test
public void shouldSerializeMessage() throws IOException {
//when
UnifiedPushMessage unifiedPushMessage = new UnifiedPushMessage();
Message message = new Message();
message.setAlert("HELLO!");
message.getApns().setActionCategory("some value");
message.setSound("default");
message.setBadge(2);
message.getWindows().setPage("/MainPage.xaml");
message.getWindows().setType(Type.tile);
message.getWindows().setTileType(TileType.TileWideBlockAndText01);
message.getApns().setContentAvailable(true);
final HashMap<String, Object> data = new HashMap<>();
data.put("key", "value");
data.put("key2", "other value");
message.setUserData(data);
message.setSimplePush("version=123");
unifiedPushMessage.setMessage(message);
final Criteria criteria = new Criteria();
criteria.setAliases(Arrays.asList("someUsername"));
criteria.setDeviceTypes(Arrays.asList("someDevice"));
criteria.setCategories(Arrays.asList("someCategories"));
criteria.setVariants(Arrays.asList("someVariantIDs"));
unifiedPushMessage.setCriteria(criteria);
final Config config = new Config();
config.setTimeToLive(3360);
unifiedPushMessage.setConfig(config);
//then
final ObjectMapper mapper = new ObjectMapper();
final JsonNode value = mapper.valueToTree(unifiedPushMessage);
JsonNode format = mapper.reader().readTree(getClass().getResourceAsStream("/message-format.json"));
assertEquals(format, value);
}
@Test
public void testPriorityMapping() throws IOException {
final ObjectMapper mapper = new ObjectMapper();
Message message = mapper.readValue(getClass().getResourceAsStream("/message-normal-priority.json"), UnifiedPushMessage.class).getMessage();
assertEquals(Priority.NORMAL, message.getPriority());
}
@Test
public void testPriorityEnumHighMapping() throws IOException {
final ObjectMapper mapper = new ObjectMapper();
Message message = mapper.readValue(getClass().getResourceAsStream("/message-high-priority.json"), UnifiedPushMessage.class).getMessage();
assertEquals(Priority.HIGH, message.getPriority());
}
@Test
public void createBroadcastMessage() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
messageObject.put("badge", 2);
Map<String, String> data = new HashMap<>();
data.put("someKey", "someValue");
messageObject.put("user-data", data);
container.put("message", messageObject);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertEquals("Howdy", unifiedPushMessage.getMessage().getAlert());
assertEquals("default", unifiedPushMessage.getMessage().getSound());
assertEquals(2, unifiedPushMessage.getMessage().getBadge());
assertEquals("someValue", unifiedPushMessage.getMessage().getUserData().get("someKey"));
// no TTL:
assertEquals(-1, unifiedPushMessage.getConfig().getTimeToLive());
// multiple access?
assertEquals("Howdy", unifiedPushMessage.getMessage().getAlert());
assertEquals("someValue", unifiedPushMessage.getMessage().getUserData().get("someKey"));
assertNull(unifiedPushMessage.getCriteria().getAliases());
assertNull(unifiedPushMessage.getCriteria().getDeviceTypes());
assertNull(unifiedPushMessage.getCriteria().getCategories());
assertNull(unifiedPushMessage.getCriteria().getVariants());
assertNull(unifiedPushMessage.getMessage().getSimplePush());
}
@Test
public void createBroadcastMessageWithSimplePush() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
messageObject.put("badge", 2);
Map<String, String> data = new HashMap<>();
data.put("someKey", "someValue");
messageObject.put("user-data", data);
container.put("message", messageObject);
messageObject.put("simple-push", "version=123");
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertEquals("Howdy", unifiedPushMessage.getMessage().getAlert());
assertEquals("default", unifiedPushMessage.getMessage().getSound());
assertEquals(2, unifiedPushMessage.getMessage().getBadge());
assertEquals("someValue", unifiedPushMessage.getMessage().getUserData().get("someKey"));
// multiple access?
assertEquals("Howdy", unifiedPushMessage.getMessage().getAlert());
assertEquals("someValue", unifiedPushMessage.getMessage().getUserData().get("someKey"));
assertNull(unifiedPushMessage.getCriteria().getAliases());
assertNull(unifiedPushMessage.getCriteria().getDeviceTypes());
assertNull(unifiedPushMessage.getCriteria().getCategories());
assertNull(unifiedPushMessage.getCriteria().getVariants());
assertEquals("version=123", unifiedPushMessage.getMessage().getSimplePush());
}
@Test(expected = UnrecognizedPropertyException.class)
public void createBroadcastMessageWithIncorrectSimplePush() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
messageObject.put("badge", 2);
Map<String, String> data = new HashMap<>();
data.put("someKey", "someValue");
messageObject.put("user-data", data);
container.put("message", messageObject);
messageObject.put("simplePush", "version=123");
// parse it:
parsePushMessage(container);
}
@Test
public void noBadgePayload() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
Map<String, String> data = new HashMap<>();
data.put("someKey", "someValue");
messageObject.put("user-data", data);
container.put("message", messageObject);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertEquals("Howdy", unifiedPushMessage.getMessage().getAlert());
assertEquals(-1, unifiedPushMessage.getMessage().getBadge());
}
@Test
public void contentAvailable() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
final Map<String, Object> apnsObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
Map<String, String> data = new HashMap<>();
data.put("someKey", "someValue");
messageObject.put("user-data", data);
apnsObject .put("content-available", true);
messageObject.put("apns",apnsObject );
container.put("message", messageObject);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertEquals("Howdy", unifiedPushMessage.getMessage().getAlert());
assertEquals(-1, unifiedPushMessage.getMessage().getBadge());
assertTrue(unifiedPushMessage.getMessage().getApns().isContentAvailable());
}
@Test
public void noContentAvailable() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
Map<String, String> data = new HashMap<>();
data.put("someKey", "someValue");
messageObject.put("user-data", data);
container.put("message", messageObject);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertEquals("Howdy", unifiedPushMessage.getMessage().getAlert());
assertEquals(-1, unifiedPushMessage.getMessage().getBadge());
assertFalse(unifiedPushMessage.getMessage().getApns().isContentAvailable());
}
@Test
public void testAliasCriteria() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
messageObject.put("badge", 2);
Map<String, String> data = new HashMap<>();
data.put("someKey", "someValue");
messageObject.put("user-data", data);
container.put("message", messageObject);
messageObject.put("simple-push", "version=123");
// criteria:
Map<String, Object> criteria = new HashMap<>();
criteria.put("alias", Arrays.asList("foo@bar.org"));
container.put("criteria", criteria);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertNotNull(unifiedPushMessage.getCriteria().getAliases());
assertEquals(1, unifiedPushMessage.getCriteria().getAliases().size());
assertEquals("foo@bar.org", unifiedPushMessage.getCriteria().getAliases().get(0));
}
@Test
public void testAction() throws IOException{
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
final Map<String, Object> apnsObject = new LinkedHashMap<>();
apnsObject.put("action", "View");
messageObject.put("alert", "howdy");
messageObject.put("apns",apnsObject);
container.put("message", messageObject);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertEquals("View", unifiedPushMessage.getMessage().getApns().getAction());
}
@Test
public void testUrlArgs() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
final Map<String, Object> apnsObject = new LinkedHashMap<>();
final String[] urlArgs = { "Arg1", "Arg2" };
apnsObject.put("title", "I'm a Title");
apnsObject.put("url-args", urlArgs);
messageObject.put("apns",apnsObject);
messageObject.put("alert", "howdy");
container.put("message", messageObject);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertEquals("[Arg1, Arg2]", Arrays.toString(unifiedPushMessage.getMessage().getApns().getUrlArgs()));
}
@Test
public void testActionCategory() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
final Map<String, Object> apnsObject = new LinkedHashMap<>();
apnsObject.put("action-category", "POSTS");
messageObject.put("alert", "Howdy");
messageObject.put("apns",apnsObject);
container.put("message", messageObject);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertEquals("POSTS", unifiedPushMessage.getMessage().getApns().getActionCategory());
}
@Test
public void testLocalizedKey() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
final Map<String, Object> apnsObject = new LinkedHashMap<>();
apnsObject.put("localized-key", "myLocalizedKey");
messageObject.put("alert", "Howdy");
messageObject.put("apns",apnsObject);
container.put("message", messageObject);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertEquals("myLocalizedKey", unifiedPushMessage.getMessage().getApns().getLocalizedKey());
}
@Test
public void testLocalizedArguments() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
final Map<String, Object> apnsObject = new LinkedHashMap<>();
String[] arguments = {"Jambon","ham"};
apnsObject.put("localized-arguments", arguments);
messageObject.put("alert", "Howdy");
messageObject.put("apns",apnsObject);
container.put("message", messageObject);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertEquals("[Jambon, ham]", Arrays.toString(unifiedPushMessage.getMessage().getApns().getLocalizedArguments()));
}
@Test
public void testLocalizedTitleKey() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
final Map<String, Object> apnsObject = new LinkedHashMap<>();
apnsObject.put("localized-title-key", "myLocalizedTitle");
messageObject.put("alert", "Howdy");
messageObject.put("apns",apnsObject);
container.put("message", messageObject);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertEquals("myLocalizedTitle", unifiedPushMessage.getMessage().getApns().getLocalizedTitleKey());
}
@Test
public void testLocalizedTitleArguments() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
final Map<String, Object> apnsObject = new LinkedHashMap<>();
String[] arguments = {"Jambon","ham"};
apnsObject.put("localized-title-arguments", arguments);
messageObject.put("alert", "Howdy");
messageObject.put("apns",apnsObject);
container.put("message", messageObject);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertEquals("[Jambon, ham]", Arrays.toString(unifiedPushMessage.getMessage().getApns().getLocalizedTitleArguments()));
}
@Test
public void testMultipleAliasCriteria() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
messageObject.put("badge", 2);
Map<String, String> data = new HashMap<>();
data.put("someKey", "someValue");
messageObject.put("user-data", data);
container.put("message", messageObject);
messageObject.put("simple-push", "version=123");
// criteria:
Map<String, Object> criteria = new HashMap<>();
criteria.put("alias", Arrays.asList("foo@bar.org", "bar@foo.com"));
container.put("criteria", criteria);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertNotNull(unifiedPushMessage.getCriteria().getAliases());
assertEquals(2, unifiedPushMessage.getCriteria().getAliases().size());
assertTrue(unifiedPushMessage.getCriteria().getAliases().contains("foo@bar.org"));
assertTrue(unifiedPushMessage.getCriteria().getAliases().contains("bar@foo.com"));
}
@Test
public void testDeviceTypeCriteria() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
messageObject.put("badge", 2);
Map<String, String> data = new HashMap<>();
data.put("someKey", "someValue");
messageObject.put("user-data", data);
container.put("message", messageObject);
messageObject.put("simple-push", "version=123");
// criteria:
Map<String, Object> criteria = new HashMap<>();
criteria.put("deviceType", Arrays.asList("iPad"));
container.put("criteria", criteria);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertNotNull(unifiedPushMessage.getCriteria().getDeviceTypes());
assertEquals(1, unifiedPushMessage.getCriteria().getDeviceTypes().size());
assertEquals("iPad", unifiedPushMessage.getCriteria().getDeviceTypes().get(0));
}
@Test
public void testDeviceTypesCriteria() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
messageObject.put("badge", 2);
container.put("message", messageObject);
messageObject.put("simple-push", "version=123");
// criteria:
Map<String, Object> criteria = new HashMap<>();
criteria.put("deviceType", Arrays.asList("iPad", "Android"));
container.put("criteria", criteria);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertNotNull(unifiedPushMessage.getCriteria().getDeviceTypes());
assertEquals(2, unifiedPushMessage.getCriteria().getDeviceTypes().size());
assertTrue(unifiedPushMessage.getCriteria().getDeviceTypes().contains("iPad"));
assertTrue(unifiedPushMessage.getCriteria().getDeviceTypes().contains("Android"));
}
@Test
public void testCategoriesCriteria() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
messageObject.put("badge", 2);
container.put("message", messageObject);
// criteria:
Map<String, Object> criteria = new HashMap<>();
criteria.put("categories", Arrays.asList("football"));
container.put("criteria", criteria);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertNotNull(unifiedPushMessage.getCriteria().getCategories());
assertEquals(1, unifiedPushMessage.getCriteria().getCategories().size());
assertEquals("football", unifiedPushMessage.getCriteria().getCategories().get(0));
}
@Test
public void testMultipleCategoriesCriteria() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
messageObject.put("badge", 2);
container.put("message", messageObject);
// criteria:
Map<String, Object> criteria = new HashMap<>();
criteria.put("categories", Arrays.asList("soccer", "olympics"));
container.put("criteria", criteria);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertNotNull(unifiedPushMessage.getCriteria().getCategories());
assertEquals(2, unifiedPushMessage.getCriteria().getCategories().size());
assertTrue(unifiedPushMessage.getCriteria().getCategories().contains("olympics"));
assertTrue(unifiedPushMessage.getCriteria().getCategories().contains("soccer"));
}
@Test
public void testVariantsCriteria() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
messageObject.put("badge", 2);
container.put("message", messageObject);
// criteria:
Map<String, Object> criteria = new HashMap<>();
criteria.put("variants", Arrays.asList("abc-123-def-456"));
container.put("criteria", criteria);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertNotNull(unifiedPushMessage.getCriteria().getVariants());
assertEquals(1, unifiedPushMessage.getCriteria().getVariants().size());
assertEquals("abc-123-def-456", unifiedPushMessage.getCriteria().getVariants().get(0));
}
@Test
public void testMultipleVariantsCriteria() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
messageObject.put("badge", 2);
container.put("message", messageObject);
// criteria:
Map<String, Object> criteria = new HashMap<>();
criteria.put("variants", Arrays.asList("abc-123-def-456", "456-abc-123-def-bar"));
container.put("criteria", criteria);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertNotNull(unifiedPushMessage.getCriteria().getVariants());
assertEquals(2, unifiedPushMessage.getCriteria().getVariants().size());
assertTrue(unifiedPushMessage.getCriteria().getVariants().contains("abc-123-def-456"));
assertTrue(unifiedPushMessage.getCriteria().getVariants().contains("456-abc-123-def-bar"));
}
@Test
public void testAllCriteria() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
messageObject.put("alert", "Howdy");
messageObject.put("sound", "default");
messageObject.put("badge", 2);
Map<String, String> data = new HashMap<>();
data.put("someKey", "someValue");
messageObject.put("user-data", data);
container.put("message", messageObject);
messageObject.put("simple-push", "version=123");
// criteria:
Map<String, Object> criteria = new HashMap<>();
criteria.put("variants", Arrays.asList("abc-123-def-456", "456-abc-123-def-bar"));
criteria.put("categories", Arrays.asList("soccer", "olympics"));
criteria.put("deviceType", Arrays.asList("iPad", "Android"));
criteria.put("alias", Arrays.asList("foo@bar.org", "bar@foo.com"));
container.put("criteria", criteria);
// parse it:
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
assertEquals(2, unifiedPushMessage.getCriteria().getAliases().size());
assertTrue(unifiedPushMessage.getCriteria().getAliases().contains("foo@bar.org"));
assertFalse(unifiedPushMessage.getCriteria().getAliases().contains("mrx@bar.org"));
assertEquals(2, unifiedPushMessage.getCriteria().getDeviceTypes().size());
assertTrue(unifiedPushMessage.getCriteria().getDeviceTypes().contains("Android"));
assertFalse(unifiedPushMessage.getCriteria().getDeviceTypes().contains("iPhone"));
assertEquals(2, unifiedPushMessage.getCriteria().getCategories().size());
assertTrue(unifiedPushMessage.getCriteria().getCategories().contains("olympics"));
assertFalse(unifiedPushMessage.getCriteria().getCategories().contains("Bundesliga"));
assertEquals(2, unifiedPushMessage.getCriteria().getVariants().size());
assertTrue(unifiedPushMessage.getCriteria().getVariants().contains("abc-123-def-456"));
assertFalse(unifiedPushMessage.getCriteria().getVariants().contains("0815"));
assertEquals("version=123", unifiedPushMessage.getMessage().getSimplePush());
}
@Test(expected = JsonMappingException.class)
public void testVariantCriteriaParseError() throws IOException {
final Map<String, Object> container = new LinkedHashMap<>();
Map<String, Object> criteria = new HashMap<>();
criteria.put("variants", "abc-123-def-456");
container.put("criteria", criteria);
parsePushMessage(container);
}
@Test
public void testMessageToStrippedJson() throws IOException, URISyntaxException {
//given
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
final Map<String, Object> apnsObject = new LinkedHashMap<>();
messageObject.put("alert", "HELLO!");
messageObject.put("sound", "default");
messageObject.put("badge", 2);
Map<String, Object> data = new HashMap<>();
data.put("key", "value");
data.put("key2", "value");
messageObject.put("user-data", data);
apnsObject.put("action-category", "category");
apnsObject.put("content-available", "true");
messageObject.put("simple-push", "version=123");
Map<String, Object> windows = new HashMap<>();
windows.put("type", "tile");
windows.put("tileType", "TileWideBlockAndText01");
windows.put("page", "cordova");
messageObject.put("windows", windows);
messageObject.put("apns",apnsObject);
container.put("message", messageObject);
//when
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
String json = unifiedPushMessage.toStrippedJsonString();
//then
Path path = Paths.get(getClass().getResource("/message-tostrippedjson.json").toURI());
String expectedJson = new String(Files.readAllBytes(path), Charset.defaultCharset());
//poor mans equals ignore white space
assertEquals(expectedJson.replaceAll("\\s", ""), json);
}
@Test
public void testMessageToJson() throws IOException, URISyntaxException {
//given
final Map<String, Object> container = new LinkedHashMap<>();
final Map<String, Object> messageObject = new LinkedHashMap<>();
final Map<String, Object> apnsObject = new LinkedHashMap<>();
messageObject.put("alert", "HELLO!");
messageObject.put("sound", "default");
messageObject.put("badge", 2);
Map<String, Object> data = new HashMap<>();
data.put("key", "value");
data.put("key2", "value");
messageObject.put("user-data", data);
apnsObject.put("action-category", "category");
apnsObject.put("content-available", "true");
messageObject.put("simple-push", "version=123");
Map<String, Object> windows = new HashMap<>();
windows.put("type", "tile");
windows.put("tileType", "TileWideBlockAndText01");
windows.put("page", "cordova");
messageObject.put("windows", windows);
messageObject.put("apns",apnsObject);
container.put("message", messageObject);
//when
final UnifiedPushMessage unifiedPushMessage = parsePushMessage(container);
String json = unifiedPushMessage.toStrippedJsonString();
//then
Path path = Paths.get(getClass().getResource("/message-tojson.json").toURI());
String expectedJson = new String(Files.readAllBytes(path), Charset.defaultCharset());
//poor mans equals ignore white space
assertEquals(expectedJson.replaceAll("\\s", ""), json);
}
private UnifiedPushMessage parsePushMessage(Map<String, Object> container) throws IOException {
ObjectMapper mapper = new ObjectMapper();
final String valueAsString = mapper.writeValueAsString(container);
return mapper.readValue(valueAsString, UnifiedPushMessage.class);
}
}