Skip to content

Commit 4343e4b

Browse files
committed
Add ServerErrorResponses and general try/catch over all responders in the GeneralResponder
1 parent af1bb6d commit 4343e4b

File tree

4 files changed

+58
-4
lines changed

4 files changed

+58
-4
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import httpserver.Request;
55
import httpserver.ResponderSupplier;
66
import httpserver.response.Response;
7+
import httpserver.response.ServerErrorResponse;
8+
9+
import java.io.IOException;
710

811

912
public class GeneralResponder implements Responder {
@@ -16,6 +19,10 @@ public GeneralResponder(ResponderSupplier responderSupplier) {
1619
@Override
1720
public Response respond(AppConfig appConfig, Request request) {
1821
Responder responder = responderSupplier.responderForMethodString(request.getMethodString());
19-
return responder.respond(appConfig, request);
22+
try {
23+
return responder.respond(appConfig, request);
24+
} catch (IOException e) {
25+
return new ServerErrorResponse();
26+
}
2027
}
2128
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package httpserver.response;
2+
3+
public class ServerErrorResponse extends Response {
4+
@Override
5+
public int getStatusCode() {
6+
return 500;
7+
}
8+
}

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

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,25 @@
33
import httpserver.AppConfig;
44
import httpserver.Request;
55
import httpserver.ResponderSupplier;
6+
import httpserver.response.Response;
67
import org.junit.Test;
78

9+
import java.io.IOException;
10+
11+
import static org.junit.Assert.*;
812
import static org.mockito.Mockito.*;
913

1014
public class GeneralResponderTest {
15+
16+
private final AppConfig appConfigMock;
17+
private final Request requestMock;
18+
19+
public GeneralResponderTest() {
20+
appConfigMock = mock(AppConfig.class);
21+
requestMock = mock(Request.class);
22+
when(requestMock.getMethodString()).thenReturn("methodString");
23+
}
24+
1125
@Test
1226
public void callsResponderForMethodStringOnResponderSupplier() throws Exception {
1327
ResponderSupplier responderSupplierMock = mock(ResponderSupplier.class);
@@ -16,12 +30,23 @@ public void callsResponderForMethodStringOnResponderSupplier() throws Exception
1630

1731
GeneralResponder generalResponder = new GeneralResponder(responderSupplierMock);
1832

19-
AppConfig appConfigMock = mock(AppConfig.class);
20-
Request requestMock = mock(Request.class);
21-
when(requestMock.getMethodString()).thenReturn("methodString");
2233
generalResponder.respond(appConfigMock, requestMock);
2334

2435
verify(responderSupplierMock).responderForMethodString("methodString");
2536
verify(responderMock).respond(appConfigMock, requestMock);
2637
}
38+
39+
@Test
40+
public void returnsServerErrorResponseIfTheResponderCalledReturnsAnError() throws Exception {
41+
ResponderSupplier responderSupplierMock = mock(ResponderSupplier.class);
42+
Responder responderMock = mock(Responder.class);
43+
when(responderMock.respond(any(), any())).thenThrow(new IOException());
44+
when(responderSupplierMock.responderForMethodString(any())).thenReturn(responderMock);
45+
46+
GeneralResponder generalResponder = new GeneralResponder(responderSupplierMock);
47+
48+
Response response = generalResponder.respond(appConfigMock, requestMock);
49+
50+
assertEquals(500, response.getStatusCode());
51+
}
2752
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package httpserver.response;
2+
3+
import org.junit.Test;
4+
5+
import static org.junit.Assert.*;
6+
7+
public class ServerErrorResponseTest {
8+
@Test
9+
public void has500ResponseCode() throws Exception {
10+
ServerErrorResponse serverErrorResponse = new ServerErrorResponse();
11+
12+
assertEquals(500, serverErrorResponse.getStatusCode());
13+
}
14+
}

0 commit comments

Comments
 (0)