Add test for creating replies via AJAX.
[Sone.git] / src / test / java / net / pterodactylus / sone / web / ajax / CreateReplyAjaxPageTest.java
1 package net.pterodactylus.sone.web.ajax;
2
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;
8
9 import net.pterodactylus.sone.data.Mocks;
10 import net.pterodactylus.sone.data.Sone;
11 import net.pterodactylus.sone.web.page.FreenetRequest;
12
13 import freenet.support.api.HTTPRequest;
14
15 import org.junit.Test;
16
17 /**
18  * Unit test for {@link CreateReplyAjaxPage}.
19  *
20  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
21  */
22 public class CreateReplyAjaxPageTest {
23
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");
27
28         @Test
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);
38         }
39
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()));
44         }
45
46         private void setReplyText(HTTPRequest httpRequest, String replyText) {
47                 when(httpRequest.getParam("text")).thenReturn(replyText);
48         }
49
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);
54                 return httpRequest;
55         }
56
57         @Test
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);
66         }
67
68         @Test
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");
76         }
77
78         private void verifyFailure(JsonReturnObject jsonReturnObject, String errorId) {
79                 assertThat(jsonReturnObject.isSuccess(), is(false));
80                 assertThat(((JsonErrorReturnObject) jsonReturnObject).getError(), is(errorId));
81         }
82
83         @Test
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");
91         }
92
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);
102         }
103
104 }