eeb7ca7cddcfc0c386380ce4a1dc231f42e99fe0
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / MarkAsKnownPageTest.kt
1 package net.pterodactylus.sone.web.pages
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.getInstance
7 import net.pterodactylus.sone.test.mock
8 import net.pterodactylus.sone.web.baseInjector
9 import net.pterodactylus.util.web.Method.POST
10 import org.hamcrest.MatcherAssert.assertThat
11 import org.hamcrest.Matchers.equalTo
12 import org.hamcrest.Matchers.notNullValue
13 import org.junit.Test
14 import org.mockito.Mockito.verify
15
16 /**
17  * Unit test for [MarkAsKnownPage].
18  */
19 class MarkAsKnownPageTest: WebPageTest(::MarkAsKnownPage) {
20
21         @Test
22         fun `page returns correct path`() {
23                 assertThat(page.path, equalTo("markAsKnown.html"))
24         }
25
26         @Test
27         fun `page does not require login`() {
28                 assertThat(page.requiresLogin(), equalTo(false))
29         }
30
31         @Test
32         fun `page returns correct title`() {
33                 addTranslation("Page.MarkAsKnown.Title", "mark as known page title")
34                 assertThat(page.getPageTitle(freenetRequest), equalTo("mark as known page title"))
35         }
36
37         @Test
38         fun `posts can be marked as known`() {
39                 setMethod(POST)
40                 addHttpRequestPart("returnPage", "return.html")
41                 addHttpRequestPart("type", "post")
42                 addHttpRequestPart("id", "post1 post2 post3")
43                 val posts = listOf(mock<Post>(), mock<Post>())
44                 addPost("post1", posts[0])
45                 addPost("post3", posts[1])
46                 verifyRedirect("return.html") {
47                         verify(core).markPostKnown(posts[0])
48                         verify(core).markPostKnown(posts[1])
49                 }
50         }
51
52         @Test
53         fun `replies can be marked as known`() {
54                 setMethod(POST)
55                 addHttpRequestPart("returnPage", "return.html")
56                 addHttpRequestPart("type", "reply")
57                 addHttpRequestPart("id", "reply1 reply2 reply3")
58                 val replies = listOf(mock<PostReply>(), mock<PostReply>())
59                 addPostReply("reply1", replies[0])
60                 addPostReply("reply3", replies[1])
61                 verifyRedirect("return.html") {
62                         verify(core).markReplyKnown(replies[0])
63                         verify(core).markReplyKnown(replies[1])
64                 }
65         }
66
67         @Test
68         fun `sones can be marked as known`() {
69                 setMethod(POST)
70                 addHttpRequestPart("returnPage", "return.html")
71                 addHttpRequestPart("type", "sone")
72                 addHttpRequestPart("id", "sone1 sone2 sone3")
73                 val sones = listOf(mock<Sone>(), mock<Sone>())
74                 addSone("sone1", sones[0])
75                 addSone("sone3", sones[1])
76                 verifyRedirect("return.html") {
77                         verify(core).markSoneKnown(sones[0])
78                         verify(core).markSoneKnown(sones[1])
79                 }
80         }
81
82         @Test
83         fun `different type redirects to invalid page`() {
84                 setMethod(POST)
85                 addHttpRequestPart("type", "foo")
86                 verifyRedirect("invalid.html")
87         }
88
89         @Test
90         fun `page can be created by dependency injection`() {
91             assertThat(baseInjector.getInstance<MarkAsKnownPage>(), notNullValue())
92         }
93
94 }