1 package net.pterodactylus.sone.web.pages
3 import net.pterodactylus.sone.data.Album
4 import net.pterodactylus.sone.data.Image
5 import net.pterodactylus.sone.data.Image.Modifier
6 import net.pterodactylus.sone.data.Image.Modifier.ImageTitleMustNotBeEmpty
7 import net.pterodactylus.sone.data.Sone
8 import net.pterodactylus.sone.test.doThrow
9 import net.pterodactylus.sone.test.getInstance
10 import net.pterodactylus.sone.test.mock
11 import net.pterodactylus.sone.test.mockBuilder
12 import net.pterodactylus.sone.test.whenever
13 import net.pterodactylus.sone.web.baseInjector
14 import net.pterodactylus.util.web.Method.POST
15 import org.hamcrest.MatcherAssert.assertThat
16 import org.hamcrest.Matchers.equalTo
17 import org.hamcrest.Matchers.notNullValue
18 import org.junit.Before
20 import org.mockito.Mockito.never
21 import org.mockito.Mockito.verify
24 * Unit test for [EditImagePage].
26 class EditImagePageTest: WebPageTest(::EditImagePage) {
28 private val image = mock<Image>()
29 private val modifier = mockBuilder<Modifier>()
30 private val sone = mock<Sone>()
31 private val album = mock<Album>()
35 whenever(sone.isLocal).thenReturn(true)
36 whenever(album.id).thenReturn("album-id")
37 whenever(modifier.update()).thenReturn(image)
38 whenever(image.sone).thenReturn(sone)
39 whenever(image.album).thenReturn(album)
40 whenever(image.modify()).thenReturn(modifier)
44 fun `page returns correct path`() {
45 assertThat(page.path, equalTo("editImage.html"))
49 fun `page requires login`() {
50 assertThat(page.requiresLogin(), equalTo(true))
54 fun `page returns correct title`() {
55 whenever(l10n.getString("Page.EditImage.Title")).thenReturn("edit image page title")
56 assertThat(page.getPageTitle(soneRequest), equalTo("edit image page title"))
60 fun `get request does not redirect`() {
61 page.processTemplate(freenetRequest, templateContext)
65 fun `post request with invalid image redirects to invalid page`() {
67 verifyRedirect("invalid.html")
71 fun `post request with valid image from non-local sone redirects to no permission page`() {
73 whenever(sone.isLocal).thenReturn(false)
74 addImage("image-id", image)
75 addHttpRequestPart("image", "image-id")
76 verifyRedirect("noPermission.html")
80 fun `post request with valid image and move left requested moves image left and redirects to return page`() {
82 addImage("image-id", image)
83 addHttpRequestPart("image", "image-id")
84 addHttpRequestPart("returnPage", "return.html")
85 addHttpRequestPart("moveLeft", "true")
86 verifyRedirect("return.html") {
87 verify(album).moveImageUp(image)
88 verify(core).touchConfiguration()
93 fun `post request with valid image and move right requested moves image right and redirects to return page`() {
95 addImage("image-id", image)
96 addHttpRequestPart("image", "image-id")
97 addHttpRequestPart("returnPage", "return.html")
98 addHttpRequestPart("moveRight", "true")
99 verifyRedirect("return.html") {
100 verify(album).moveImageDown(image)
101 verify(core).touchConfiguration()
106 fun `post request with valid image but only whitespace in the title redirects to empty image title page`() {
108 addImage("image-id", image)
109 addHttpRequestPart("image", "image-id")
110 addHttpRequestPart("returnPage", "return.html")
111 addHttpRequestPart("title", " ")
112 whenever(modifier.update()).doThrow<ImageTitleMustNotBeEmpty>()
113 verifyRedirect("emptyImageTitle.html") {
114 verify(core, never()).touchConfiguration()
119 fun `post request with valid image title and description modifies image and redirects to reutrn page`() {
121 addImage("image-id", image)
122 addHttpRequestPart("image", "image-id")
123 addHttpRequestPart("returnPage", "return.html")
124 addHttpRequestPart("title", "Title")
125 addHttpRequestPart("description", "Description")
126 verifyRedirect("return.html") {
127 verify(modifier).setTitle("Title")
128 verify(modifier).setDescription("Description")
129 verify(modifier).update()
130 verify(core).touchConfiguration()
135 fun `post request with image title and description modifies image with filtered description and redirects to return page`() {
137 addImage("image-id", image)
138 addHttpRequestPart("image", "image-id")
139 addHttpRequestPart("returnPage", "return.html")
140 addHttpRequestPart("title", "Title")
141 addHttpRequestHeader("Host", "www.te.st")
142 addHttpRequestPart("description", "Get http://www.te.st/KSK@GPL.txt")
143 verifyRedirect("return.html") {
144 verify(modifier).setTitle("Title")
145 verify(modifier).setDescription("Get KSK@GPL.txt")
146 verify(modifier).update()
147 verify(core).touchConfiguration()
152 fun `page can be created by dependency injection`() {
153 assertThat(baseInjector.getInstance<EditImagePage>(), notNullValue())