1 package net.pterodactylus.sone.web.ajax;
3 import static org.hamcrest.MatcherAssert.assertThat;
4 import static org.hamcrest.Matchers.is;
5 import static org.hamcrest.Matchers.notNullValue;
6 import static org.mockito.Mockito.mock;
7 import static org.mockito.Mockito.when;
9 import net.pterodactylus.sone.data.Mocks;
10 import net.pterodactylus.sone.data.Sone;
11 import net.pterodactylus.sone.web.page.FreenetRequest;
13 import freenet.support.api.HTTPRequest;
15 import org.junit.Test;
18 * Unit test for {@link CreateReplyAjaxPage}.
20 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
22 public class CreateReplyAjaxPageTest {
24 private final Mocks mocks = new Mocks();
25 private final CreateReplyAjaxPage createReplyAjaxPage = new CreateReplyAjaxPage(mocks.webInterface);
26 private final FreenetRequest freenetRequest = mocks.mockRequest("createReply.ajax");
29 public void canCreateReplyWithAllOptionalValues() {
30 Sone sender = mocks.mockSone("SenderId").local().create();
31 Sone remote = mocks.mockSone("Remote").create();
32 mocks.mockPost(remote, "PostId").create();
33 HTTPRequest httpRequest = createHttpRequest(freenetRequest);
34 setReplyText(httpRequest, "Reply Text");
35 when(httpRequest.getParam("sender")).thenReturn("SenderId");
36 JsonReturnObject jsonReturnObject = createReplyAjaxPage.createJsonObject(freenetRequest);
37 verifySuccess(sender, jsonReturnObject);
40 private void verifySuccess(Sone sender, JsonReturnObject jsonReturnObject) {
41 assertThat(jsonReturnObject.isSuccess(), is(true));
42 assertThat(jsonReturnObject.get("reply").textValue(), notNullValue());
43 assertThat(jsonReturnObject.get("sone").textValue(), is(sender.getId()));
46 private void setReplyText(HTTPRequest httpRequest, String replyText) {
47 when(httpRequest.getParam("text")).thenReturn(replyText);
50 private HTTPRequest createHttpRequest(FreenetRequest freenetRequest) {
51 HTTPRequest httpRequest = mock(HTTPRequest.class);
52 when(httpRequest.getParam("post")).thenReturn("PostId");
53 when(freenetRequest.getHttpRequest()).thenReturn(httpRequest);
58 public void canCreateReplyWithDefaultSender() {
59 Sone sender = mocks.mockSone("SenderId").current().local().create();
60 Sone remote = mocks.mockSone("Remote").create();
61 mocks.mockPost(remote, "PostId").create();
62 HTTPRequest httpRequest = createHttpRequest(freenetRequest);
63 setReplyText(httpRequest, "Reply Text");
64 JsonReturnObject jsonReturnObject = createReplyAjaxPage.createJsonObject(freenetRequest);
65 verifySuccess(sender, jsonReturnObject);
69 public void canNotCreateReplyWithoutSender() {
70 Sone remote = mocks.mockSone("Remote").create();
71 mocks.mockPost(remote, "PostId").create();
72 HTTPRequest httpRequest = createHttpRequest(freenetRequest);
73 setReplyText(httpRequest, "Reply Text");
74 JsonReturnObject jsonReturnObject = createReplyAjaxPage.createJsonObject(freenetRequest);
75 verifyFailure(jsonReturnObject, "invalid-sone-id");
78 private void verifyFailure(JsonReturnObject jsonReturnObject, String errorId) {
79 assertThat(jsonReturnObject.isSuccess(), is(false));
80 assertThat(((JsonErrorReturnObject) jsonReturnObject).getError(), is(errorId));
84 public void canNotCreateReplyWithoutPost() {
85 mocks.mockSone("SenderId").local().create();
86 HTTPRequest httpRequest = createHttpRequest(freenetRequest);
87 setReplyText(httpRequest, "Reply Text");
88 when(httpRequest.getParam("sender")).thenReturn("SenderId");
89 JsonReturnObject jsonReturnObject = createReplyAjaxPage.createJsonObject(freenetRequest);
90 verifyFailure(jsonReturnObject, "invalid-post-id");
93 @Test(expected = IllegalStateException.class)
94 public void canNotCreateReplyWithoutText() {
95 mocks.mockSone("SenderId").local().create();
96 Sone remote = mocks.mockSone("Remote").create();
97 mocks.mockPost(remote, "PostId").create();
98 HTTPRequest httpRequest = createHttpRequest(freenetRequest);
99 setReplyText(httpRequest, "");
100 when(httpRequest.getParam("sender")).thenReturn("SenderId");
101 createReplyAjaxPage.createJsonObject(freenetRequest);