🔀 Merge branch 'release/v82'
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / EditImagePageTest.kt
1 package net.pterodactylus.sone.web.pages
2
3 import net.pterodactylus.sone.data.*
4 import net.pterodactylus.sone.data.impl.*
5 import net.pterodactylus.sone.test.*
6 import net.pterodactylus.sone.web.*
7 import net.pterodactylus.util.web.Method.*
8 import org.hamcrest.MatcherAssert.*
9 import org.hamcrest.Matchers.*
10 import org.junit.*
11 import org.mockito.Mockito.*
12
13 /**
14  * Unit test for [EditImagePage].
15  */
16 class EditImagePageTest : WebPageTest(::EditImagePage) {
17
18         private val sone = mock<Sone>()
19         private val image = ImageImpl("image-id").modify().setSone(sone).update()!!
20         private val album = AlbumImpl(sone, "album-id").also {
21                 it.addImage(ImageImpl("1").modify().setSone(sone).update())
22                 it.addImage(image)
23                 it.addImage(ImageImpl("2").modify().setSone(sone).update())
24         }
25
26         @Before
27         fun setupImage() {
28                 whenever(sone.isLocal).thenReturn(true)
29         }
30
31         @Test
32         fun `page returns correct path`() {
33                 assertThat(page.path, equalTo("editImage.html"))
34         }
35
36         @Test
37         fun `page requires login`() {
38                 assertThat(page.requiresLogin(), equalTo(true))
39         }
40
41         @Test
42         fun `page returns correct title`() {
43                 addTranslation("Page.EditImage.Title", "edit image page title")
44                 assertThat(page.getPageTitle(soneRequest), equalTo("edit image page title"))
45         }
46
47         @Test
48         fun `get request does not redirect`() {
49                 page.processTemplate(freenetRequest, templateContext)
50         }
51
52         @Test
53         fun `post request with invalid image redirects to invalid page`() {
54                 setMethod(POST)
55                 verifyRedirect("invalid.html")
56         }
57
58         @Test
59         fun `post request with valid image from non-local sone redirects to no permission page`() {
60                 setMethod(POST)
61                 whenever(sone.isLocal).thenReturn(false)
62                 addImage("image-id", image)
63                 addHttpRequestPart("image", "image-id")
64                 verifyRedirect("noPermission.html")
65         }
66
67         @Test
68         fun `post request with valid image and move left requested moves image left and redirects to return page`() {
69                 setMethod(POST)
70                 addImage("image-id", image)
71                 addHttpRequestPart("image", "image-id")
72                 addHttpRequestPart("returnPage", "return.html")
73                 addHttpRequestPart("moveLeft", "true")
74                 verifyRedirect("return.html") {
75                         assertThat(album.images.indexOf(image), equalTo(0))
76                         verify(core).touchConfiguration()
77                 }
78         }
79
80         @Test
81         fun `post request with valid image and move right requested moves image right and redirects to return page`() {
82                 setMethod(POST)
83                 addImage("image-id", image)
84                 addHttpRequestPart("image", "image-id")
85                 addHttpRequestPart("returnPage", "return.html")
86                 addHttpRequestPart("moveRight", "true")
87                 verifyRedirect("return.html") {
88                         assertThat(album.images.indexOf(image), equalTo(2))
89                         verify(core).touchConfiguration()
90                 }
91         }
92
93         @Test
94         fun `post request with valid image but only whitespace in the title redirects to empty image title page`() {
95                 setMethod(POST)
96                 addImage("image-id", image)
97                 addHttpRequestPart("image", "image-id")
98                 addHttpRequestPart("returnPage", "return.html")
99                 addHttpRequestPart("title", "   ")
100                 verifyRedirect("emptyImageTitle.html") {
101                         verify(core, never()).touchConfiguration()
102                 }
103         }
104
105         @Test
106         fun `post request with valid image title and description modifies image and redirects to reutrn page`() {
107                 setMethod(POST)
108                 addImage("image-id", image)
109                 addHttpRequestPart("image", "image-id")
110                 addHttpRequestPart("returnPage", "return.html")
111                 addHttpRequestPart("title", "Title")
112                 addHttpRequestPart("description", "Description")
113                 verifyRedirect("return.html") {
114                         assertThat(image.title, equalTo("Title"))
115                         assertThat(image.description, equalTo("Description"))
116                         verify(core).touchConfiguration()
117                 }
118         }
119
120         @Test
121         fun `post request with image title and description modifies image with filtered description and redirects to return page`() {
122                 setMethod(POST)
123                 addImage("image-id", image)
124                 addHttpRequestPart("image", "image-id")
125                 addHttpRequestPart("returnPage", "return.html")
126                 addHttpRequestPart("title", "Title")
127                 addHttpRequestHeader("Host", "www.te.st")
128                 addHttpRequestPart("description", "Get http://www.te.st/KSK@GPL.txt")
129                 verifyRedirect("return.html") {
130                         assertThat(image.title, equalTo("Title"))
131                         assertThat(image.description, equalTo("Get KSK@GPL.txt"))
132                         verify(core).touchConfiguration()
133                 }
134         }
135
136         @Test
137         fun `page can be created by dependency injection`() {
138                 assertThat(baseInjector.getInstance<EditImagePage>(), notNullValue())
139         }
140
141 }