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