1 package net.pterodactylus.sone.web.ajax
3 import com.google.common.base.Optional
4 import net.pterodactylus.sone.data.Post
5 import net.pterodactylus.sone.data.Sone
6 import net.pterodactylus.sone.test.mock
7 import net.pterodactylus.sone.test.whenever
8 import net.pterodactylus.sone.utils.asOptional
9 import org.hamcrest.MatcherAssert.assertThat
10 import org.hamcrest.Matchers.equalTo
11 import org.hamcrest.Matchers.nullValue
15 * Unit test for [CreatePostAjaxPage].
17 class CreatePostAjaxPageTest : JsonPageTest(::CreatePostAjaxPage) {
20 fun `page returns correct path`() {
21 assertThat(page.path, equalTo("createPost.ajax"))
25 fun `page needs form password`() {
26 assertThat(page.needsFormPassword(), equalTo(true))
30 fun `page requires login`() {
31 assertThat(page.requiresLogin(), equalTo(true))
35 fun `page requires a current sone`() {
37 assertThat(json.isSuccess, equalTo(false))
38 assertThat(json.error, equalTo("auth-required"))
42 fun `missing text parameter returns error`() {
43 assertThat(json.isSuccess, equalTo(false))
44 assertThat(json.error, equalTo("text-required"))
48 fun `empty text returns error`() {
49 addRequestParameter("text", "")
50 assertThat(json.isSuccess, equalTo(false))
51 assertThat(json.error, equalTo("text-required"))
55 fun `whitespace-only text returns error`() {
56 addRequestParameter("text", " ")
57 assertThat(json.isSuccess, equalTo(false))
58 assertThat(json.error, equalTo("text-required"))
62 fun `request with valid data creates post`() {
63 addRequestParameter("text", "test")
64 val post = createPost()
65 whenever(core.createPost(currentSone, Optional.absent(), "test")).thenReturn(post)
66 assertThat(json.isSuccess, equalTo(true))
67 assertThat(json["postId"].asText(), equalTo("id"))
68 assertThat(json["sone"].asText(), equalTo(currentSone.id))
69 assertThat(json["recipient"], nullValue())
73 fun `request with invalid recipient creates post without recipient`() {
74 addRequestParameter("text", "test")
75 addRequestParameter("recipient", "invalid")
76 val post = createPost()
77 whenever(core.createPost(currentSone, Optional.absent(), "test")).thenReturn(post)
78 assertThat(json.isSuccess, equalTo(true))
79 assertThat(json["postId"].asText(), equalTo("id"))
80 assertThat(json["sone"].asText(), equalTo(currentSone.id))
81 assertThat(json["recipient"], nullValue())
85 fun `request with valid data and recipient creates correct post`() {
86 addRequestParameter("text", "test")
87 addRequestParameter("recipient", "valid")
88 val recipient = mock<Sone>().apply { whenever(id).thenReturn("valid") }
90 val post = createPost("valid")
91 whenever(core.createPost(currentSone, Optional.of(recipient), "test")).thenReturn(post)
92 assertThat(json.isSuccess, equalTo(true))
93 assertThat(json["postId"].asText(), equalTo("id"))
94 assertThat(json["sone"].asText(), equalTo(currentSone.id))
95 assertThat(json["recipient"].asText(), equalTo("valid"))
99 fun `text is filtered correctly`() {
100 addRequestParameter("text", "Link http://freenet.test:8888/KSK@foo is filtered")
101 addRequestHeader("Host", "freenet.test:8888")
102 val post = createPost()
103 whenever(core.createPost(currentSone, Optional.absent(), "Link KSK@foo is filtered")).thenReturn(post)
104 assertThat(json.isSuccess, equalTo(true))
105 assertThat(json["postId"].asText(), equalTo("id"))
106 assertThat(json["sone"].asText(), equalTo(currentSone.id))
107 assertThat(json["recipient"], nullValue())
110 private fun createPost(recipientId: String? = null) =
112 whenever(id).thenReturn("id")
113 whenever(sone).thenReturn(currentSone)
114 whenever(this.recipientId).thenReturn(recipientId.asOptional())