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