org.openlmis.fulfillment.web.OrderFileTemplateControllerIntegrationTest.java Source code

Java tutorial

Introduction

Here is the source code for org.openlmis.fulfillment.web.OrderFileTemplateControllerIntegrationTest.java

Source

/*
 * This program is part of the OpenLMIS logistics management information system platform software.
 * Copyright  2017 VillageReach
 *
 * This program 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, either
 * version 3 of the License, or (at your option) any later version.
 * 
 * This program 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. For additional information contact info@OpenLMIS.org.
 */

package org.openlmis.fulfillment.web;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import guru.nidi.ramltester.junit.RamlMatchers;
import org.junit.Before;
import org.junit.Test;
import org.openlmis.fulfillment.domain.OrderFileColumn;
import org.openlmis.fulfillment.domain.OrderFileTemplate;
import org.openlmis.fulfillment.service.OrderFileTemplateService;
import org.openlmis.fulfillment.web.util.OrderFileTemplateDto;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import java.util.ArrayList;
import java.util.UUID;

public class OrderFileTemplateControllerIntegrationTest extends BaseWebIntegrationTest {

    private static final String RESOURCE_URL = "/api/orderFileTemplates";

    private OrderFileTemplate orderFileTemplate = new OrderFileTemplate();
    private OrderFileTemplateDto orderFileTemplateDto;

    @MockBean
    private OrderFileTemplateService orderFileTemplateService;

    @Before
    public void setUp() {
        orderFileTemplate.setId(UUID.randomUUID());
        orderFileTemplate.setFilePrefix("prefix");
        orderFileTemplate.setHeaderInFile(false);
        orderFileTemplate.setOrderFileColumns(new ArrayList<>());

        given(orderFileTemplateRepository.save(any(OrderFileTemplate.class)))
                .willAnswer(new SaveAnswer<OrderFileTemplate>());
    }

    // POST /api/orderFileTemplates

    @Test
    public void shouldNotCreateNewOrderFileTemplate() {
        orderFileTemplateDto = OrderFileTemplateDto.newInstance(orderFileTemplate);

        restAssured.given().header(HttpHeaders.AUTHORIZATION, getTokenHeader())
                .contentType(MediaType.APPLICATION_JSON_VALUE).body(orderFileTemplateDto).when().post(RESOURCE_URL)
                .then().statusCode(405);
    }

    // PUT /api/orderFileTemplates

    @Test
    public void shouldUpdateOrderFileTemplate() {
        // given
        OrderFileTemplate originalTemplate = new OrderFileTemplate();
        originalTemplate.setOrderFileColumns(new ArrayList<>());
        originalTemplate.setId(orderFileTemplate.getId());

        orderFileTemplateDto = OrderFileTemplateDto.newInstance(orderFileTemplate);

        when(orderFileTemplateService.getOrderFileTemplate()).thenReturn(originalTemplate);

        // when
        OrderFileTemplateDto result = restAssured.given().header(HttpHeaders.AUTHORIZATION, getTokenHeader())
                .contentType(MediaType.APPLICATION_JSON_VALUE).body(orderFileTemplateDto).when().put(RESOURCE_URL)
                .then().statusCode(200).extract().as(OrderFileTemplateDto.class);

        // then
        verify(orderFileTemplateRepository, atLeastOnce()).save(eq(originalTemplate));
        assertEquals(orderFileTemplateDto.getFilePrefix(), result.getFilePrefix());
        assertEquals(orderFileTemplateDto.getHeaderInFile(), result.getHeaderInFile());

        assertThat(RAML_ASSERT_MESSAGE, restAssured.getLastReport(), RamlMatchers.hasNoViolations());
    }

    @Test
    public void shouldNotUpdateOrderFileTemplateWhenOrderFileColumnContainsWrongFormat() {
        OrderFileColumn orderFileColumn = new OrderFileColumn();
        orderFileColumn.setDataFieldLabel("label");
        orderFileColumn.setColumnLabel("label");
        orderFileColumn.setNested("nested");
        orderFileColumn.setKeyPath("key");
        orderFileColumn.setRelated("yes");
        orderFileColumn.setRelatedKeyPath("yes");
        orderFileColumn.setId(UUID.randomUUID());
        orderFileColumn.setFormat("dddd-mmm-yy");
        orderFileColumn.setInclude(true);
        orderFileColumn.setPosition(1);
        orderFileColumn.setOpenLmisField(true);
        orderFileTemplate.getOrderFileColumns().add(orderFileColumn);

        orderFileTemplateDto = OrderFileTemplateDto.newInstance(orderFileTemplate);

        restAssured.given().header(HttpHeaders.AUTHORIZATION, getTokenHeader())
                .contentType(MediaType.APPLICATION_JSON_VALUE).body(orderFileTemplateDto).when().put(RESOURCE_URL)
                .then().statusCode(400);

        assertThat(RAML_ASSERT_MESSAGE, restAssured.getLastReport(), RamlMatchers.hasNoViolations());
    }

    @Test
    public void shouldReturn403WhenUserHasNoRightsToUpdateOrderFileTemplate() {
        denyUserAllRights();
        orderFileTemplateDto = OrderFileTemplateDto.newInstance(orderFileTemplate);

        restAssured.given().header(HttpHeaders.AUTHORIZATION, getTokenHeader())
                .contentType(MediaType.APPLICATION_JSON_VALUE).body(orderFileTemplateDto).when().put(RESOURCE_URL)
                .then().statusCode(403);

        assertThat(RAML_ASSERT_MESSAGE, restAssured.getLastReport(), RamlMatchers.hasNoViolations());

    }

    @Test
    public void shouldNotUpdateOrderFileTemplateWhenIdNotMatching() {
        // given
        OrderFileTemplate originalTemplate = new OrderFileTemplate();
        originalTemplate.setOrderFileColumns(new ArrayList<>());
        originalTemplate.setId(getNonMatchingUuid(orderFileTemplate.getId()));

        orderFileTemplateDto = OrderFileTemplateDto.newInstance(orderFileTemplate);

        when(orderFileTemplateService.getOrderFileTemplate()).thenReturn(originalTemplate);

        // when
        restAssured.given().header(HttpHeaders.AUTHORIZATION, getTokenHeader())
                .contentType(MediaType.APPLICATION_JSON_VALUE).body(orderFileTemplateDto).when().put(RESOURCE_URL)
                .then().statusCode(400).extract().as(OrderFileTemplateDto.class);

        // then
        assertThat(RAML_ASSERT_MESSAGE, restAssured.getLastReport(), RamlMatchers.hasNoViolations());
    }

    @Test
    public void shouldNotUpdateOrderFileTemplateWhenIdNull() {
        // given
        OrderFileTemplate originalTemplate = new OrderFileTemplate();
        originalTemplate.setOrderFileColumns(new ArrayList<>());
        originalTemplate.setId(orderFileTemplate.getId());

        orderFileTemplateDto = OrderFileTemplateDto.newInstance(orderFileTemplate);
        orderFileTemplateDto.setId(null);

        when(orderFileTemplateService.getOrderFileTemplate()).thenReturn(originalTemplate);

        // when
        restAssured.given().header(HttpHeaders.AUTHORIZATION, getTokenHeader())
                .contentType(MediaType.APPLICATION_JSON_VALUE).body(orderFileTemplateDto).when().put(RESOURCE_URL)
                .then().statusCode(400).extract().as(OrderFileTemplateDto.class);

        // then
        assertThat(RAML_ASSERT_MESSAGE, restAssured.getLastReport(), RamlMatchers.hasNoViolations());
    }

    // GET /api/orderFileTemplates

    @Test
    public void shouldReturnOrderFileTemplate() {
        given(orderFileTemplateService.getOrderFileTemplate()).willReturn(orderFileTemplate);

        OrderFileTemplateDto result = restAssured.given().header(HttpHeaders.AUTHORIZATION, getTokenHeader())
                .contentType(MediaType.APPLICATION_JSON_VALUE).when().get(RESOURCE_URL).then().statusCode(200)
                .extract().as(OrderFileTemplateDto.class);

        assertEquals(orderFileTemplate.getId(), result.getId());
        assertThat(RAML_ASSERT_MESSAGE, restAssured.getLastReport(), RamlMatchers.hasNoViolations());
    }

    @Test
    public void shouldNotReturnOrderFileTemplateIfItDoesNotExist() {
        given(orderFileTemplateService.getOrderFileTemplate()).willReturn(null);

        restAssured.given().header(HttpHeaders.AUTHORIZATION, getTokenHeader())
                .contentType(MediaType.APPLICATION_JSON_VALUE).when().get(RESOURCE_URL).then().statusCode(404);

        assertThat(RAML_ASSERT_MESSAGE, restAssured.getLastReport(), RamlMatchers.hasNoViolations());
    }

    @Test
    public void shouldReturn403WhenUserHasNoRightsToViewOrderFileTemplate() {
        denyUserAllRights();

        restAssured.given().header(HttpHeaders.AUTHORIZATION, getTokenHeader())
                .contentType(MediaType.APPLICATION_JSON_VALUE).when().get(RESOURCE_URL).then().statusCode(403);

        assertThat(RAML_ASSERT_MESSAGE, restAssured.getLastReport(), RamlMatchers.hasNoViolations());
    }
}