Skip to content

Commit 3dc0ea5

Browse files
committed
Remove InvalidMethodResponder and update MethodResponderSupplier to throw an exception if no MethodResponder handles the Request, the GeneralResponder then throws a MethodNotAllowedResponse
1 parent dae8293 commit 3dc0ea5

File tree

8 files changed

+22
-72
lines changed

8 files changed

+22
-72
lines changed

src/main/java/httpserver/MethodResponderSupplier.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,19 @@
77
import java.util.List;
88

99
public class MethodResponderSupplier {
10-
private final MethodResponder invalidMethodResponder;
1110
private final List<MethodResponder> methodResponders;
1211

13-
public MethodResponderSupplier(MethodResponder invalidMethodResponder) {
14-
this.invalidMethodResponder = invalidMethodResponder;
12+
public MethodResponderSupplier() {
1513
this.methodResponders = new ArrayList<>();
1614
}
1715

18-
public MethodResponder supplyResponder(Request request) {
16+
public MethodResponder supplyResponder(Request request) throws Exception {
1917
for (MethodResponder methodResponder: methodResponders) {
2018
if (methodResponder.handles(request)) {
2119
return methodResponder;
2220
}
2321
}
24-
return invalidMethodResponder;
22+
throw new Exception();
2523
}
2624

2725
public void registerResponder(MethodResponder methodResponder) {

src/main/java/httpserver/ResponderSupplierFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
public class ResponderSupplierFactory {
1111
public MethodResponderSupplier makeResponderSupplier() {
12-
MethodResponderSupplier methodResponderSupplier = new MethodResponderSupplier(new InvalidMethodResponder());
12+
MethodResponderSupplier methodResponderSupplier = new MethodResponderSupplier();
1313

1414
PathExaminer pathExaminer = new PathExaminer();
1515
FileOperator fileOperator = new FileOperator();

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,13 @@ public GeneralResponder(MethodResponderSupplier methodResponderSupplier) {
1717
}
1818

1919
public Response respond(AppConfig appConfig, Request request) {
20-
MethodResponder responder = methodResponderSupplier.supplyResponder(request);
20+
MethodResponder responder;
21+
22+
try {
23+
responder = methodResponderSupplier.supplyResponder(request);
24+
} catch (Exception e) {
25+
return new MethodNotAllowedResponse();
26+
}
2127

2228
if (!responder.allows(request)) {
2329
return new MethodNotAllowedResponse();

src/main/java/httpserver/responder/InvalidMethodResponder.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

src/test/java/httpserver/MethodResponderSupplierTest.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import httpserver.request.Request;
44
import httpserver.responder.GetResponder;
5-
import httpserver.responder.InvalidMethodResponder;
65
import httpserver.responder.MethodResponder;
76
import httpserver.responder.PostResponder;
87
import org.junit.Test;
@@ -15,15 +14,13 @@
1514
public class MethodResponderSupplierTest {
1615

1716
private final GetResponder getResponderMock;
18-
private final InvalidMethodResponder invalidMethodResponderMock;
1917
private final MethodResponderSupplier methodResponderSupplier;
2018
private final PostResponder postResponderMock;
2119

2220
public MethodResponderSupplierTest() {
2321
getResponderMock = mock(GetResponder.class);
2422
postResponderMock = mock(PostResponder.class);
25-
invalidMethodResponderMock = mock(InvalidMethodResponder.class);
26-
methodResponderSupplier = new MethodResponderSupplier(invalidMethodResponderMock);
23+
methodResponderSupplier = new MethodResponderSupplier();
2724
methodResponderSupplier.registerResponder(getResponderMock);
2825
methodResponderSupplier.registerResponder(postResponderMock);
2926
}

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import httpserver.request.Request;
55
import httpserver.MethodResponderSupplier;
66
import httpserver.response.Response;
7-
import org.junit.Ignore;
87
import org.junit.Test;
98

109
import java.io.IOException;
@@ -49,6 +48,15 @@ public void returns405IfTheResponderCalledDoesntAllowTheRequest() throws Excepti
4948
assertEquals(405, response.getStatusCode());
5049
}
5150

51+
@Test
52+
public void returns405IfTheMethodSupplierThrowsAnException() throws Exception {
53+
when(methodResponderSupplierMock.supplyResponder(any())).thenThrow(new Exception());
54+
55+
Response response = generalResponder.respond(appConfigMock, requestMock);
56+
57+
assertEquals(405, response.getStatusCode());
58+
}
59+
5260
@Test
5361
public void returnsServerErrorResponseIfTheResponderCalledReturnsAnError() throws Exception {
5462
when(methodResponderMock.allows(any(Request.class))).thenReturn(true);

src/test/java/httpserver/responder/InvalidMethodResponderTest.java

Lines changed: 0 additions & 32 deletions
This file was deleted.

src/test/java/httpserver/responder/OptionsResponderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public void responderHasListOfAllowedMethodsInAllowHeader() throws Exception {
2525
MethodResponder putResponderMock = mock(PutResponder.class);
2626
when(putResponderMock.allows(any())).thenReturn(false);
2727

28-
MethodResponderSupplier methodResponderSupplier = new MethodResponderSupplier(mock(InvalidMethodResponder.class));
28+
MethodResponderSupplier methodResponderSupplier = new MethodResponderSupplier();
2929
methodResponderSupplier.registerResponder(getResponderMock);
3030
methodResponderSupplier.registerResponder(headResponderMock);
3131
methodResponderSupplier.registerResponder(putResponderMock);

0 commit comments

Comments
 (0)