1 package net.pterodactylus.sone.web.ajax
3 import com.fasterxml.jackson.databind.JsonNode
4 import net.pterodactylus.sone.core.ElementLoader
5 import net.pterodactylus.sone.core.LinkedElement
6 import net.pterodactylus.sone.template.LinkedElementRenderFilter
7 import net.pterodactylus.sone.test.getInstance
8 import net.pterodactylus.sone.test.isProvidedByMock
9 import net.pterodactylus.sone.test.mock
10 import net.pterodactylus.sone.test.whenever
11 import net.pterodactylus.sone.utils.jsonArray
12 import net.pterodactylus.sone.web.baseInjector
13 import net.pterodactylus.util.template.TemplateContext
14 import org.hamcrest.MatcherAssert.assertThat
15 import org.hamcrest.Matchers
16 import org.hamcrest.Matchers.notNullValue
18 import org.mockito.ArgumentMatchers
21 * Unit test for [GetLinkedElementAjaxPage].
23 class GetLinkedElementAjaxPageTest: JsonPageTest("getLinkedElement.ajax", requiresLogin = false, needsFormPassword = false) {
25 private val linkedElementRenderFilter = mock<LinkedElementRenderFilter>()
26 override var page: JsonPage = GetLinkedElementAjaxPage(webInterface, elementLoader, linkedElementRenderFilter)
29 fun `only loaded linked elements are returned`() {
30 addRequestParameter("elements", jsonArray("KSK@foo.png", "KSK@foo.jpg", "KSK@foo.html").toString())
31 addLinkedElement("KSK@foo.png", true, false)
32 addLinkedElement("KSK@foo.jpg", false, false)
33 addLinkedElement("KSK@foo.html", false, true)
34 whenever(linkedElementRenderFilter.format(ArgumentMatchers.any<TemplateContext>(), ArgumentMatchers.any(), ArgumentMatchers.any())).thenAnswer { invocation ->
35 when (invocation.getArgument<LinkedElement>(1).link) {
36 "KSK@foo.jpg" -> "jpeg-image"
37 "KSK@foo.html" -> "html-page"
41 assertThat(json.get("linkedElements")!!.elements().asSequence().map { it.toMap() }.toList(), Matchers.containsInAnyOrder(
42 mapOf<String, String?>("link" to "KSK@foo.jpg", "html" to "jpeg-image"),
43 mapOf("link" to "KSK@foo.html", "html" to "html-page")
48 fun `page can be created by dependency injection`() {
49 assertThat(baseInjector.createChildInjector(
50 ElementLoader::class.isProvidedByMock(),
51 LinkedElementRenderFilter::class.isProvidedByMock()
52 ).getInstance<GetLinkedElementAjaxPage>(), notNullValue())
55 private fun JsonNode.toMap() = fields().asSequence().map { it.key!! to if (it.value.isNull) null else it.value.asText()!! }.toMap()