126fa83c364d3811f93be8db90927115a0d92882
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / ajax / EditImageAjaxPageTest.kt
1 package net.pterodactylus.sone.web.ajax
2
3 import net.pterodactylus.sone.data.Album
4 import net.pterodactylus.sone.data.Image
5 import net.pterodactylus.sone.data.Sone
6 import net.pterodactylus.sone.data.impl.ImageImpl
7 import net.pterodactylus.sone.template.ParserFilter
8 import net.pterodactylus.sone.template.RenderFilter
9 import net.pterodactylus.sone.template.ShortenFilter
10 import net.pterodactylus.sone.test.argumentCaptor
11 import net.pterodactylus.sone.test.mock
12 import net.pterodactylus.sone.test.whenever
13 import org.hamcrest.MatcherAssert.assertThat
14 import org.hamcrest.Matchers.equalTo
15 import org.junit.Test
16 import org.mockito.ArgumentMatchers.any
17 import org.mockito.ArgumentMatchers.eq
18 import org.mockito.Mockito.verify
19
20 /**
21  * Unit test for [EditImageAjaxPage].
22  */
23 class EditImageAjaxPageTest : JsonPageTest("editImage.ajax") {
24
25         private val parserFilter = mock<ParserFilter>()
26         private val shortenFilter = mock<ShortenFilter>()
27         private val renderFilter = mock<RenderFilter>()
28         override val page: JsonPage get() = EditImageAjaxPage(webInterface, parserFilter, shortenFilter, renderFilter)
29
30         @Test
31         fun `request without image results in invalid-image-id`() {
32                 assertThat(json.isSuccess, equalTo(false))
33                 assertThat(json.error, equalTo("invalid-image-id"))
34         }
35
36         @Test
37         fun `request with non-local image results in not-authorized`() {
38                 val image = mock<Image>()
39                 val sone = mock<Sone>()
40                 whenever(image.sone).thenReturn(sone)
41                 addImage(image, "image-id")
42                 addRequestParameter("image", "image-id")
43                 assertThat(json.isSuccess, equalTo(false))
44                 assertThat(json.error, equalTo("not-authorized"))
45         }
46
47         @Test
48         fun `moving an image to the left returns the correct values`() {
49                 val image = mock<Image>().apply { whenever(id).thenReturn("image-id") }
50                 val sone = mock<Sone>().apply { whenever(isLocal).thenReturn(true) }
51                 whenever(image.sone).thenReturn(sone)
52                 val swapped = mock<Image>().apply { whenever(id).thenReturn("swapped") }
53                 val album = mock<Album>()
54                 whenever(album.moveImageUp(image)).thenReturn(swapped)
55                 whenever(image.album).thenReturn(album)
56                 addImage(image)
57                 addRequestParameter("image", "image-id")
58                 addRequestParameter("moveLeft", "true")
59                 assertThat(json.isSuccess, equalTo(true))
60                 assertThat(json["sourceImageId"]?.asText(), equalTo("image-id"))
61                 assertThat(json["destinationImageId"]?.asText(), equalTo("swapped"))
62                 verify(core).touchConfiguration()
63         }
64
65         @Test
66         fun `moving an image to the right returns the correct values`() {
67                 val image = mock<Image>().apply { whenever(id).thenReturn("image-id") }
68                 val sone = mock<Sone>().apply { whenever(isLocal).thenReturn(true) }
69                 whenever(image.sone).thenReturn(sone)
70                 val swapped = mock<Image>().apply { whenever(id).thenReturn("swapped") }
71                 val album = mock<Album>()
72                 whenever(album.moveImageDown(image)).thenReturn(swapped)
73                 whenever(image.album).thenReturn(album)
74                 addImage(image)
75                 addRequestParameter("image", "image-id")
76                 addRequestParameter("moveRight", "true")
77                 assertThat(json.isSuccess, equalTo(true))
78                 assertThat(json["sourceImageId"]?.asText(), equalTo("image-id"))
79                 assertThat(json["destinationImageId"]?.asText(), equalTo("swapped"))
80                 verify(core).touchConfiguration()
81         }
82
83         @Test
84         fun `request with empty title results in invalid-image-title`() {
85                 val image = mock<Image>().apply { whenever(id).thenReturn("image-id") }
86                 val sone = mock<Sone>().apply { whenever(isLocal).thenReturn(true) }
87                 whenever(image.sone).thenReturn(sone)
88                 addImage(image)
89                 addRequestParameter("image", "image-id")
90                 assertThat(json.isSuccess, equalTo(false))
91                 assertThat(json.error, equalTo("invalid-image-title"))
92         }
93
94         @Test
95         fun `request with title and description returns correct values`() {
96                 val sone = mock<Sone>().apply { whenever(isLocal).thenReturn(true) }
97                 val image = ImageImpl("image-id").modify().setSone(sone).update()
98                 val parsed = Object()
99                 val shortened = Object()
100                 val rendered = "rendered description"
101                 whenever(parserFilter.format(any(), eq("some KSK@foo link"), any())).thenReturn(parsed)
102                 whenever(shortenFilter.format(any(), eq(parsed), any())).thenReturn(shortened)
103                 whenever(renderFilter.format(any(), eq(shortened), any())).thenReturn(rendered)
104                 addImage(image)
105                 addRequestParameter("image", "image-id")
106                 addRequestParameter("title", "some title")
107                 addRequestParameter("description", "some http://127.0.0.1:8888/KSK@foo link")
108                 addRequestHeader("Host", "127.0.0.1:8888")
109                 assertThat(json.isSuccess, equalTo(true))
110                 assertThat(json["title"]?.asText(), equalTo("some title"))
111                 assertThat(json["description"]?.asText(), equalTo("some KSK@foo link"))
112                 assertThat(json["parsedDescription"]?.asText(), equalTo("rendered description"))
113                 verify(core).touchConfiguration()
114                 val parameterCaptor = argumentCaptor<MutableMap<String, Any?>>()
115                 verify(parserFilter).format(any(), any(), parameterCaptor.capture())
116                 assertThat(parameterCaptor.value["sone"], equalTo<Any>(sone))
117         }
118
119 }