1 package net.pterodactylus.sone.web.pages
3 import net.pterodactylus.sone.data.Post
4 import net.pterodactylus.sone.test.capture
5 import net.pterodactylus.sone.test.getInstance
6 import net.pterodactylus.sone.test.mock
7 import net.pterodactylus.sone.test.whenever
8 import net.pterodactylus.sone.web.baseInjector
9 import net.pterodactylus.util.web.Method.POST
10 import org.hamcrest.MatcherAssert.assertThat
11 import org.hamcrest.Matchers.contains
12 import org.hamcrest.Matchers.equalTo
13 import org.hamcrest.Matchers.notNullValue
15 import org.mockito.Mockito.any
16 import org.mockito.Mockito.never
17 import org.mockito.Mockito.times
18 import org.mockito.Mockito.verify
21 * Unit test for [UnbookmarkPage].
23 class UnbookmarkPageTest: WebPageTest(::UnbookmarkPage) {
26 fun `page returns correct path`() {
27 assertThat(page.path, equalTo("unbookmark.html"))
31 fun `page does not require login`() {
32 assertThat(page.requiresLogin(), equalTo(false))
36 fun `page returns correct title`() {
37 addTranslation("Page.Unbookmark.Title", "unbookmark page title")
38 assertThat(page.getPageTitle(soneRequest), equalTo("unbookmark page title"))
42 fun `get request does not redirect`() {
47 fun `get request with all-not-loaded parameter unloads all not loaded posts and redirects to bookmarks`() {
48 addHttpRequestParameter("post", "allNotLoaded")
49 val loadedPost1 = mock<Post>().apply { whenever(isLoaded).thenReturn(true) }
50 val loadedPost2 = mock<Post>().apply { whenever(isLoaded).thenReturn(true) }
51 val notLoadedPost1 = mock<Post>()
52 val notLoadedPost2 = mock<Post>()
53 whenever(core.bookmarkedPosts).thenReturn(setOf(loadedPost1, loadedPost2, notLoadedPost1, notLoadedPost2))
54 verifyRedirect("bookmarks.html") {
55 val postCaptor = capture<Post>()
56 verify(core, times(2)).unbookmarkPost(postCaptor.capture())
57 assertThat(postCaptor.allValues, contains(notLoadedPost1, notLoadedPost2))
62 fun `post request does not unbookmark not-present post but redirects to return page`() {
64 addHttpRequestPart("post", "post-id")
65 addHttpRequestPart("returnPage", "return.html")
66 verifyRedirect("return.html") {
67 verify(core, never()).unbookmarkPost(any())
72 fun `post request unbookmarks present post and redirects to return page`() {
74 addHttpRequestPart("post", "post-id")
75 addHttpRequestPart("returnPage", "return.html")
76 val post = mock<Post>().apply { whenever(isLoaded).thenReturn(true) }
77 addPost("post-id", post)
78 verifyRedirect("return.html") {
79 verify(core).unbookmarkPost(post)
84 fun `page can be created by dependency injection`() {
85 assertThat(baseInjector.getInstance<UnbookmarkPage>(), notNullValue())