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