1 package net.pterodactylus.sone.web.pages
3 import freenet.support.api.HTTPRequest
4 import net.pterodactylus.sone.test.mock
5 import net.pterodactylus.sone.test.whenever
6 import net.pterodactylus.sone.web.page.FreenetRequest
7 import net.pterodactylus.util.web.Response
8 import org.hamcrest.MatcherAssert.assertThat
9 import org.hamcrest.Matchers.equalTo
12 import org.junit.rules.TemporaryFolder
13 import java.io.ByteArrayOutputStream
15 import java.nio.file.Files
16 import java.nio.file.Paths
17 import kotlin.text.Charsets.UTF_8
20 * Unit test for [ReloadingPage].
22 class ReloadingPageTest {
24 @Rule @JvmField val tempFolder = TemporaryFolder()
25 private val folder by lazy { tempFolder.newFolder()!! }
26 private val page by lazy { ReloadingPage<FreenetRequest>("/prefix/", folder.path, "text/plain") }
27 private val freenetRequest = mock<FreenetRequest>()
28 private val httpRequest = mock<HTTPRequest>()
29 private val responseBytes = ByteArrayOutputStream()
30 private val response = Response(responseBytes)
33 fun `page returns correct path prefix`() {
34 assertThat(page.path, equalTo("/prefix/"))
38 fun `page returns that it’s a prefix page`() {
39 assertThat(page.isPrefixPage, equalTo(true))
42 private fun request(uri: String) {
43 whenever(httpRequest.path).thenReturn(uri)
44 whenever(freenetRequest.uri).thenReturn(URI(uri))
48 fun `requesting invalid file results in 404`() {
49 request("/prefix/path/file.txt")
50 page.handleRequest(freenetRequest, response)
51 assertThat(response.statusCode, equalTo(404))
52 assertThat(response.statusText, equalTo("Not found"))
56 fun `requesting valid file results in 200 and delivers file`() {
57 Files.write(Paths.get(folder.path, "file.txt"), listOf("Hello", "World"), UTF_8)
58 request("/prefix/path/file.txt")
59 page.handleRequest(freenetRequest, response)
60 assertThat(response.statusCode, equalTo(200))
61 assertThat(response.statusText, equalTo("OK"))
62 assertThat(response.contentType, equalTo("text/plain"))
63 assertThat(responseBytes.toByteArray(), equalTo("Hello\nWorld\n".toByteArray()))