package com.urbanairship.api.schedule;
import com.google.common.net.HttpHeaders;
import com.urbanairship.api.client.Request;
import com.urbanairship.api.client.ResponseParser;
import com.urbanairship.api.push.model.DeviceType;
import com.urbanairship.api.push.model.DeviceTypeData;
import com.urbanairship.api.push.model.PushPayload;
import com.urbanairship.api.push.model.audience.Selectors;
import com.urbanairship.api.push.model.notification.Notifications;
import com.urbanairship.api.schedule.model.Schedule;
import com.urbanairship.api.schedule.model.SchedulePayload;
import com.urbanairship.api.schedule.model.ScheduleResponse;
import com.urbanairship.api.schedule.parse.ScheduleObjectMapper;
import org.apache.http.entity.ContentType;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.assertEquals;
public class ScheduleRequestTest {
PushPayload pushPayload = PushPayload.newBuilder()
.setAudience(Selectors.all())
.setDeviceTypes(DeviceTypeData.of(DeviceType.IOS))
.setNotification(Notifications.alert("Foo"))
.build();
DateTime dateTime = DateTime.now(DateTimeZone.UTC).plusSeconds(60);
Schedule schedule = Schedule.newBuilder()
.setScheduledTimestamp(dateTime)
.build();
SchedulePayload schedulePayload = SchedulePayload.newBuilder()
.setPushPayload(pushPayload)
.setSchedule(schedule)
.build();
ScheduleRequest scheduleRequest = ScheduleRequest.newRequest(schedule, pushPayload);
ScheduleRequest updateScheduleRequest = ScheduleRequest.newUpdateRequest(schedule, pushPayload, "id");
@Test
public void testContentType() throws Exception {
assertEquals(scheduleRequest.getContentType(), ContentType.APPLICATION_JSON);
assertEquals(updateScheduleRequest.getContentType(), ContentType.APPLICATION_JSON);
}
@Test
public void testMethod() throws Exception {
assertEquals(scheduleRequest.getHttpMethod(), Request.HttpMethod.POST);
assertEquals(updateScheduleRequest.getHttpMethod(), Request.HttpMethod.PUT);
}
@Test
public void testBody() throws Exception {
assertEquals(scheduleRequest.getRequestBody(), schedulePayload.toJSON());
assertEquals(updateScheduleRequest.getRequestBody(), schedulePayload.toJSON());
}
@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(scheduleRequest.getRequestHeaders(), headers);
assertEquals(updateScheduleRequest.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/schedules/");
assertEquals(scheduleRequest.getUri(baseURI), expextedURI);
expextedURI = URI.create("https://go.urbanairship.com/api/schedules/id");
assertEquals(updateScheduleRequest.getUri(baseURI), expextedURI);
}
@Test
public void testScheduleParser() throws Exception {
ResponseParser responseParser = new ResponseParser<ScheduleResponse>() {
@Override
public ScheduleResponse parse(String response) throws IOException {
return ScheduleObjectMapper.getInstance().readValue(response, ScheduleResponse.class);
}
};
String response = "{\"ok\" : true, \"operation_id\" : \"OpID\", " +
"\"schedule_urls\" : [\"ScheduleURL\"], " +
"\"schedule_ids\" : [\"ScheduleID\"], " +
"\"schedules\" : [\n" +
" {\n" +
" \"url\" : \"http://go.urbanairship/api/schedules/2d69320c-3c91-5241-fac4-248269eed109\",\n" +
" \"schedule\" : { \"scheduled_time\": \"2013-04-01T18:45:00\" },\n" +
" \"push\" : { \"audience\":{ \"tag\": \"spoaaaarts\" },\n" +
" \"notification\": { \"alert\": \"Booyah!\" },\n" +
" \"device_types\": \"all\" },\n" +
" \"push_ids\" : [ \"8f18fcb5-e2aa-4b61-b190-43852eadb5ef\" ]\n" +
" }\n" +
" ]}";
assertEquals(scheduleRequest.getResponseParser().parse(response), responseParser.parse(response));
assertEquals(updateScheduleRequest.getResponseParser().parse(response), responseParser.parse(response));
}
}