1 package net.pterodactylus.sone.web.ajax
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
16 import org.mockito.ArgumentMatchers.any
17 import org.mockito.ArgumentMatchers.eq
18 import org.mockito.Mockito.verify
21 * Unit test for [EditImageAjaxPage].
23 class EditImageAjaxPageTest : JsonPageTest("editImage.ajax") {
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)
31 fun `request without image results in invalid-image-id`() {
32 assertThat(json.isSuccess, equalTo(false))
33 assertThat(json.error, equalTo("invalid-image-id"))
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"))
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)
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()
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)
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()
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)
89 addRequestParameter("image", "image-id")
90 assertThat(json.isSuccess, equalTo(false))
91 assertThat(json.error, equalTo("invalid-image-title"))
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()
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)
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))