♻️ Add factory for page maker interactions
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / page / FreenetTemplatePageTest.kt
index b48ba1f..2474d08 100644 (file)
@@ -2,21 +2,20 @@ 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.Mockito.*
+import java.io.*
+import java.nio.charset.StandardCharsets.*
 
 class FreenetTemplatePageTest {
 
-       private val templateContextFactory = deepMock<TemplateContextFactory>()
        private val templateRenderer = deepMock<TemplateRenderer>()
        private val loaders = mock<Loaders>()
-       private val template = mock<Template>()
-       private val page = FreenetTemplatePage("/test/path", templateRenderer, loaders, template, "invalid-form-password")
+       private val page = TestPage(templateRenderer, loaders)
 
        @Test
        fun `path is exposed correctly`() {
@@ -70,7 +69,7 @@ class FreenetTemplatePageTest {
 
        @Test
        fun `isEnabled() returns false if full access only is true`() {
-               val page = object : FreenetTemplatePage("/test/path", templateRenderer, loaders, template, "invalid-form-password") {
+               val page = object : TestPage(templateRenderer, loaders) {
                        override val isFullAccessOnly = true
                }
                assertThat(page.isEnabled(mock()), equalTo(false))
@@ -78,7 +77,7 @@ class FreenetTemplatePageTest {
 
        @Test
        fun `page with redirect target throws redirect exception on handleRequest`() {
-               val page = object : FreenetTemplatePage("/test/path", templateRenderer, loaders, template, "invalid-form-password") {
+               val page = object : TestPage(templateRenderer, loaders) {
                        override fun getRedirectTarget(request: FreenetRequest) = "foo"
                }
                val request = mock<FreenetRequest>()
@@ -90,7 +89,7 @@ class FreenetTemplatePageTest {
 
        @Test
        fun `page with full access only returns unauthorized on handleRequest with non-full access request`() {
-               val page = object : FreenetTemplatePage("/test/path", templateRenderer, loaders, template, "invalid-form-password") {
+               val page = object : TestPage(templateRenderer, loaders) {
                        override val isFullAccessOnly = true
                }
                val request = deepMock<FreenetRequest>()
@@ -124,18 +123,27 @@ class FreenetTemplatePageTest {
        }
 
        @Test
+       @Dirty
+       fun `freenet template page creates page with correct title`() {
+               val page = object : TestPage(templateRenderer, loaders) {
+                       override fun getPageTitle(request: FreenetRequest) = "page title"
+               }
+               val request = deepMock<FreenetRequest>()
+               val pageMakerInteractionFactory = deepMock<PageMakerInteractionFactory>()
+               whenever(pageMakerInteractionFactory.createPageMaker(request.toadletContext, "page title").renderPage()).thenReturn("<page>")
+               setField(page, "pageMakerInteractionFactory", pageMakerInteractionFactory)
+               val response = page.handleRequest(request, Response(ByteArrayOutputStream()))
+               assertThat(response.statusCode, equalTo(200))
+               assertThat((response.content as ByteArrayOutputStream).toString(UTF_8.name()), equalTo("<page>"))
+       }
+
+       @Test
        fun `template from annotation is loaded`() {
-               val template = deepMock<Template>()
-               whenever(loaders.loadTemplate("template-path")).thenReturn(template)
-               TestPage(templateRenderer, loaders)
                verify(loaders).loadTemplate("template-path")
        }
 
        @TemplatePath("template-path")
-       private class TestPage(templateRenderer: TemplateRenderer, loaders: Loaders) : FreenetTemplatePage("/", templateRenderer, loaders, Template(), "") {
-               override fun getPath() = ""
-               override fun isPrefixPage() = false
-               override fun handleRequest(request: FreenetRequest, response: Response) = response
-       }
+       @ToadletPath("/test/path")
+       private open class TestPage(templateRenderer: TemplateRenderer, loaders: Loaders) : FreenetTemplatePage(templateRenderer, loaders, "invalid-form-password")
 
 }