Set URI and request method separately in tests
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / DismissNotificationPageTest.kt
1 package net.pterodactylus.sone.web.pages
2
3 import net.pterodactylus.sone.test.mock
4 import net.pterodactylus.sone.test.whenever
5 import net.pterodactylus.sone.web.pages.WebPageTest
6 import net.pterodactylus.sone.web.pages.DismissNotificationPage
7 import net.pterodactylus.util.notify.Notification
8 import net.pterodactylus.util.web.Method.GET
9 import net.pterodactylus.util.web.Method.POST
10 import org.hamcrest.MatcherAssert.assertThat
11 import org.hamcrest.Matchers.equalTo
12 import org.junit.Test
13 import org.mockito.Mockito.never
14 import org.mockito.Mockito.verify
15
16 /**
17  * Unit test for [DismissNotificationPage].
18  */
19 class DismissNotificationPageTest: WebPageTest() {
20
21         private val page = DismissNotificationPage(template, webInterface)
22         private val notification = mock<Notification>()
23
24         override fun getPage() = page
25
26         @Test
27         fun `page returns correct path`() {
28                 assertThat(page.path, equalTo("dismissNotification.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                 whenever(l10n.getString("Page.DismissNotification.Title")).thenReturn("dismiss notification page")
39                 assertThat(page.getPageTitle(freenetRequest), equalTo("dismiss notification page"))
40         }
41
42         @Test
43         fun `get request with invalid notification ID redirects to return page`() {
44                 setMethod(POST)
45                 addHttpRequestPart("returnPage", "return.html")
46                 verifyRedirect("return.html")
47         }
48
49         @Test
50         fun `get request with non-dismissible notification never dismisses the notification but redirects to return page`() {
51                 setMethod(POST)
52                 addNotification("notification-id", notification)
53                 addHttpRequestPart("notification", "notification-id")
54                 addHttpRequestPart("returnPage", "return.html")
55                 verifyRedirect("return.html") {
56                         verify(notification, never()).dismiss()
57                 }
58         }
59
60         @Test
61         fun `post request with dismissible notification dismisses the notification and redirects to return page`() {
62                 setMethod(POST)
63                 whenever(notification.isDismissable).thenReturn(true)
64                 addNotification("notification-id", notification)
65                 addHttpRequestPart("notification", "notification-id")
66                 addHttpRequestPart("returnPage", "return.html")
67                 verifyRedirect("return.html") {
68                         verify(notification).dismiss()
69                 }
70         }
71
72 }