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