🚧 Add Loaders to all template-using pages
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / page / FreenetTemplatePageTest.kt
1 package net.pterodactylus.sone.web.page
2
3 import net.pterodactylus.sone.test.*
4 import net.pterodactylus.util.web.*
5 import net.pterodactylus.util.web.Method.*
6 import org.hamcrest.MatcherAssert.*
7 import org.hamcrest.Matchers.*
8 import org.junit.*
9 import org.mockito.ArgumentMatchers.*
10
11 class FreenetTemplatePageTest {
12
13         private val page = FreenetTemplatePage("/test/path", null, null, null, "invalid-form-password")
14
15         @Test
16         fun `path is exposed correctly`() {
17                 assertThat(page.path, equalTo("/test/path"))
18         }
19
20         @Test
21         fun `getPageTitle() default implementation returns null`() {
22                 assertThat(page.getPageTitle(mock()), nullValue())
23         }
24
25         @Test
26         fun `isPrefixPage() default implementation returns false`() {
27                 assertThat(page.isPrefixPage, equalTo(false))
28         }
29
30         @Test
31         fun `getStylesheets() default implementation returns empty collection`() {
32                 assertThat(page.styleSheets, empty())
33         }
34
35         @Test
36         fun `getShortcutIcon() default implementation returns null`() {
37                 assertThat(page.shortcutIcon, nullValue())
38         }
39
40         @Test
41         fun `getRedirectTarget() default implementation returns null`() {
42                 assertThat(page.getRedirectTarget(mock()), nullValue())
43         }
44
45         @Test
46         fun `getAdditionalLinkNodes() default implementation returns empty collection`() {
47                 assertThat(page.getAdditionalLinkNodes(mock()), empty())
48         }
49
50         @Test
51         fun `isFullAccessOnly() default implementation returns false`() {
52                 assertThat(page.isFullAccessOnly, equalTo(false))
53         }
54
55         @Test
56         fun `isLinkExcepted() default implementation returns false`() {
57                 assertThat(page.isLinkExcepted(mock()), equalTo(false))
58         }
59
60         @Test
61         fun `isEnabled() returns true if full access only is false`() {
62                 assertThat(page.isEnabled(mock()), equalTo(true))
63         }
64
65         @Test
66         fun `isEnabled() returns false if full access only is true`() {
67                 val page = object : FreenetTemplatePage("/test/path", null, null, null, null) {
68                         override fun isFullAccessOnly() = true
69                 }
70                 assertThat(page.isEnabled(mock()), equalTo(false))
71         }
72
73         @Test
74         fun `page with redirect target throws redirect exception on handleRequest`() {
75                 val page = object : FreenetTemplatePage("/test/path", null, null, null, null) {
76                         override fun getRedirectTarget(request: FreenetRequest?) = "foo"
77                 }
78                 val request = mock<FreenetRequest>()
79                 val response = mock<Response>()
80                 val pageResponse = page.handleRequest(request, response)
81                 assertThat(pageResponse.statusCode, anyOf(equalTo(302), equalTo(307)))
82                 assertThat(pageResponse.headers, contains(hasHeader("location", "foo")))
83         }
84
85         @Test
86         fun `page with full access only returns unauthorized on handleRequest with non-full access request`() {
87                 val page = object : FreenetTemplatePage("/test/path", null, null, null, null) {
88                         override fun isFullAccessOnly() = true
89                 }
90                 val request = deepMock<FreenetRequest>()
91                 val response = Response(null)
92                 val pageResponse = page.handleRequest(request, response)
93                 assertThat(pageResponse.statusCode, equalTo(401))
94         }
95
96         @Test
97         fun `page redirects on POST without form password`() {
98                 val request = deepMock<FreenetRequest>().apply {
99                         whenever(httpRequest.getPartAsStringFailsafe(any(), anyInt())).thenReturn("")
100                         whenever(method).thenReturn(POST)
101                 }
102                 val response = Response(null)
103                 val pageResponse = page.handleRequest(request, response)
104                 assertThat(pageResponse.statusCode, anyOf(equalTo(302), equalTo(307)))
105                 assertThat(pageResponse.headers, contains(hasHeader("location", "invalid-form-password")))
106         }
107
108         @Test
109         fun `page redirects on POST with invalid password`() {
110                 val request = deepMock<FreenetRequest>().apply {
111                         whenever(httpRequest.getPartAsStringFailsafe(any(), anyInt())).thenReturn("invalid")
112                         whenever(method).thenReturn(POST)
113                 }
114                 val response = Response(null)
115                 val pageResponse = page.handleRequest(request, response)
116                 assertThat(pageResponse.statusCode, anyOf(equalTo(302), equalTo(307)))
117                 assertThat(pageResponse.headers, contains(hasHeader("location", "invalid-form-password")))
118         }
119
120 }