✨ Use @TemplatePath in FreenetTemplatePage
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / page / FreenetTemplatePageTest.kt
index 35d4afd..def7410 100644 (file)
@@ -1,16 +1,21 @@
 package net.pterodactylus.sone.web.page
 
+import net.pterodactylus.sone.main.*
 import net.pterodactylus.sone.test.*
+import net.pterodactylus.util.template.*
 import net.pterodactylus.util.web.*
 import net.pterodactylus.util.web.Method.*
 import org.hamcrest.MatcherAssert.*
 import org.hamcrest.Matchers.*
 import org.junit.*
-import org.mockito.ArgumentMatchers.*
+import org.mockito.Mockito.*
 
 class FreenetTemplatePageTest {
 
-       private val page = FreenetTemplatePage("/test/path", null, null, null, "invalid-form-password")
+       private val templateContextFactory = deepMock<TemplateContextFactory>()
+       private val loaders = mock<Loaders>()
+       private val template = mock<Template>()
+       private val page = FreenetTemplatePage("/test/path", templateContextFactory, loaders, template, "invalid-form-password")
 
        @Test
        fun `path is exposed correctly`() {
@@ -18,8 +23,8 @@ class FreenetTemplatePageTest {
        }
 
        @Test
-       fun `getPageTitle() default implementation returns null`() {
-               assertThat(page.getPageTitle(mock()), nullValue())
+       fun `getPageTitle() default implementation returns empty string`() {
+               assertThat(page.getPageTitle(mock()), equalTo(""))
        }
 
        @Test
@@ -64,16 +69,16 @@ class FreenetTemplatePageTest {
 
        @Test
        fun `isEnabled() returns false if full access only is true`() {
-               val page = object : FreenetTemplatePage("/test/path", null, null, null, null) {
-                       override fun isFullAccessOnly() = true
+               val page = object : FreenetTemplatePage("/test/path", templateContextFactory, loaders, template, "invalid-form-password") {
+                       override val isFullAccessOnly = true
                }
                assertThat(page.isEnabled(mock()), equalTo(false))
        }
 
        @Test
        fun `page with redirect target throws redirect exception on handleRequest`() {
-               val page = object : FreenetTemplatePage("/test/path", null, null, null, null) {
-                       override fun getRedirectTarget(request: FreenetRequest?) = "foo"
+               val page = object : FreenetTemplatePage("/test/path", templateContextFactory, loaders, template, "invalid-form-password") {
+                       override fun getRedirectTarget(request: FreenetRequest) = "foo"
                }
                val request = mock<FreenetRequest>()
                val response = mock<Response>()
@@ -84,8 +89,8 @@ class FreenetTemplatePageTest {
 
        @Test
        fun `page with full access only returns unauthorized on handleRequest with non-full access request`() {
-               val page = object : FreenetTemplatePage("/test/path", null, null, null, null) {
-                       override fun isFullAccessOnly() = true
+               val page = object : FreenetTemplatePage("/test/path", templateContextFactory, loaders, template, "invalid-form-password") {
+                       override val isFullAccessOnly = true
                }
                val request = deepMock<FreenetRequest>()
                val response = Response(null)
@@ -117,4 +122,19 @@ class FreenetTemplatePageTest {
                assertThat(pageResponse.headers, contains(hasHeader("location", "invalid-form-password")))
        }
 
+       @Test
+       fun `template from annotation is loaded`() {
+               val template = deepMock<Template>()
+               whenever(loaders.loadTemplate("template-path")).thenReturn(template)
+               TestPage(templateContextFactory, loaders)
+               verify(loaders).loadTemplate("template-path")
+       }
+
+       @TemplatePath("template-path")
+       private class TestPage(templateContextFactory: TemplateContextFactory, loaders: Loaders) : FreenetTemplatePage("/", templateContextFactory, loaders, Template(), "") {
+               override fun getPath() = ""
+               override fun isPrefixPage() = false
+               override fun handleRequest(request: FreenetRequest, response: Response) = response
+       }
+
 }