Add unit test for mark as known page and slightly improve the logic
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / MarkAsKnownPageTest.kt
1 package net.pterodactylus.sone.web
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.web.WebTestUtils.redirectsTo
8 import org.junit.Test
9 import org.mockito.Mockito.verify
10
11 /**
12  * Unit test for [MarkAsKnownPage].
13  */
14 class MarkAsKnownPageTest : WebPageTest() {
15
16         private val page = MarkAsKnownPage(template, webInterface)
17
18         @Test
19         fun `posts can be marked as known`() {
20                 addHttpRequestParameter("returnPage", "return.html")
21                 addHttpRequestParameter("type", "post")
22                 addHttpRequestParameter("id", "post1 post2 post3")
23                 val posts = listOf(mock<Post>(), mock<Post>())
24                 addPost("post1", posts[0])
25                 addPost("post3", posts[1])
26                 expectedException.expect(redirectsTo("return.html"))
27                 try {
28                         page.handleRequest(freenetRequest, templateContext)
29                 } finally {
30                         verify(core).markPostKnown(posts[0])
31                         verify(core).markPostKnown(posts[1])
32                 }
33         }
34
35         @Test
36         fun `replies can be marked as known`() {
37                 addHttpRequestParameter("returnPage", "return.html")
38                 addHttpRequestParameter("type", "reply")
39                 addHttpRequestParameter("id", "reply1 reply2 reply3")
40                 val replies = listOf(mock<PostReply>(), mock<PostReply>())
41                 addPostReply("reply1", replies[0])
42                 addPostReply("reply3", replies[1])
43                 expectedException.expect(redirectsTo("return.html"))
44                 try {
45                         page.handleRequest(freenetRequest, templateContext)
46                 } finally {
47                         verify(core).markReplyKnown(replies[0])
48                         verify(core).markReplyKnown(replies[1])
49                 }
50         }
51
52         @Test
53         fun `sones can be marked as known`() {
54                 addHttpRequestParameter("returnPage", "return.html")
55                 addHttpRequestParameter("type", "sone")
56                 addHttpRequestParameter("id", "sone1 sone2 sone3")
57                 val sones = listOf(mock<Sone>(), mock<Sone>())
58                 addSone("sone1", sones[0])
59                 addSone("sone3", sones[1])
60                 expectedException.expect(redirectsTo("return.html"))
61                 try {
62                         page.handleRequest(freenetRequest, templateContext)
63                 } finally {
64                         verify(core).markSoneKnown(sones[0])
65                         verify(core).markSoneKnown(sones[1])
66                 }
67         }
68
69         @Test
70         fun `different type redirects to invalid page`() {
71                 addHttpRequestParameter("type", "foo")
72                 expectedException.expect(redirectsTo("invalid.html"))
73                 page.handleRequest(freenetRequest, templateContext)
74         }
75
76 }