Add dependency injection tests for bookmark page
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / BookmarkPageTest.kt
1 package net.pterodactylus.sone.web
2
3 import com.google.inject.Guice
4 import net.pterodactylus.sone.data.Post
5 import net.pterodactylus.sone.test.getInstance
6 import net.pterodactylus.sone.test.mock
7 import net.pterodactylus.util.web.Method.POST
8 import org.hamcrest.MatcherAssert.assertThat
9 import org.hamcrest.Matchers.equalTo
10 import org.hamcrest.Matchers.notNullValue
11 import org.hamcrest.Matchers.sameInstance
12 import org.junit.Test
13 import org.mockito.ArgumentMatchers.any
14 import org.mockito.Mockito.never
15 import org.mockito.Mockito.verify
16
17 /**
18  * Unit test for [BookmarkPage].
19  */
20 class BookmarkPageTest : WebPageTest() {
21
22         private val page = BookmarkPage(template, webInterface)
23         override fun getPage() = page
24
25         @Test
26         fun `path is set correctly`() {
27                 assertThat(page.path, equalTo("bookmark.html"))
28         }
29
30         @Test
31         fun `get request does not bookmark anything and does not redirect`() {
32                 page.processTemplate(freenetRequest, templateContext)
33                 verify(core, never()).bookmarkPost(any())
34         }
35
36         private fun setupBookmarkRequest() {
37                 request("", POST)
38                 addHttpRequestParameter("returnPage", "return-page.html")
39                 addHttpRequestParameter("post", "post-id")
40         }
41
42         @Test
43         fun `post is bookmarked correctly`() {
44                 setupBookmarkRequest()
45                 val post = mock<Post>()
46                 addPost("post-id", post)
47                 verifyRedirect("return-page.html") {
48                         verify(core).bookmarkPost(post)
49                 }
50         }
51
52         @Test
53         fun `non-existing post is not bookmarked`() {
54                 setupBookmarkRequest()
55                 verifyRedirect("return-page.html") {
56                         verify(core, never()).bookmarkPost(any())
57                 }
58         }
59
60         @Test
61         fun `bookmark page can be created by guice`() {
62                 assertThat(injector.getInstance<BookmarkPage>(), notNullValue())
63         }
64
65         @Test
66         fun `bookmark page is created as singleton`() {
67                 val firstInstance = injector.getInstance<BookmarkPage>()
68                 val secondInstance = injector.getInstance<BookmarkPage>()
69                 assertThat(firstInstance, sameInstance(secondInstance))
70         }
71
72 }