🔥 Remove unused properties
[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.main.*
4 import net.pterodactylus.sone.test.*
5 import net.pterodactylus.util.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 class FreenetTemplatePageTest {
13
14         private val templateRenderer = deepMock<TemplateRenderer>()
15         private val loaders = mock<Loaders>()
16         private val page = TestPage(templateRenderer, loaders)
17
18         @Test
19         fun `path is exposed correctly`() {
20                 assertThat(page.path, equalTo("/test/path"))
21         }
22
23         @Test
24         fun `getPageTitle() default implementation returns empty string`() {
25                 assertThat(page.getPageTitle(mock()), equalTo(""))
26         }
27
28         @Test
29         fun `isPrefixPage() default implementation returns false`() {
30                 assertThat(page.isPrefixPage, equalTo(false))
31         }
32
33         @Test
34         fun `getStylesheets() default implementation returns empty collection`() {
35                 assertThat(page.styleSheets, empty())
36         }
37
38         @Test
39         fun `getShortcutIcon() default implementation returns null`() {
40                 assertThat(page.shortcutIcon, nullValue())
41         }
42
43         @Test
44         fun `getRedirectTarget() default implementation returns null`() {
45                 assertThat(page.getRedirectTarget(mock()), nullValue())
46         }
47
48         @Test
49         fun `getAdditionalLinkNodes() default implementation returns empty collection`() {
50                 assertThat(page.getAdditionalLinkNodes(mock()), empty())
51         }
52
53         @Test
54         fun `isFullAccessOnly() default implementation returns false`() {
55                 assertThat(page.isFullAccessOnly, equalTo(false))
56         }
57
58         @Test
59         fun `isLinkExcepted() default implementation returns false`() {
60                 assertThat(page.isLinkExcepted(mock()), equalTo(false))
61         }
62
63         @Test
64         fun `isEnabled() returns true if full access only is false`() {
65                 assertThat(page.isEnabled(mock()), equalTo(true))
66         }
67
68         @Test
69         fun `isEnabled() returns false if full access only is true`() {
70                 val page = object : TestPage(templateRenderer, loaders) {
71                         override val isFullAccessOnly = true
72                 }
73                 assertThat(page.isEnabled(mock()), equalTo(false))
74         }
75
76         @Test
77         fun `page with redirect target throws redirect exception on handleRequest`() {
78                 val page = object : TestPage(templateRenderer, loaders) {
79                         override fun getRedirectTarget(request: FreenetRequest) = "foo"
80                 }
81                 val request = mock<FreenetRequest>()
82                 val response = mock<Response>()
83                 val pageResponse = page.handleRequest(request, response)
84                 assertThat(pageResponse.statusCode, anyOf(equalTo(302), equalTo(307)))
85                 assertThat(pageResponse.headers, contains(hasHeader("location", "foo")))
86         }
87
88         @Test
89         fun `page with full access only returns unauthorized on handleRequest with non-full access request`() {
90                 val page = object : TestPage(templateRenderer, loaders) {
91                         override val isFullAccessOnly = true
92                 }
93                 val request = deepMock<FreenetRequest>()
94                 val response = Response(null)
95                 val pageResponse = page.handleRequest(request, response)
96                 assertThat(pageResponse.statusCode, equalTo(401))
97         }
98
99         @Test
100         fun `page redirects on POST without form password`() {
101                 val request = deepMock<FreenetRequest>().apply {
102                         whenever(httpRequest.getPartAsStringFailsafe(any(), anyInt())).thenReturn("")
103                         whenever(method).thenReturn(POST)
104                 }
105                 val response = Response(null)
106                 val pageResponse = page.handleRequest(request, response)
107                 assertThat(pageResponse.statusCode, anyOf(equalTo(302), equalTo(307)))
108                 assertThat(pageResponse.headers, contains(hasHeader("location", "invalid-form-password")))
109         }
110
111         @Test
112         fun `page redirects on POST with invalid password`() {
113                 val request = deepMock<FreenetRequest>().apply {
114                         whenever(httpRequest.getPartAsStringFailsafe(any(), anyInt())).thenReturn("invalid")
115                         whenever(method).thenReturn(POST)
116                 }
117                 val response = Response(null)
118                 val pageResponse = page.handleRequest(request, response)
119                 assertThat(pageResponse.statusCode, anyOf(equalTo(302), equalTo(307)))
120                 assertThat(pageResponse.headers, contains(hasHeader("location", "invalid-form-password")))
121         }
122
123         @Test
124         fun `template from annotation is loaded`() {
125                 verify(loaders).loadTemplate("template-path")
126         }
127
128         @TemplatePath("template-path")
129         @ToadletPath("/test/path")
130         private open class TestPage(templateRenderer: TemplateRenderer, loaders: Loaders) : FreenetTemplatePage(templateRenderer, loaders, "invalid-form-password")
131
132 }