✨ Use @TemplatePath in FreenetTemplatePage
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Fri, 17 May 2019 18:19:44 +0000 (20:19 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Fri, 17 May 2019 18:19:44 +0000 (20:19 +0200)
src/main/kotlin/net/pterodactylus/sone/web/page/FreenetTemplatePage.kt
src/test/kotlin/net/pterodactylus/sone/web/page/FreenetTemplatePageTest.kt

index d93e7d1..792c0ba 100644 (file)
@@ -34,8 +34,8 @@ import java.util.logging.Logger.*
 open class FreenetTemplatePage(
                private val path: String,
                private val templateContextFactory: TemplateContextFactory,
-               private val loaders: Loaders,
-               private val template: Template,
+               loaders: Loaders,
+               template: Template,
                private val invalidFormPasswordRedirectTarget: String
 ) : FreenetPage, LinkEnabledCallback {
 
@@ -57,6 +57,8 @@ open class FreenetTemplatePage(
 
        override fun isEnabled(toadletContext: ToadletContext) = !isFullAccessOnly
 
+       private val template = templatePath?.let(loaders::loadTemplate) ?: template
+
        override fun handleRequest(request: FreenetRequest, response: Response): Response {
                getRedirectTarget(request)?.let { redirectTarget -> return RedirectResponse(redirectTarget) }
 
index d992b30..def7410 100644 (file)
@@ -8,11 +8,11 @@ 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 templateContextFactory = mock<TemplateContextFactory>()
+       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")
@@ -122,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
+       }
+
 }