🎨 Clean up imports
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / GetImagePageTest.kt
1 package net.pterodactylus.sone.web.pages
2
3 import net.pterodactylus.sone.data.*
4 import net.pterodactylus.sone.test.*
5 import net.pterodactylus.sone.web.*
6 import org.hamcrest.MatcherAssert.*
7 import org.hamcrest.Matchers.*
8 import org.junit.*
9 import java.net.*
10
11 /**
12  * Unit test for [GetImagePage].
13  */
14 class GetImagePageTest {
15
16         private val scaffolding = WebPageTest()
17         private val page = GetImagePage(scaffolding.webInterface)
18         private val freenetRequest = scaffolding.freenetRequest
19         private val response = scaffolding.response
20         private val responseContent = scaffolding.responseContent
21
22         @Test
23         fun `page returns correct path`() {
24                 assertThat(page.path, equalTo("getImage.html"))
25         }
26
27         @Test
28         fun `page is not a prefix page`() {
29                 assertThat(page.isPrefixPage, equalTo(false))
30         }
31
32         @Test
33         fun `page is not link-excepted`() {
34                 assertThat(page.isLinkExcepted(URI("")), equalTo(false))
35         }
36
37         @Test
38         fun `invalid image returns 404 response`() {
39                 page.handleRequest(freenetRequest, response)
40                 assertThat(response.statusCode, equalTo(404))
41                 assertThat(response.statusText, equalTo("Not found."))
42                 assertThat(response.contentType, equalTo("text/html; charset=utf-8"))
43                 assertThat(responseContent.toByteArray(), equalTo(ByteArray(0)))
44         }
45
46         @Test
47         fun `valid image returns response with correct data`() {
48                 val image = TemporaryImage("temp-id").apply {
49                         mimeType = "image/test"
50                         imageData = ByteArray(5, Int::toByte)
51                 }
52                 scaffolding.addHttpRequestParameter("image", "temp-id")
53                 scaffolding.addTemporaryImage("temp-id", image)
54                 page.handleRequest(freenetRequest, response)
55                 assertThat(response.statusCode, equalTo(200))
56                 assertThat(response.contentType, equalTo("image/test"))
57                 assertThat(responseContent.toByteArray(), equalTo(ByteArray(5, Int::toByte)))
58                 println(response.headers.map { it.name to it.iterator().asSequence().toList() })
59                 assertThat(response.headers.map { it.name to it.iterator().asSequence().toList() }, contains(
60                                 "Content-Disposition" to listOf("attachment; filename=temp-id.test")
61                 ))
62         }
63
64         @Test
65         fun `page can be created by dependency injection`() {
66             assertThat(baseInjector.getInstance<GetImagePage>(), notNullValue())
67         }
68
69 }