com.vsct.supervision.notification.repository.SeyrenRepositoryMappingTests.java Source code

Java tutorial

Introduction

Here is the source code for com.vsct.supervision.notification.repository.SeyrenRepositoryMappingTests.java

Source

/*
 * This file is part of the Cerebro distribution.
 * (https://github.com/voyages-sncf-technologies/cerebro)
 * Copyright (C) 2017 VSCT.
 *
 * Cerebro is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, version 3 of the License.
 *
 * Cerebro is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

package com.vsct.supervision.notification.repository;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.method;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo;
import static org.springframework.test.web.client.response.MockRestResponseCreators.withServerError;
import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;

import java.io.IOException;
import java.net.URISyntaxException;

import org.apache.commons.io.IOUtils;
import org.junit.Before;
import org.junit.Test;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.web.client.RestTemplate;

import com.vsct.supervision.notification.ErrorCode;
import com.vsct.supervision.notification.TestUtils;
import com.vsct.supervision.notification.exception.CerebroException;
import com.vsct.supervision.notification.exception.SeyrenResponseErrorHandler;
import com.vsct.supervision.seyren.api.Alarm;
import com.vsct.supervision.seyren.api.SubscriptionType;

/**
 * Inspiration : https://github.com/jeffsheets/MockRestServiceServerExample
 */
public class SeyrenRepositoryMappingTests {
    private final String seyrenUrl = "fakeSeyren";
    private SeyrenRepository seyrenRepository = new SeyrenRepository();
    private RestTemplate restTemplate = new RestTemplate();
    private MockRestServiceServer mockServer;

    public static final String CHECK_GOOD_FILE_NAME = "/checkGood.json";
    public static final String CHECK_BAD_SUBSCRIPTION_TYPE_FILE_NAME = "/checkBadSubscriptionType.json";
    public static final String CHECK_BAD_URI_FILE_NAME = "/checkBadURI.json";
    public static final String CHECK_INVALID_FILE_NAME = "/checkInvalid.json";

    @Before
    public void setUp() {
        restTemplate.setErrorHandler(new SeyrenResponseErrorHandler());
        mockServer = MockRestServiceServer.createServer(restTemplate);
        seyrenRepository.setRestTemplate(restTemplate);
        seyrenRepository.setSeyrenUrl(seyrenUrl);
    }

    @Test
    public void testGetAlarm() throws IOException, URISyntaxException {
        mockServer.expect(requestTo(seyrenUrl + SeyrenRepository.API_ALARMS + "/" + TestUtils.DEFAULT_ALARM_ID))
                .andExpect(method(HttpMethod.GET))
                .andRespond(withSuccess(getFile(CHECK_GOOD_FILE_NAME), MediaType.APPLICATION_JSON));

        Alarm c = seyrenRepository.getAlarm(TestUtils.DEFAULT_ALARM_ID);
        assertEquals(SubscriptionType.EMAIL, c.getSubscriptions().get(0).getType());

        mockServer.verify();
    }

    @Test
    public void testGetBadAlarm() throws IOException, URISyntaxException {
        mockServer.expect(requestTo(seyrenUrl + SeyrenRepository.API_ALARMS + "/" + TestUtils.DEFAULT_ALARM_ID))
                .andExpect(method(HttpMethod.GET)).andRespond(
                        withSuccess(getFile(CHECK_BAD_SUBSCRIPTION_TYPE_FILE_NAME), MediaType.APPLICATION_JSON));

        Alarm c = seyrenRepository.getAlarm(TestUtils.DEFAULT_ALARM_ID);
        assertEquals(SubscriptionType.UNKNOW, c.getSubscriptions().get(0).getType());

        mockServer.verify();
    }

    @Test
    public void testGetAlarmWithGoodURI() throws Exception {
        mockServer.expect(requestTo(seyrenUrl + SeyrenRepository.API_ALARMS + "/" + TestUtils.DEFAULT_ALARM_ID))
                .andExpect(method(HttpMethod.GET))
                .andRespond(withSuccess(getFile(CHECK_GOOD_FILE_NAME), MediaType.APPLICATION_JSON));

        Alarm c = seyrenRepository.getAlarm(TestUtils.DEFAULT_ALARM_ID);

        mockServer.verify();
    }

    @Test
    public void testGetAlarmWithBadURI() throws Exception {
        mockServer.expect(requestTo(seyrenUrl + SeyrenRepository.API_ALARMS + "/" + TestUtils.DEFAULT_ALARM_ID))
                .andExpect(method(HttpMethod.GET))
                .andRespond(withSuccess(getFile(CHECK_BAD_URI_FILE_NAME), MediaType.APPLICATION_JSON));

        Alarm c = seyrenRepository.getAlarm(TestUtils.DEFAULT_ALARM_ID);

        mockServer.verify();
    }

    @Test
    public void testResponseErrorHandler_404() throws Exception {
        mockServer.expect(requestTo(seyrenUrl + SeyrenRepository.API_ALARMS + "/badAlarm"))
                .andExpect(method(HttpMethod.GET)).andRespond(withServerError());

        try {
            seyrenRepository.getAlarm("badAlarm");
            fail();
        } catch (CerebroException e) {
            assertEquals(ErrorCode.SEYREN_ERROR, e.getErrorCode());
        }
    }

    @Test
    public void testResponseErrorHandler_500() throws Exception {
        mockServer.expect(requestTo(seyrenUrl + SeyrenRepository.API_ALARMS + "/addAlarm"))
                .andExpect(method(HttpMethod.PUT)).andRespond(withServerError());

        Alarm alarm = new Alarm();
        alarm.setId("addAlarm");

        try {
            seyrenRepository.updateAlarm(alarm);
            fail();
        } catch (CerebroException e) {
            assertEquals(ErrorCode.SEYREN_ERROR, e.getErrorCode());
        }
    }

    private static String getFile(String fileName) throws IOException {
        return IOUtils.toString(SeyrenRepositoryMappingTests.class.getResourceAsStream(fileName), "UTF-8");
    }
}