Skip to content

Commit 1bfb3ee

Browse files
committed
Update GeneralResponder to check whether the MethodResponder allows a Request and return a MethodNotAllowedResponse if it doesn't
1 parent 9adb662 commit 1bfb3ee

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/main/java/httpserver/responder/GeneralResponder.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import httpserver.AppConfig;
44
import httpserver.request.Request;
55
import httpserver.MethodResponderSupplier;
6+
import httpserver.response.MethodNotAllowedResponse;
67
import httpserver.response.Response;
78
import httpserver.response.ServerErrorResponse;
89

@@ -16,7 +17,12 @@ public GeneralResponder(MethodResponderSupplier methodResponderSupplier) {
1617
}
1718

1819
public Response respond(AppConfig appConfig, Request request) {
19-
Responder responder = methodResponderSupplier.supplyResponder(request);
20+
MethodResponder responder = methodResponderSupplier.supplyResponder(request);
21+
22+
if (!responder.allows(request)) {
23+
return new MethodNotAllowedResponse();
24+
}
25+
2026
try {
2127
return responder.respond(appConfig, request);
2228
} catch (IOException e) {

src/test/java/httpserver/responder/GeneralResponderTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import httpserver.request.Request;
55
import httpserver.MethodResponderSupplier;
66
import httpserver.response.Response;
7+
import org.junit.Ignore;
78
import org.junit.Test;
89

910
import java.io.IOException;
@@ -29,6 +30,7 @@ public GeneralResponderTest() {
2930

3031
@Test
3132
public void callsSupplyResponderOnResponderSupplierWithRequest() throws Exception {
33+
when(methodResponderMock.allows(any(Request.class))).thenReturn(true);
3234
when(methodResponderSupplierMock.supplyResponder(any())).thenReturn(methodResponderMock);
3335

3436
generalResponder.respond(appConfigMock, requestMock);
@@ -37,8 +39,19 @@ public void callsSupplyResponderOnResponderSupplierWithRequest() throws Exceptio
3739
verify(methodResponderMock).respond(appConfigMock, requestMock);
3840
}
3941

42+
@Test
43+
public void returns405IfTheResponderCalledDoesntAllowTheRequest() throws Exception {
44+
when(methodResponderSupplierMock.supplyResponder(any())).thenReturn(methodResponderMock);
45+
when(methodResponderMock.allows(any(Request.class))).thenReturn(false);
46+
47+
Response response = generalResponder.respond(appConfigMock, requestMock);
48+
49+
assertEquals(405, response.getStatusCode());
50+
}
51+
4052
@Test
4153
public void returnsServerErrorResponseIfTheResponderCalledReturnsAnError() throws Exception {
54+
when(methodResponderMock.allows(any(Request.class))).thenReturn(true);
4255
when(methodResponderMock.respond(any(), any())).thenThrow(new IOException());
4356
when(methodResponderSupplierMock.supplyResponder(any())).thenReturn(methodResponderMock);
4457

0 commit comments

Comments
 (0)