Replace create reply ajax page with Kotlin version
[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(::CreateReplyAjaxPage) {
16
17         @Test
18         fun `page returns correct path`() {
19                 assertThat(page.path, equalTo("createReply.ajax"))
20         }
21
22         @Test
23         fun `page needs form password`() {
24                 assertThat(page.needsFormPassword(), equalTo(true))
25         }
26
27         @Test
28         fun `page requires login`() {
29                 assertThat(page.requiresLogin(), equalTo(true))
30         }
31
32         @Test
33         fun `invalid post ID results in error message`() {
34             assertThat(json.isSuccess, equalTo(false))
35                 assertThat(json.error, equalTo("invalid-post-id"))
36         }
37
38         @Test
39         fun `valid post ID results in created reply`() {
40                 val post = mock<Post>()
41                 addPost("post-id", post)
42                 val reply = mock<PostReply>().apply { whenever(id).thenReturn("reply-id") }
43                 whenever(core.createReply(currentSone, post, "")).thenReturn(reply)
44             addRequestParameter("post", "post-id")
45                 assertThat(json.isSuccess, equalTo(true))
46                 assertThat(json["reply"].asText(), equalTo("reply-id"))
47                 assertThat(json["sone"].asText(), equalTo("soneId"))
48         }
49
50         @Test
51         fun `text is filtered when creating reply`() {
52                 val post = mock<Post>()
53                 addPost("post-id", post)
54                 val reply = mock<PostReply>().apply { whenever(id).thenReturn("reply-id") }
55                 whenever(core.createReply(currentSone, post, "Text with KSK@foo.bar link")).thenReturn(reply)
56                 addRequestParameter("post", "post-id")
57                 addRequestParameter("text", "Text with http://127.0.0.1:8888/KSK@foo.bar link")
58                 addRequestHeader("Host", "127.0.0.1:8888")
59                 assertThat(json.isSuccess, equalTo(true))
60                 assertThat(json["reply"].asText(), equalTo("reply-id"))
61                 assertThat(json["sone"].asText(), equalTo("soneId"))
62         }
63
64         @Test
65         fun `sender can be chosen from local sones`() {
66             val sone = mock<Sone>().apply { whenever(id).thenReturn("local-sone") }
67                 addLocalSone("local-sone", sone)
68                 val post = mock<Post>()
69                 addPost("post-id", post)
70                 val reply = mock<PostReply>().apply { whenever(id).thenReturn("reply-id") }
71                 whenever(core.createReply(sone, post, "Text")).thenReturn(reply)
72                 addRequestParameter("post", "post-id")
73                 addRequestParameter("text", "Text")
74                 addRequestParameter("sender", "local-sone")
75                 assertThat(json.isSuccess, equalTo(true))
76                 assertThat(json["reply"].asText(), equalTo("reply-id"))
77                 assertThat(json["sone"].asText(), equalTo("local-sone"))
78         }
79
80 }