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("createPost.ajax", pageSupplier = ::CreatePostAjaxPage) {
20 fun `missing text parameter returns error`() {
21 assertThatJsonFailed("text-required")
25 fun `empty text returns error`() {
26 addRequestParameter("text", "")
27 assertThatJsonFailed("text-required")
31 fun `whitespace-only text returns error`() {
32 addRequestParameter("text", " ")
33 assertThatJsonFailed("text-required")
37 fun `request with valid data creates post`() {
38 addRequestParameter("text", "test")
39 val post = createPost()
40 whenever(core.createPost(currentSone, Optional.absent(), "test")).thenReturn(post)
41 assertThatJsonIsSuccessful()
42 assertThat(json["postId"]?.asText(), equalTo("id"))
43 assertThat(json["sone"]?.asText(), equalTo(currentSone.id))
44 assertThat(json["recipient"], nullValue())
48 fun `request with invalid recipient creates post without recipient`() {
49 addRequestParameter("text", "test")
50 addRequestParameter("recipient", "invalid")
51 val post = createPost()
52 whenever(core.createPost(currentSone, Optional.absent(), "test")).thenReturn(post)
53 assertThatJsonIsSuccessful()
54 assertThat(json["postId"]?.asText(), equalTo("id"))
55 assertThat(json["sone"]?.asText(), equalTo(currentSone.id))
56 assertThat(json["recipient"], nullValue())
60 fun `request with valid data and recipient creates correct post`() {
61 addRequestParameter("text", "test")
62 addRequestParameter("recipient", "valid")
63 val recipient = mock<Sone>().apply { whenever(id).thenReturn("valid") }
65 val post = createPost("valid")
66 whenever(core.createPost(currentSone, Optional.of(recipient), "test")).thenReturn(post)
67 assertThatJsonIsSuccessful()
68 assertThat(json["postId"]?.asText(), equalTo("id"))
69 assertThat(json["sone"]?.asText(), equalTo(currentSone.id))
70 assertThat(json["recipient"]?.asText(), equalTo("valid"))
74 fun `text is filtered correctly`() {
75 addRequestParameter("text", "Link http://freenet.test:8888/KSK@foo is filtered")
76 addRequestHeader("Host", "freenet.test:8888")
77 val post = createPost()
78 whenever(core.createPost(currentSone, Optional.absent(), "Link KSK@foo is filtered")).thenReturn(post)
79 assertThatJsonIsSuccessful()
80 assertThat(json["postId"]?.asText(), equalTo("id"))
81 assertThat(json["sone"]?.asText(), equalTo(currentSone.id))
82 assertThat(json["recipient"], nullValue())
85 private fun createPost(recipientId: String? = null) =
87 whenever(id).thenReturn("id")
88 whenever(sone).thenReturn(currentSone)
89 whenever(this.recipientId).thenReturn(recipientId.asOptional())