Add unit test for mark as known ajax page
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / ajax / MarkAsKnownAjaxPageTest.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 import org.mockito.Mockito.any
12 import org.mockito.Mockito.never
13 import org.mockito.Mockito.verify
14
15 /**
16  * Unit test for [MarkAsKnownAjaxPage].
17  */
18 class MarkAsKnownAjaxPageTest : JsonPageTest("markAsKnown.ajax", requiresLogin = false, pageSupplier = ::MarkAsKnownAjaxPage) {
19
20         @Test
21         fun `request without type results in invalid-type`() {
22                 assertThat(json.isSuccess, equalTo(false))
23                 assertThat(json.error, equalTo("invalid-type"))
24         }
25
26         @Test
27         fun `request with unknown sone returns successfully`() {
28                 addRequestParameter("type", "sone")
29                 addRequestParameter("sone", "invalid")
30                 assertThat(json.isSuccess, equalTo(true))
31                 verify(core, never()).markSoneKnown(any())
32         }
33
34         @Test
35         fun `request with multiple valid sones marks sones as known and returns successfully`() {
36                 addRequestParameter("type", "sone")
37                 addRequestParameter("id", "sone-id1 sone-id2")
38                 val sone1 = mock<Sone>().apply { whenever(id).thenReturn("sone-id1") }
39                 val sone2 = mock<Sone>().apply { whenever(id).thenReturn("sone-id2") }
40                 addSone(sone1)
41                 addSone(sone2)
42                 assertThat(json.isSuccess, equalTo(true))
43                 verify(core).markSoneKnown(sone1)
44                 verify(core).markSoneKnown(sone2)
45         }
46
47         @Test
48         fun `request with multiple valid posts marks posts as known and returns successfully`() {
49                 addRequestParameter("type", "post")
50                 addRequestParameter("id", "post1 post2 post 3")
51                 val post1 = mock<Post>()
52                 val post2 = mock<Post>()
53                 addPost(post1, "post1")
54                 addPost(post2, "post2")
55                 assertThat(json.isSuccess, equalTo(true))
56                 verify(core).markPostKnown(post1)
57                 verify(core).markPostKnown(post2)
58         }
59
60         @Test
61         fun `request with multiple valid replies marks replies as known and returns successfully`() {
62                 addRequestParameter("type", "reply")
63                 addRequestParameter("id", "reply1 reply2 reply3")
64                 val reply1 = mock<PostReply>()
65                 val reply2 = mock<PostReply>()
66                 addReply(reply1, "reply1")
67                 addReply(reply2, "reply2")
68                 assertThat(json.isSuccess, equalTo(true))
69                 verify(core).markReplyKnown(reply1)
70                 verify(core).markReplyKnown(reply2)
71         }
72
73 }