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