1 package net.pterodactylus.sone.web.page
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.*
9 import org.mockito.ArgumentMatchers.*
11 class FreenetTemplatePageTest {
13 private val page = FreenetTemplatePage("/test/path", null, null, "invalid-form-password")
16 fun `path is exposed correctly`() {
17 assertThat(page.path, equalTo("/test/path"))
21 fun `getPageTitle() default implementation returns null`() {
22 assertThat(page.getPageTitle(mock()), nullValue())
26 fun `isPrefixPage() default implementation returns false`() {
27 assertThat(page.isPrefixPage, equalTo(false))
31 fun `getStylesheets() default implementation returns empty collection`() {
32 assertThat(page.styleSheets, empty())
36 fun `getShortcutIcon() default implementation returns null`() {
37 assertThat(page.shortcutIcon, nullValue())
41 fun `getRedirectTarget() default implementation returns null`() {
42 assertThat(page.getRedirectTarget(mock()), nullValue())
46 fun `getAdditionalLinkNodes() default implementation returns empty collection`() {
47 assertThat(page.getAdditionalLinkNodes(mock()), empty())
51 fun `isFullAccessOnly() default implementation returns false`() {
52 assertThat(page.isFullAccessOnly, equalTo(false))
56 fun `isLinkExcepted() default implementation returns false`() {
57 assertThat(page.isLinkExcepted(mock()), equalTo(false))
61 fun `isEnabled() returns true if full access only is false`() {
62 assertThat(page.isEnabled(mock()), equalTo(true))
66 fun `isEnabled() returns false if full access only is true`() {
67 val page = object : FreenetTemplatePage("/test/path", null, null, null) {
68 override fun isFullAccessOnly() = true
70 assertThat(page.isEnabled(mock()), equalTo(false))
74 fun `page with redirect target throws redirect exception on handleRequest`() {
75 val page = object : FreenetTemplatePage("/test/path", null, null, null) {
76 override fun getRedirectTarget(request: FreenetRequest?) = "foo"
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")))
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) {
88 override fun isFullAccessOnly() = true
90 val request = deepMock<FreenetRequest>()
91 val response = Response(null)
92 val pageResponse = page.handleRequest(request, response)
93 assertThat(pageResponse.statusCode, equalTo(401))
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)
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")))
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)
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")))