DATAREST-1193 - DelegatingHandlerMapping is now a MatchableHandlerMapping.
DelegatingHandlerMapping now implements MatchableHandlerMapping by selecting the a delegate based on the already implemented algorithm and then invoking the ….match(…) method in case the selected one is a MatchableHandlerMapping in turn. Refactored the internals a bit to be able to reuse the selection algorithm from both ….getHandler(…) and ….match(…).
This commit is contained in:
@@ -17,6 +17,7 @@ package org.springframework.data.rest.webmvc.support;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.Assert.fail;
|
||||
import static org.mockito.ArgumentMatchers.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
@@ -25,12 +26,15 @@ import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Answers;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
import org.springframework.web.HttpMediaTypeNotAcceptableException;
|
||||
import org.springframework.web.HttpRequestMethodNotSupportedException;
|
||||
import org.springframework.web.bind.UnsatisfiedServletRequestParameterException;
|
||||
import org.springframework.web.servlet.HandlerMapping;
|
||||
import org.springframework.web.servlet.handler.MatchableHandlerMapping;
|
||||
import org.springframework.web.servlet.handler.RequestMatchResult;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link DelegatingHandlerMapping}.
|
||||
@@ -38,7 +42,7 @@ import org.springframework.web.servlet.HandlerMapping;
|
||||
* @author Oliver Gierke
|
||||
* @soundtrack Benny Greb - Stabila (Moving Parts)
|
||||
*/
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
@RunWith(MockitoJUnitRunner.Silent.class)
|
||||
public class DelegatingHandlerMappingUnitTests {
|
||||
|
||||
@Mock HandlerMapping first, second;
|
||||
@@ -54,6 +58,24 @@ public class DelegatingHandlerMappingUnitTests {
|
||||
assertHandlerTriedButExceptionThrown(mapping, UnsatisfiedServletRequestParameterException.class);
|
||||
}
|
||||
|
||||
@Test // DATAREST-1193
|
||||
public void exposesMatchabilityOfSelectedMapping() {
|
||||
|
||||
// Given:
|
||||
// A matching mapping that doesn't get selected
|
||||
MatchableHandlerMapping third = mock(MatchableHandlerMapping.class);
|
||||
doReturn(mock(RequestMatchResult.class)).when(third).match(any(), any());
|
||||
|
||||
// A matching mapping that gets selected
|
||||
RequestMatchResult result = mock(RequestMatchResult.class);
|
||||
MatchableHandlerMapping fourth = mock(MatchableHandlerMapping.class, Answers.RETURNS_MOCKS);
|
||||
doReturn(result).when(fourth).match(any(), any());
|
||||
|
||||
DelegatingHandlerMapping mapping = new DelegatingHandlerMapping(Arrays.asList(first, second, third, fourth));
|
||||
|
||||
assertThat(mapping.match(request, "somePattern")).isEqualTo(result);
|
||||
}
|
||||
|
||||
private final void assertHandlerTriedButExceptionThrown(HandlerMapping mapping, Class<? extends Exception> type)
|
||||
throws Exception {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user