Clean up imports
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / ajax / GetLinkedElementAjaxPageTest.kt
1 package net.pterodactylus.sone.web.ajax
2
3 import com.fasterxml.jackson.databind.JsonNode
4 import net.pterodactylus.sone.core.LinkedElement
5 import net.pterodactylus.sone.template.LinkedElementRenderFilter
6 import net.pterodactylus.sone.test.mock
7 import net.pterodactylus.sone.test.whenever
8 import net.pterodactylus.sone.utils.jsonArray
9 import net.pterodactylus.util.template.TemplateContext
10 import org.hamcrest.MatcherAssert.assertThat
11 import org.hamcrest.Matchers
12 import org.junit.Test
13 import org.mockito.ArgumentMatchers
14
15 /**
16  * Unit test for [GetLinkedElementAjaxPage].
17  */
18 class GetLinkedElementAjaxPageTest: JsonPageTest("getLinkedElement.ajax", requiresLogin = false, needsFormPassword = false) {
19
20         private val linkedElementRenderFilter = mock<LinkedElementRenderFilter>()
21         override var page: JsonPage = GetLinkedElementAjaxPage(webInterface, elementLoader, linkedElementRenderFilter)
22
23         @Test
24         fun `only loaded linked elements are returned`() {
25             addRequestParameter("elements", jsonArray("KSK@foo.png", "KSK@foo.jpg", "KSK@foo.html").toString())
26                 addLinkedElement("KSK@foo.png", true, false)
27                 addLinkedElement("KSK@foo.jpg", false, false)
28                 addLinkedElement("KSK@foo.html", false, true)
29                 whenever(linkedElementRenderFilter.format(ArgumentMatchers.any<TemplateContext>(), ArgumentMatchers.any(), ArgumentMatchers.any())).thenAnswer { invocation ->
30                         when (invocation.getArgument<LinkedElement>(1).link) {
31                                 "KSK@foo.jpg" -> "jpeg-image"
32                                 "KSK@foo.html" -> "html-page"
33                                 else -> null
34                         }
35                 }
36                 assertThat(json.get("linkedElements")!!.elements().asSequence().map { it.toMap() }.toList(), Matchers.containsInAnyOrder(
37                                 mapOf<String, String?>("link" to "KSK@foo.jpg", "html" to "jpeg-image"),
38                                 mapOf("link" to "KSK@foo.html", "html" to "html-page")
39                 ))
40         }
41
42         private fun JsonNode.toMap() = fields().asSequence().map { it.key!! to if (it.value.isNull) null else it.value.asText()!! }.toMap()
43
44 }