Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,14 @@
<version>2.23.4</version>
<scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.29</version>
<scope>test</scope>
</dependency>
</dependencies>


Expand All @@ -52,6 +60,15 @@
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>9</source>
<target>9</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
85 changes: 40 additions & 45 deletions src/test/java/pl/hordyjewiczmichal/ResponseHeaderFilterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,25 @@
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.mock.web.MockHttpServletResponse;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.times;

@RunWith(MockitoJUnitRunner.class)
public class ResponseHeaderFilterTest
{
@Mock
private HttpServletRequest req;

@Mock
private HttpServletResponse resp;

@Mock
private FilterChain chain;

Expand All @@ -38,69 +35,67 @@ public class ResponseHeaderFilterTest


@Before
public void setUp()
{
public void setUp() {
filter = new ResponseHeaderFilter();
}

@Test
public void initTest()
{
private void assertHeaderValues(MockHttpServletResponse response, String headerName, String expectedValues) {
assertEquals(expectedValues, response.getHeaderValues(headerName).stream().map(Object::toString).collect(Collectors.joining(", ")));
}

private void mockInitParameter(FilterConfig config, String parameterName, String returnValue) {
Mockito.when(config.getInitParameter(parameterName)).thenReturn(returnValue);
}

@Test
public void initTest() {
// given
Map<String, List<String>> expected = new HashMap<>();
List<String> values = new ArrayList<>();
values.add("value1");
values.add("value2");
expected.put("x-header-1", values);
values = new ArrayList<>();
values.add("value3");
expected.put("x-header-2", values);
values = new ArrayList<>();
values.add("value4");
values.add("value5");
expected.put("x-header-4", values);
Map<String, List<String>> expectedInitParamValues = new HashMap<>();
expectedInitParamValues.put("x-header-1", Arrays.asList("value1", "value2"));
expectedInitParamValues.put("x-header-2", Arrays.asList("value3"));
expectedInitParamValues.put("x-header-4", Arrays.asList("value4", "value5"));
expectedInitParamValues.put("x-header-5", Arrays.asList("extra-value"));

// when
Mockito.when(config.getInitParameter("x-header-1")).thenReturn("value1\n value2");
Mockito.when(config.getInitParameter("x-header-2")).thenReturn("value3");
Mockito.when(config.getInitParameter("x-header-3")).thenReturn("");
Mockito.when(config.getInitParameter("x-header-4")).thenReturn(" value4\r\n value5");

Vector<String> v = new Vector<>();
v.add("x-header-1");
v.add("x-header-2");
v.add("x-header-3");
v.add("x-header-4");
Mockito.when(config.getInitParameterNames()).thenReturn(v.elements());
Map<String, String> initParams = Map.of(
"x-header-1", "value1\nvalue2",
"x-header-2", "value3",
"x-header-3", "",
"x-header-4", "value4\nvalue5",
"x-header-5", "extra-value"
);
initParams.forEach((key, value) -> mockInitParameter(config, key, value));

Mockito.when(config.getInitParameterNames()).thenReturn(Collections.enumeration(initParams.keySet()));

filter.init(config);

// then
assertEquals(expected, filter.getHeaders());
assertEquals(expectedInitParamValues, filter.getHeaders());
}

@Test
public void doFilterTest() throws ServletException, IOException
{
public void doFilterTest() throws ServletException, IOException {
// given
initTest();
MockHttpServletResponse resp = new MockHttpServletResponse();

// Test appending a value to an existing header
resp.setHeader("x-header-5", "existing-value");

// when
filter.doFilter(req, resp, chain);

// then
Mockito.verify(resp, times(5)).addHeader(Mockito.any(), Mockito.any());
Mockito.verify(resp, times(1)).addHeader("x-header-1", "value1");
Mockito.verify(resp, times(1)).addHeader("x-header-1", "value2");
Mockito.verify(resp, times(1)).addHeader("x-header-2", "value3");
Mockito.verify(resp, times(1)).addHeader("x-header-4", "value4");
Mockito.verify(resp, times(1)).addHeader("x-header-4", "value5");
assertHeaderValues(resp, "x-header-1", "value1, value2");
assertHeaderValues(resp, "x-header-2", "value3");
assertHeaderValues(resp, "x-header-4", "value4, value5");
assertHeaderValues(resp, "x-header-5", "existing-value, extra-value");
}

@Test
public void destroyTest()
{
public void destroyTest() {
filter.destroy();
assertTrue(true);
}
}
}