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 assertThatJsonFailed("invalid-image-id")
36 fun `request with non-local image results in not-authorized`() {
37 val image = mock<Image>()
38 val sone = mock<Sone>()
39 whenever(image.sone).thenReturn(sone)
40 addImage(image, "image-id")
41 addRequestParameter("image", "image-id")
42 assertThatJsonFailed("not-authorized")
46 fun `moving an image to the left returns the correct values`() {
47 val image = mock<Image>().apply { whenever(id).thenReturn("image-id") }
48 val sone = mock<Sone>().apply { whenever(isLocal).thenReturn(true) }
49 whenever(image.sone).thenReturn(sone)
50 val swapped = mock<Image>().apply { whenever(id).thenReturn("swapped") }
51 val album = mock<Album>()
52 whenever(album.moveImageUp(image)).thenReturn(swapped)
53 whenever(image.album).thenReturn(album)
55 addRequestParameter("image", "image-id")
56 addRequestParameter("moveLeft", "true")
57 assertThatJsonIsSuccessful()
58 assertThat(json["sourceImageId"]?.asText(), equalTo("image-id"))
59 assertThat(json["destinationImageId"]?.asText(), equalTo("swapped"))
60 verify(core).touchConfiguration()
64 fun `moving an image to the right returns the correct values`() {
65 val image = mock<Image>().apply { whenever(id).thenReturn("image-id") }
66 val sone = mock<Sone>().apply { whenever(isLocal).thenReturn(true) }
67 whenever(image.sone).thenReturn(sone)
68 val swapped = mock<Image>().apply { whenever(id).thenReturn("swapped") }
69 val album = mock<Album>()
70 whenever(album.moveImageDown(image)).thenReturn(swapped)
71 whenever(image.album).thenReturn(album)
73 addRequestParameter("image", "image-id")
74 addRequestParameter("moveRight", "true")
75 assertThatJsonIsSuccessful()
76 assertThat(json["sourceImageId"]?.asText(), equalTo("image-id"))
77 assertThat(json["destinationImageId"]?.asText(), equalTo("swapped"))
78 verify(core).touchConfiguration()
82 fun `request with empty title results in invalid-image-title`() {
83 val image = mock<Image>().apply { whenever(id).thenReturn("image-id") }
84 val sone = mock<Sone>().apply { whenever(isLocal).thenReturn(true) }
85 whenever(image.sone).thenReturn(sone)
87 addRequestParameter("image", "image-id")
88 assertThatJsonFailed("invalid-image-title")
92 fun `request with title and description returns correct values`() {
93 val sone = mock<Sone>().apply { whenever(isLocal).thenReturn(true) }
94 val image = ImageImpl("image-id").modify().setSone(sone).update()
96 val shortened = Object()
97 val rendered = "rendered description"
98 whenever(parserFilter.format(any(), eq("some KSK@foo link"), any())).thenReturn(parsed)
99 whenever(shortenFilter.format(any(), eq(parsed), any())).thenReturn(shortened)
100 whenever(renderFilter.format(any(), eq(shortened), any())).thenReturn(rendered)
102 addRequestParameter("image", "image-id")
103 addRequestParameter("title", "some title")
104 addRequestParameter("description", "some http://127.0.0.1:8888/KSK@foo link")
105 addRequestHeader("Host", "127.0.0.1:8888")
106 assertThatJsonIsSuccessful()
107 assertThat(json["title"]?.asText(), equalTo("some title"))
108 assertThat(json["description"]?.asText(), equalTo("some KSK@foo link"))
109 assertThat(json["parsedDescription"]?.asText(), equalTo("rendered description"))
110 verify(core).touchConfiguration()
111 val parameterCaptor = argumentCaptor<MutableMap<String, Any?>>()
112 verify(parserFilter).format(any(), any(), parameterCaptor.capture())
113 assertThat(parameterCaptor.value["sone"], equalTo<Any>(sone))