package com.urbanairship.api.push.parse.notification.android;
import com.google.common.collect.ImmutableMap;
import com.urbanairship.api.push.model.PushExpiry;
import com.urbanairship.api.push.model.notification.Interactive;
import com.urbanairship.api.push.model.notification.actions.Actions;
import com.urbanairship.api.push.model.notification.actions.AddTagAction;
import com.urbanairship.api.push.model.notification.actions.RemoveTagAction;
import com.urbanairship.api.push.model.notification.actions.TagActionData;
import com.urbanairship.api.push.model.notification.android.AndroidDevicePayload;
import com.urbanairship.api.push.model.notification.android.BigTextStyle;
import com.urbanairship.api.push.model.notification.android.Category;
import com.urbanairship.api.push.model.notification.android.PublicNotification;
import com.urbanairship.api.push.model.notification.android.Style;
import com.urbanairship.api.push.model.notification.android.Wearable;
import com.urbanairship.api.push.parse.PushObjectMapper;
import org.codehaus.jackson.map.ObjectMapper;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class PayloadSerializerTest {
private static final ObjectMapper MAPPER = PushObjectMapper.getInstance();
@Test
public void testFullAndroidPayload() throws Exception {
PublicNotification publicNotification = PublicNotification.newBuilder()
.setAlert("Hello!")
.setTitle("A greeting")
.setSummary("A summary")
.build();
Style bigTextStyle = BigTextStyle.newBuilder()
.setContent("big text")
.setTitle("big text title")
.setSummary("big text summary")
.build();
AddTagAction butterTag = new AddTagAction(TagActionData.single("butter"));
RemoveTagAction coolTag = new RemoveTagAction(TagActionData.single("cool"));
ImmutableMap<String, Actions> buttonActions = ImmutableMap.<String,Actions>builder()
.put("yes", Actions.newBuilder().addTags(butterTag).build())
.put("no", Actions.newBuilder().removeTags(coolTag).build())
.build();
Interactive interactive = Interactive.newBuilder()
.setType("ua_yes_no_foreground")
.setButtonActions(buttonActions)
.build();
Wearable wearable = Wearable.newBuilder()
.setBackgroundImage("https://yolo.pizza.biz/")
.setInteractive(interactive)
.addExtraPage("Title1", "An alert")
.addExtraPage("Title2", "An alert again")
.build();
PushExpiry expiry = PushExpiry.newBuilder()
.setExpirySeconds(12345)
.build();
AndroidDevicePayload payload = AndroidDevicePayload.newBuilder()
.setAlert("Hi")
.setCategory(Category.ALARM)
.setCollapseKey("blah")
.setDelayWhileIdle(true)
.setDeliveryPriority("high")
.setInteractive(interactive)
.setLocalOnly(true)
.setPriority(1)
.setPublicNotification(publicNotification)
.setSound("cowbell.mp3")
.setStyle(bigTextStyle)
.setSummary("A summary")
.setTimeToLive(expiry)
.setTitle("A title")
.setVisibility(1)
.setWearable(wearable)
.build();
String json = "{" +
"\"alert\":\"Hi\"," +
"\"collapse_key\":\"blah\"," +
"\"time_to_live\":12345," +
"\"delivery_priority\":\"high\"," +
"\"delay_while_idle\":true," +
"\"interactive\":{" +
"\"type\":\"ua_yes_no_foreground\"," +
"\"button_actions\":{" +
"\"yes\":{" +
"\"add_tag\":\"butter\"" +
"}," +
"\"no\":{" +
"\"remove_tag\":\"cool\"" +
"}" +
"}" +
"}," +
"\"title\":\"A title\"," +
"\"local_only\":true," +
"\"wearable\":{" +
"\"background_image\":\"https://yolo.pizza.biz/\"," +
"\"interactive\":{" +
"\"type\":\"ua_yes_no_foreground\"," +
"\"button_actions\":{" +
"\"yes\":{" +
"\"add_tag\":\"butter\"" +
"}," +
"\"no\":{" +
"\"remove_tag\":\"cool\"" +
"}" +
"}" +
"}," +
"\"extra_pages\":[" +
"{" +
"\"title\":\"Title1\"," +
"\"alert\":\"An alert\"" +
"}," +
"{" +
"\"title\":\"Title2\"," +
"\"alert\":\"An alert again\"" +
"}" +
"]" +
"}," +
"\"summary\":\"A summary\"," +
"\"sound\":\"cowbell.mp3\"," +
"\"category\":\"alarm\"," +
"\"priority\":1," +
"\"style\":{" +
"\"type\":\"big_text\"," +
"\"big_text\":\"big text\"," +
"\"title\":\"big text title\"," +
"\"summary\":\"big text summary\"" +
"}," +
"\"time_to_live\":12345," +
"\"visibility\":1" +
"}";
String parsedJson = MAPPER.writeValueAsString(payload);
assertEquals(json,parsedJson);
}
}