Add test for DI constructability of TrustAjaxPage
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / ajax / GetLinkedElementAjaxPageTest.kt
index ea3be1a..fb8b527 100644 (file)
@@ -1,42 +1,31 @@
 package net.pterodactylus.sone.web.ajax
 
 import com.fasterxml.jackson.databind.JsonNode
+import net.pterodactylus.sone.core.ElementLoader
 import net.pterodactylus.sone.core.LinkedElement
 import net.pterodactylus.sone.template.LinkedElementRenderFilter
+import net.pterodactylus.sone.test.getInstance
+import net.pterodactylus.sone.test.isProvidedByMock
 import net.pterodactylus.sone.test.mock
 import net.pterodactylus.sone.test.whenever
 import net.pterodactylus.sone.utils.jsonArray
+import net.pterodactylus.sone.web.baseInjector
 import net.pterodactylus.util.template.TemplateContext
 import org.hamcrest.MatcherAssert.assertThat
 import org.hamcrest.Matchers
-import org.hamcrest.Matchers.equalTo
+import org.hamcrest.Matchers.notNullValue
 import org.junit.Test
 import org.mockito.ArgumentMatchers
 
 /**
  * Unit test for [GetLinkedElementAjaxPage].
  */
-class GetLinkedElementAjaxPageTest: JsonPageTest() {
+class GetLinkedElementAjaxPageTest: JsonPageTest("getLinkedElement.ajax", requiresLogin = false, needsFormPassword = false) {
 
        private val linkedElementRenderFilter = mock<LinkedElementRenderFilter>()
        override var page: JsonPage = GetLinkedElementAjaxPage(webInterface, elementLoader, linkedElementRenderFilter)
 
        @Test
-       fun `page returns correct path`() {
-           assertThat(page.path, equalTo("getLinkedElement.ajax"))
-       }
-
-       @Test
-       fun `page does not require login`() {
-           assertThat(page.requiresLogin(), equalTo(false))
-       }
-
-       @Test
-       fun `page does not require form password`() {
-           assertThat(page.needsFormPassword(), equalTo(false))
-       }
-
-       @Test
        fun `only loaded linked elements are returned`() {
            addRequestParameter("elements", jsonArray("KSK@foo.png", "KSK@foo.jpg", "KSK@foo.html").toString())
                addLinkedElement("KSK@foo.png", true, false)
@@ -49,12 +38,20 @@ class GetLinkedElementAjaxPageTest: JsonPageTest() {
                                else -> null
                        }
                }
-               assertThat(json.get("linkedElements").elements().asSequence().map { it.toMap() }.toList(), Matchers.containsInAnyOrder(
+               assertThat(json.get("linkedElements")!!.elements().asSequence().map { it.toMap() }.toList(), Matchers.containsInAnyOrder(
                                mapOf<String, String?>("link" to "KSK@foo.jpg", "html" to "jpeg-image"),
                                mapOf("link" to "KSK@foo.html", "html" to "html-page")
                ))
        }
 
+       @Test
+       fun `page can be created by dependency injection`() {
+           assertThat(baseInjector.createChildInjector(
+                           ElementLoader::class.isProvidedByMock(),
+                           LinkedElementRenderFilter::class.isProvidedByMock()
+           ).getInstance<GetLinkedElementAjaxPage>(), notNullValue())
+       }
+
        private fun JsonNode.toMap() = fields().asSequence().map { it.key!! to if (it.value.isNull) null else it.value.asText()!! }.toMap()
 
 }