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, "invalid-form-password")
+ private val page = TestPage(templateRenderer, loaders)
@Test
fun `path is exposed correctly`() {
@Test
fun `isEnabled() returns false if full access only is true`() {
- val page = object : FreenetTemplatePage("/test/path", templateRenderer, loaders, "invalid-form-password") {
+ val page = object : TestPage(templateRenderer, loaders) {
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", templateRenderer, loaders, "invalid-form-password") {
+ val page = object : TestPage(templateRenderer, loaders) {
override fun getRedirectTarget(request: FreenetRequest) = "foo"
}
val request = mock<FreenetRequest>()
@Test
fun `page with full access only returns unauthorized on handleRequest with non-full access request`() {
- val page = object : FreenetTemplatePage("/test/path", templateRenderer, loaders, "invalid-form-password") {
+ val page = object : TestPage(templateRenderer, loaders) {
override val isFullAccessOnly = true
}
val request = deepMock<FreenetRequest>()
}
@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, "") {
- 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")
}