✨ Annotate KnownSonesPage with MenuName
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / ReloadingPageTest.kt
1 package net.pterodactylus.sone.web.pages
2
3 import net.pterodactylus.sone.test.getInstance
4 import net.pterodactylus.sone.web.baseInjector
5 import net.pterodactylus.sone.web.page.FreenetRequest
6 import org.hamcrest.MatcherAssert.assertThat
7 import org.hamcrest.Matchers.equalTo
8 import org.hamcrest.Matchers.notNullValue
9 import org.junit.Rule
10 import org.junit.Test
11 import org.junit.rules.TemporaryFolder
12 import java.nio.file.Files
13 import java.nio.file.Paths
14 import kotlin.text.Charsets.UTF_8
15
16 /**
17  * Unit test for [ReloadingPage].
18  */
19 class ReloadingPageTest {
20
21         @Rule @JvmField val tempFolder = TemporaryFolder()
22         private val folder by lazy { tempFolder.newFolder()!! }
23         private val page by lazy { ReloadingPage<FreenetRequest>("/prefix/", folder.path, "text/plain") }
24         private val webPageTest = WebPageTest()
25         private val freenetRequest = webPageTest.freenetRequest
26         private val responseBytes = webPageTest.responseContent
27         private val response = webPageTest.response
28
29         @Test
30         fun `page returns correct path prefix`() {
31                 assertThat(page.path, equalTo("/prefix/"))
32         }
33
34         @Test
35         fun `page returns that it’s a prefix page`() {
36                 assertThat(page.isPrefixPage, equalTo(true))
37         }
38
39         @Test
40         fun `requesting invalid file results in 404`() {
41                 webPageTest.request("/prefix/path/file.txt")
42                 page.handleRequest(freenetRequest, response)
43                 assertThat(response.statusCode, equalTo(404))
44                 assertThat(response.statusText, equalTo("Not found"))
45         }
46
47         @Test
48         fun `requesting valid file results in 200 and delivers file`() {
49                 Files.write(Paths.get(folder.path, "file.txt"), listOf("Hello", "World"), UTF_8)
50                 webPageTest.request("/prefix/path/file.txt")
51                 page.handleRequest(freenetRequest, response)
52                 assertThat(response.statusCode, equalTo(200))
53                 assertThat(response.statusText, equalTo("OK"))
54                 assertThat(response.contentType, equalTo("text/plain"))
55                 assertThat(responseBytes.toByteArray(), equalTo("Hello\nWorld\n".toByteArray()))
56         }
57
58         @Test
59         fun `page can be created by dependency injection`() {
60             assertThat(baseInjector.getInstance<ReloadingPage<*>>(), notNullValue())
61         }
62
63 }