package com.urbanairship.api.schedule;
import com.urbanairship.api.push.model.DeviceType;
import com.urbanairship.api.push.model.DeviceTypeData;
import com.urbanairship.api.push.model.PushOptions;
import com.urbanairship.api.push.model.PushPayload;
import com.urbanairship.api.push.model.audience.Selectors;
import com.urbanairship.api.push.model.notification.Notification;
import com.urbanairship.api.push.parse.PushObjectMapper;
import com.urbanairship.api.schedule.model.Schedule;
import com.urbanairship.api.schedule.model.SchedulePayload;
import org.codehaus.jackson.map.ObjectMapper;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class SchedulePayloadSerializerTest {
private static final ObjectMapper MAPPER = PushObjectMapper.getInstance();
@Test
public void testSerialization() throws Exception {
PushPayload pushPayload = PushPayload.newBuilder()
.setAudience(Selectors.tag("tag"))
.setDeviceTypes(DeviceTypeData.newBuilder().addDeviceType(DeviceType.IOS).build())
.setNotification(Notification.newBuilder().setAlert("alert").build())
.setPushOptions(PushOptions.newBuilder().build())
.build();
SchedulePayload schedulePayload = SchedulePayload.newBuilder()
.setSchedule(Schedule.newBuilder()
.setScheduledTimestamp(new DateTime("2013-05-05T00:00:01", DateTimeZone.UTC))
.build())
.setPushPayload(pushPayload)
.build();
String json = MAPPER.writeValueAsString(schedulePayload);
String properJson = "{\"schedule\":{\"scheduled_time\":\"2013-05-05T00:00:01\"},\"push\":{\"audience\":{\"tag\":\"tag\"},\"device_types\":[\"ios\"],\"notification\":{\"alert\":\"alert\"},\"options\":{}}}";
assertEquals(json, properJson);
}
@Test(expected = Exception.class)
public void testNoSchedule() throws Exception {
PushPayload pushPayload = PushPayload.newBuilder()
.setAudience(Selectors.tag("tag"))
.setDeviceTypes(DeviceTypeData.newBuilder().addDeviceType(DeviceType.IOS).build())
.setNotification(Notification.newBuilder().setAlert("alert").build())
.setPushOptions(PushOptions.newBuilder().build())
.build();
SchedulePayload schedulePayload = SchedulePayload.newBuilder()
.setSchedule(Schedule.newBuilder()
.build())
.setPushPayload(pushPayload)
.build();
String json = MAPPER.writeValueAsString(schedulePayload);
String properJson = "{\"schedule\":{},\"push\":{\"audience\":{\"tag\":\"tag\"},\"device_types\":[\"ios\"],\"notification\":{\"alert\":\"alert\"},\"options\":{\"present\":true}}}";
assertEquals(json, properJson);
}
@Test
public void testLocalTimeFlag() throws Exception {
PushPayload pushPayload = PushPayload.newBuilder()
.setAudience(Selectors.tag("tag"))
.setDeviceTypes(DeviceTypeData.newBuilder().addDeviceType(DeviceType.IOS).build())
.setNotification(Notification.newBuilder().setAlert("alert").build())
.setPushOptions(PushOptions.newBuilder().build())
.build();
SchedulePayload schedulePayload = SchedulePayload.newBuilder()
.setSchedule(Schedule.newBuilder()
.setScheduledTimestamp(new DateTime("2013-05-05T00:00:01", DateTimeZone.UTC))
.build())
.setPushPayload(pushPayload)
.build();
assertFalse(schedulePayload.getSchedule().getLocalTimePresent());
PushPayload pushPayloadLocal = PushPayload.newBuilder()
.setAudience(Selectors.tag("tag"))
.setDeviceTypes(DeviceTypeData.newBuilder().addDeviceType(DeviceType.IOS).build())
.setNotification(Notification.newBuilder().setAlert("alert").build())
.setPushOptions(PushOptions.newBuilder().build())
.build();
SchedulePayload schedulePayloadLocal = SchedulePayload.newBuilder()
.setSchedule(Schedule.newBuilder()
.setLocalScheduledTimestamp(new DateTime("2013-05-05T00:00:01", DateTimeZone.UTC))
.build())
.setPushPayload(pushPayloadLocal)
.build();
assertTrue(schedulePayloadLocal.getSchedule().getLocalTimePresent());
}
}