6931b69555b923a6abd58ca800b1f7e27d40966b
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / ajax / CreateReplyAjaxPageTest.kt
1 package net.pterodactylus.sone.web.ajax
2
3 import net.pterodactylus.sone.data.Post
4 import net.pterodactylus.sone.data.PostReply
5 import net.pterodactylus.sone.data.Sone
6 import net.pterodactylus.sone.test.mock
7 import net.pterodactylus.sone.test.whenever
8 import org.hamcrest.MatcherAssert.assertThat
9 import org.hamcrest.Matchers.equalTo
10 import org.junit.Test
11
12 /**
13  * Unit test for [CreateReplyAjaxPage].
14  */
15 class CreateReplyAjaxPageTest : JsonPageTest("createReply.ajax", pageSupplier = ::CreateReplyAjaxPage) {
16
17         @Test
18         fun `invalid post ID results in error message`() {
19             assertThat(json.isSuccess, equalTo(false))
20                 assertThat(json.error, equalTo("invalid-post-id"))
21         }
22
23         @Test
24         fun `valid post ID results in created reply`() {
25                 val post = mock<Post>()
26                 addPost(post, "post-id")
27                 val reply = mock<PostReply>().apply { whenever(id).thenReturn("reply-id") }
28                 whenever(core.createReply(currentSone, post, "")).thenReturn(reply)
29             addRequestParameter("post", "post-id")
30                 assertThat(json.isSuccess, equalTo(true))
31                 assertThat(json["reply"]?.asText(), equalTo("reply-id"))
32                 assertThat(json["sone"]?.asText(), equalTo("soneId"))
33         }
34
35         @Test
36         fun `text is filtered when creating reply`() {
37                 val post = mock<Post>()
38                 addPost(post, "post-id")
39                 val reply = mock<PostReply>().apply { whenever(id).thenReturn("reply-id") }
40                 whenever(core.createReply(currentSone, post, "Text with KSK@foo.bar link")).thenReturn(reply)
41                 addRequestParameter("post", "post-id")
42                 addRequestParameter("text", "Text with http://127.0.0.1:8888/KSK@foo.bar link")
43                 addRequestHeader("Host", "127.0.0.1:8888")
44                 assertThat(json.isSuccess, equalTo(true))
45                 assertThat(json["reply"]?.asText(), equalTo("reply-id"))
46                 assertThat(json["sone"]?.asText(), equalTo("soneId"))
47         }
48
49         @Test
50         fun `sender can be chosen from local sones`() {
51             val sone = mock<Sone>().apply { whenever(id).thenReturn("local-sone") }
52                 addLocalSone(sone)
53                 val post = mock<Post>()
54                 addPost(post, "post-id")
55                 val reply = mock<PostReply>().apply { whenever(id).thenReturn("reply-id") }
56                 whenever(core.createReply(sone, post, "Text")).thenReturn(reply)
57                 addRequestParameter("post", "post-id")
58                 addRequestParameter("text", "Text")
59                 addRequestParameter("sender", "local-sone")
60                 assertThat(json.isSuccess, equalTo(true))
61                 assertThat(json["reply"]?.asText(), equalTo("reply-id"))
62                 assertThat(json["sone"]?.asText(), equalTo("local-sone"))
63         }
64
65 }