weatherAlarm.endpoints.WeatherAlarmEndpointTest.java Source code

Java tutorial

Introduction

Here is the source code for weatherAlarm.endpoints.WeatherAlarmEndpointTest.java

Source

/*
 * Copyright 2015 John Scattergood
 *
 * 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 weatherAlarm.endpoints;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.reactivex.netty.protocol.http.server.HttpServerRequest;
import io.reactivex.netty.protocol.http.server.HttpServerResponse;
import org.codehaus.jackson.map.ObjectMapper;
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
import rx.Observable;
import weatherAlarm.model.WeatherAlarm;
import weatherAlarm.services.IWeatherAlarmService;

import java.net.URLEncoder;
import java.util.Arrays;

import static weatherAlarm.util.TestUtils.*;

public class WeatherAlarmEndpointTest {

    private static final String URI = "/weatherAlarm";

    @Test
    public void testNotImplemented() {
        IWeatherAlarmService alarmService = getMockAlarmService();
        WeatherAlarmEndpoint alarmEndpoint = new WeatherAlarmEndpoint();
        alarmEndpoint.setAlarmService(alarmService);

        Capture<byte[]> written = EasyMock.newCapture();
        Capture<HttpResponseStatus> status = EasyMock.newCapture();
        HttpServerRequest<ByteBuf> request = createMockHttpServerRequest(HttpMethod.POST, URI, Observable.empty());
        HttpServerResponse<ByteBuf> response = createMockHttpResponse(status, written);
        alarmEndpoint.handle(request, response);
        HttpResponseStatus expected = HttpResponseStatus.NOT_IMPLEMENTED;
        Assert.assertEquals("Unexpected value for status", expected, status.getValue());
    }

    @Test
    public void testHandleRequestForAlarms() throws Exception {
        IWeatherAlarmService alarmService = getMockAlarmService();
        WeatherAlarmEndpoint alarmEndpoint = new WeatherAlarmEndpoint();
        alarmEndpoint.setAlarmService(alarmService);

        Capture<byte[]> written = EasyMock.newCapture();
        Capture<HttpResponseStatus> status = EasyMock.newCapture();
        HttpServerRequest<ByteBuf> request = createMockHttpServerRequest(HttpMethod.GET, URI, Observable.empty());
        HttpServerResponse<ByteBuf> response = createMockHttpResponse(status, written);
        alarmEndpoint.handle(request, response);
        byte[] expected = new ObjectMapper().writeValueAsBytes(alarmService.getAlarms());
        Assert.assertTrue("Unexpected value written", Arrays.equals(expected, written.getValue()));
    }

    @Test
    public void testHandleRequestForAlarm() throws Exception {
        IWeatherAlarmService alarmService = getMockAlarmService();
        WeatherAlarmEndpoint alarmEndpoint = new WeatherAlarmEndpoint();
        alarmEndpoint.setAlarmService(alarmService);
        WeatherAlarm alarm = alarmService.getAlarms().get(0);

        Capture<byte[]> written = EasyMock.newCapture();
        Capture<HttpResponseStatus> status = EasyMock.newCapture();
        String uri = URI + "/" + URLEncoder.encode(alarm.getName(), "UTF-8");
        HttpServerRequest<ByteBuf> request = createMockHttpServerRequest(HttpMethod.GET, uri, Observable.empty());
        HttpServerResponse<ByteBuf> response = createMockHttpResponse(status, written);
        alarmEndpoint.handle(request, response);
        byte[] expected = new ObjectMapper().writeValueAsBytes(alarm);
        Assert.assertTrue("Unexpected value written", Arrays.equals(expected, written.getValue()));
    }

    @Test
    public void testHandleRequestForAlarmNotFound() throws Exception {
        IWeatherAlarmService alarmService = getMockAlarmService();
        WeatherAlarmEndpoint alarmEndpoint = new WeatherAlarmEndpoint();
        alarmEndpoint.setAlarmService(alarmService);
        WeatherAlarm alarm = alarmService.getAlarms().get(0);

        Capture<byte[]> written = EasyMock.newCapture();
        Capture<HttpResponseStatus> status = EasyMock.newCapture();
        String uri = URI + "/unknownAlarm";
        HttpServerRequest<ByteBuf> request = createMockHttpServerRequest(HttpMethod.GET, uri, Observable.empty());
        HttpServerResponse<ByteBuf> response = createMockHttpResponse(status, written);
        alarmEndpoint.handle(request, response);
        Assert.assertEquals("Unexpected status", HttpResponseStatus.NOT_FOUND, status.getValue());
    }

    @Test
    public void testHandleRequestForAddAlarm() throws Exception {
        IWeatherAlarmService alarmService = getEmptyAlarmService();
        WeatherAlarmEndpoint alarmEndpoint = new WeatherAlarmEndpoint();
        alarmEndpoint.setAlarmService(alarmService);

        WeatherAlarm alarm = createWeatherAlarm();

        Capture<byte[]> written = EasyMock.newCapture();
        Capture<HttpResponseStatus> status = EasyMock.newCapture();
        HttpServerRequest<ByteBuf> request = createMockHttpServerRequest(HttpMethod.PUT, URI,
                createContent(new ObjectMapper().writeValueAsBytes(alarm)));
        HttpServerResponse<ByteBuf> response = createMockHttpResponse(status, written);
        alarmEndpoint.handle(request, response);
        Assert.assertTrue("Alarm not added from list " + alarm, alarmService.getAlarm(alarm.getName()) != null);
    }

    @Test
    public void testHandleRequestForDeleteAlarm() throws Exception {
        IWeatherAlarmService alarmService = getMockAlarmService();
        WeatherAlarmEndpoint alarmEndpoint = new WeatherAlarmEndpoint();
        alarmEndpoint.setAlarmService(alarmService);
        WeatherAlarm alarm = alarmService.getAlarms().get(0);

        Capture<byte[]> written = EasyMock.newCapture();
        Capture<HttpResponseStatus> status = EasyMock.newCapture();
        String encodedAlarmName = URLEncoder.encode(alarm.getName(), "UTF-8");
        String uri = URI + "/" + encodedAlarmName;
        HttpServerRequest<ByteBuf> request = createMockHttpServerRequest(HttpMethod.DELETE, uri,
                Observable.empty());
        HttpServerResponse<ByteBuf> response = createMockHttpResponse(status, written);
        alarmEndpoint.handle(request, response);
        Assert.assertTrue("Alarm not deleted from list " + alarm, !alarmService.getAlarms().contains(alarm));
    }

    @Test
    public void testHandleRequestForDeleteAlarms() throws Exception {
        IWeatherAlarmService alarmService = getMockAlarmService();
        WeatherAlarmEndpoint alarmEndpoint = new WeatherAlarmEndpoint();
        alarmEndpoint.setAlarmService(alarmService);
        WeatherAlarm alarm = alarmService.getAlarms().get(0);

        Capture<byte[]> written = EasyMock.newCapture();
        Capture<HttpResponseStatus> status = EasyMock.newCapture();
        HttpServerRequest<ByteBuf> request = createMockHttpServerRequest(HttpMethod.DELETE, URI,
                Observable.empty());
        HttpServerResponse<ByteBuf> response = createMockHttpResponse(status, written);
        alarmEndpoint.handle(request, response);
        Assert.assertTrue("Alarm deleted from list " + alarm, alarmService.getAlarms().contains(alarm));
        Assert.assertEquals("Unexpected status", HttpResponseStatus.UNAUTHORIZED, status.getValue());
    }

    private Observable<ByteBuf> createContent(byte[] bytes) {
        return Observable.just(Unpooled.copiedBuffer(bytes));
    }

}