Summary Table

Categories Total Count
PII 0
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

package gov.va.oneconsult.seoc.api.filter;

import static org.assertj.core.api.Assertions.assertThat;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.ServletException;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.http.HttpStatus;
import org.springframework.mock.web.MockFilterChain;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;

import gov.va.oneconsult.seoc.api.service.GenericService;

@RunWith(MockitoJUnitRunner.class)
public class MaintenanceFilterTest
{
@Mock
private GenericService genericService;

@InjectMocks
private MaintenanceFilter maintenanceFilter = new MaintenanceFilter();

/*
* SEOC operations which are not allowed during maintenance should give
* PRECONDITION Failed response
*/
@Test
public void testSeocEditOperationsInMaintenanceMode() throws ServletException, IOException
{

Map<String, String> maintenanceModeTestUrls = new HashMap<String, String>();
maintenanceModeTestUrls.put("/v1/seoc/", "POST");
maintenanceModeTestUrls.put("/v1/seoc", "POST");
maintenanceModeTestUrls.put("/v1/seoc/checkseocexists", "POST");
maintenanceModeTestUrls.put("/v1/seoc/createPendingRevision", "POST");
maintenanceModeTestUrls.put("/v1/seoc/validPendingRevision", "GET");
maintenanceModeTestUrls.put("/v1/seoc/validActivate", "GET");
maintenanceModeTestUrls.put("/v1/seoc/activate", "GET");
maintenanceModeTestUrls.put("/v1/seoc/discontinue", "GET");
maintenanceModeTestUrls.put("/v1/seoc/delete", "GET");
maintenanceModeTestUrls.put("v1/seoc/delete", "GET");
maintenanceModeTestUrls.put("v1/seoc/createBillingCode", "POST");

for (Entry<String, String> entry : maintenanceModeTestUrls.entrySet())
{
MockHttpServletRequest request = new MockHttpServletRequest();
Mockito.when(genericService.getMaintenanceBy()).thenReturn("User");
MockHttpServletResponse response = new MockHttpServletResponse();
MockFilterChain filterChain = new MockFilterChain();

request.setRequestURI(entry.getKey());
request.setMethod(entry.getValue());

maintenanceFilter.doFilter(request, response, filterChain);

assertThat(response.getStatus()).isEqualTo(HttpStatus.PRECONDITION_FAILED.value());
assertThat(response.getErrorMessage()).isEqualTo("{\"inMaintenanceBy\":\"User\"}");
}

Mockito.verify(genericService, Mockito.times(11)).getMaintenanceBy();
Mockito.verifyNoMoreInteractions(genericService);
}

/*
* SEOC operations allowed during maintenance should give OK response
*/
@Test
public void testSeocGetOperationsInMaintenanceMode() throws ServletException, IOException
{

Map<String, String> maintenanceModeTestUrls = new HashMap<String, String>();

maintenanceModeTestUrls.put("/v1/seoc/all", "GET");
maintenanceModeTestUrls.put("/v1/seoc/active", "GET");
maintenanceModeTestUrls.put("/v1/seoc/", "GET");
maintenanceModeTestUrls.put("/v1/seocKey/test123", "GET");
maintenanceModeTestUrls.put("/v1/seoc/12", "GET");
maintenanceModeTestUrls.put("/v1/seoc/name/abc", "GET");

for (Entry<String, String> entry : maintenanceModeTestUrls.entrySet())
{
MockHttpServletRequest request = new MockHttpServletRequest();
Mockito.when(genericService.getMaintenanceBy()).thenReturn("User");
MockHttpServletResponse response = new MockHttpServletResponse();
MockFilterChain filterChain = new MockFilterChain();

request.setRequestURI(entry.getKey());
request.setMethod(entry.getValue());

maintenanceFilter.doFilter(request, response, filterChain);

assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
}

Mockito.verify(genericService, Mockito.times(6)).getMaintenanceBy();
Mockito.verifyNoMoreInteractions(genericService);
}

/*
* All SEOC Get operations allowed irrespective of maintenance mode
*/
@Test
public void testSeocGetOperationsInNonMaintenanceMode() throws ServletException, IOException
{

Map<String, String> maintenanceModeTestUrls = new HashMap<String, String>();

maintenanceModeTestUrls.put("/v1/seoc/all", "GET");
maintenanceModeTestUrls.put("/v1/seoc/active", "GET");
maintenanceModeTestUrls.put("/v1/seoc/", "GET");
maintenanceModeTestUrls.put("/v1/seocKey/test123", "GET");
maintenanceModeTestUrls.put("/v1/seoc/12", "GET");
maintenanceModeTestUrls.put("/v1/seoc/name/abc", "GET");

for (Entry<String, String> entry : maintenanceModeTestUrls.entrySet())
{
MockHttpServletRequest request = new MockHttpServletRequest();
Mockito.when(genericService.getMaintenanceBy()).thenReturn("");
MockHttpServletResponse response = new MockHttpServletResponse();
MockFilterChain filterChain = new MockFilterChain();

request.setRequestURI(entry.getKey());
request.setMethod(entry.getValue());

maintenanceFilter.doFilter(request, response, filterChain);

assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
}

Mockito.verify(genericService, Mockito.times(6)).getMaintenanceBy();
Mockito.verifyNoMoreInteractions(genericService);
}

/*
* Maintenance mode operations are not allowed in non-maintenance mode
*/
@Test
public void testMaintenanceOperationsInNonMaintenanceMode() throws ServletException, IOException
{

Map<String, String> maintenanceModeTestUrls = new HashMap<String, String>();
maintenanceModeTestUrls.put("/v1/seoc/manageBillingCode", "PUT");

for (Entry<String, String> entry : maintenanceModeTestUrls.entrySet())
{
MockHttpServletRequest request = new MockHttpServletRequest();
Mockito.when(genericService.getMaintenanceBy()).thenReturn("");
MockHttpServletResponse response = new MockHttpServletResponse();
MockFilterChain filterChain = new MockFilterChain();

request.setRequestURI(entry.getKey());
request.setMethod(entry.getValue());

maintenanceFilter.doFilter(request, response, filterChain);

assertThat(response.getStatus()).isEqualTo(HttpStatus.PRECONDITION_FAILED.value());
assertThat(response.getErrorMessage()).isEqualTo("{\"inMaintenanceBy\":\"\"}");
}

Mockito.verify(genericService, Mockito.times(1)).getMaintenanceBy();
Mockito.verifyNoMoreInteractions(genericService);
}
}