Add test for creating a post via AJAX.
[Sone.git] / src / test / java / net / pterodactylus / sone / web / ajax / CreatePostAjaxPageTest.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.nullValue;
6 import static org.mockito.Matchers.any;
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.clients.http.ToadletContext;
14 import freenet.support.api.HTTPRequest;
15
16 import org.junit.Test;
17
18 /**
19  * Unit test for {@link CreatePostAjaxPage}.
20  *
21  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
22  */
23 public class CreatePostAjaxPageTest {
24
25         private final Mocks mocks = new Mocks();
26         private final CreatePostAjaxPage createPostAjaxPage = new CreatePostAjaxPage(mocks.webInterface);
27
28         @Test
29         public void missingSoneResultsInAnError() {
30                 JsonReturnObject jsonReturnObject = createPostAjaxPage.createJsonObject(mocks.mockRequest(""));
31                 verifyError(jsonReturnObject, "auth-required");
32         }
33
34         private void verifyError(JsonReturnObject jsonReturnObject, String error) {
35                 assertThat(jsonReturnObject.isSuccess(), is(false));
36                 assertThat(((JsonErrorReturnObject) jsonReturnObject).getError(), is(error));
37         }
38
39         @Test
40         public void missingTextResultsInError() {
41                 configureLocalSone();
42                 FreenetRequest request = mocks.mockRequest("");
43                 JsonReturnObject jsonReturnObject = createPostAjaxPage.createJsonObject(request);
44                 verifyError(jsonReturnObject, "text-required");
45         }
46
47         @Test
48         public void emptyTextResultsInError() {
49                 configureLocalSone();
50         }
51
52         private void configureText(FreenetRequest request, String text) {
53                 HTTPRequest httpRequest = request.getHttpRequest();
54                 when(httpRequest.getParam("text")).thenReturn(text);
55         }
56
57         private void configureLocalSone() {
58                 Sone sone = mocks.mockSone("Sone").local().create();
59                 when(mocks.webInterface.getCurrentSone(any(ToadletContext.class))).thenReturn(sone);
60         }
61
62         @Test
63         public void postIsCreated() {
64                 configureLocalSone();
65                 FreenetRequest request = mocks.mockRequest("");
66                 configureText(request, "Test text.");
67                 JsonReturnObject jsonReturnObject = createPostAjaxPage.createJsonObject(request);
68                 assertThat(jsonReturnObject.isSuccess(), is(true));
69                 assertThat(mocks.database.getPost(jsonReturnObject.get("postId").asText()).isPresent(), is(true));
70         }
71
72         @Test
73         public void postWithMissingRecipientIsCreatedWithoutRecipient() {
74                 configureLocalSone();
75                 FreenetRequest request = mocks.mockRequest("");
76                 configureText(request, "Test text.");
77                 when(request.getHttpRequest().getParam("recipient")).thenReturn("Recipient");
78                 JsonReturnObject jsonReturnObject = createPostAjaxPage.createJsonObject(request);
79                 assertThat(jsonReturnObject.isSuccess(), is(true));
80                 assertThat(mocks.database.getPost(jsonReturnObject.get("postId").asText()).isPresent(), is(true));
81                 assertThat(jsonReturnObject.get("recipient").textValue(), nullValue());
82         }
83
84         @Test
85         public void postWithRecipientIsCreatedWithRecipient() {
86                 configureLocalSone();
87                 FreenetRequest request = mocks.mockRequest("");
88                 configureRecipient(request);
89                 configureText(request, "Test text.");
90                 JsonReturnObject jsonReturnObject = createPostAjaxPage.createJsonObject(request);
91                 assertThat(jsonReturnObject.isSuccess(), is(true));
92                 assertThat(mocks.database.getPost(jsonReturnObject.get("postId").asText()).isPresent(), is(true));
93                 assertThat(jsonReturnObject.get("recipient").textValue(), is("Recipient"));
94         }
95
96         private void configureRecipient(FreenetRequest request) {
97                 mocks.mockSone("Recipient").create();
98                 when(request.getHttpRequest().getParam("recipient")).thenReturn("Recipient");
99         }
100
101 }