Replace unbookmark page with Kotlin version
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / UnbookmarkPageTest.kt
1 package net.pterodactylus.sone.web.pages
2
3 import net.pterodactylus.sone.data.Post
4 import net.pterodactylus.sone.test.capture
5 import net.pterodactylus.sone.test.mock
6 import net.pterodactylus.sone.test.whenever
7 import net.pterodactylus.util.web.Method.POST
8 import org.hamcrest.MatcherAssert.assertThat
9 import org.hamcrest.Matchers.contains
10 import org.hamcrest.Matchers.equalTo
11 import org.junit.Test
12 import org.mockito.Mockito.any
13 import org.mockito.Mockito.never
14 import org.mockito.Mockito.times
15 import org.mockito.Mockito.verify
16
17 /**
18  * Unit test for [UnbookmarkPage].
19  */
20 class UnbookmarkPageTest: WebPageTest() {
21
22         private val page = UnbookmarkPage(template, webInterface)
23
24         override fun getPage() = page
25
26         @Test
27         fun `page returns correct path`() {
28                 assertThat(page.path, equalTo("unbookmark.html"))
29         }
30
31         @Test
32         fun `page does not require login`() {
33                 assertThat(page.requiresLogin(), equalTo(false))
34         }
35
36         @Test
37         fun `page returns correct title`() {
38                 addTranslation("Page.Unbookmark.Title", "unbookmark page title")
39                 assertThat(page.getPageTitle(freenetRequest), equalTo("unbookmark page title"))
40         }
41
42         @Test
43         fun `get request does not redirect`() {
44                 verifyNoRedirect { }
45         }
46
47         @Test
48         fun `get request with all-not-loaded parameter unloads all not loaded posts and redirects to bookmarks`() {
49                 addHttpRequestParameter("post", "allNotLoaded")
50                 val loadedPost1 = mock<Post>().apply { whenever(isLoaded).thenReturn(true) }
51                 val loadedPost2 = mock<Post>().apply { whenever(isLoaded).thenReturn(true) }
52                 val notLoadedPost1 = mock<Post>()
53                 val notLoadedPost2 = mock<Post>()
54                 whenever(core.bookmarkedPosts).thenReturn(setOf(loadedPost1, loadedPost2, notLoadedPost1, notLoadedPost2))
55                 verifyRedirect("bookmarks.html") {
56                         val postCaptor = capture<Post>()
57                         verify(core, times(2)).unbookmarkPost(postCaptor.capture())
58                         assertThat(postCaptor.allValues, contains(notLoadedPost1, notLoadedPost2))
59                 }
60         }
61
62         @Test
63         fun `post request does not unbookmark not-present post but redirects to return page`() {
64                 setMethod(POST)
65                 addHttpRequestPart("post", "post-id")
66                 addHttpRequestPart("returnPage", "return.html")
67                 verifyRedirect("return.html") {
68                         verify(core, never()).unbookmarkPost(any())
69                 }
70         }
71
72         @Test
73         fun `post request unbookmarks present post and redirects to return page`() {
74                 setMethod(POST)
75                 addHttpRequestPart("post", "post-id")
76                 addHttpRequestPart("returnPage", "return.html")
77                 val post = mock<Post>().apply { whenever(isLoaded).thenReturn(true) }
78                 addPost("post-id", post)
79                 verifyRedirect("return.html") {
80                         verify(core).unbookmarkPost(post)
81                 }
82         }
83
84 }