Add test for DI constructability of TrustAjaxPage
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / ajax / JsonPageBaseTest.kt
index fd1af27..75a0cd4 100644 (file)
@@ -19,13 +19,13 @@ class JsonPageBaseTest : TestObjects() {
 
        private var needsFormPassword = false
        private val pageCallCounter = AtomicInteger()
-       private var pageResponse = { JsonReturnObject(true) }
+       private var pageResponse = { JsonReturnObject(true).put("foo", "bar") }
        private val outputStream = ByteArrayOutputStream()
        private val response = Response(outputStream)
 
        private val page = object : JsonPage("path.html", webInterface) {
 
-               override fun needsFormPassword() = this@JsonPageBaseTest.needsFormPassword
+               override val needsFormPassword get() = this@JsonPageBaseTest.needsFormPassword
 
                override fun createJsonObject(request: FreenetRequest) =
                                pageResponse().also { pageCallCounter.incrementAndGet() }
@@ -52,6 +52,9 @@ class JsonPageBaseTest : TestObjects() {
                core.preferences.isRequireFullAccess = true
                page.handleRequest(freenetRequest, response)
                assertThat(response.statusCode, equalTo(403))
+               assertThat(response.statusText, equalTo("Forbidden"))
+               assertThat(response.contentType, equalTo("application/json"))
+               assertThat(outputStream.toString("UTF-8").asJson(), equalTo(mapOf("success" to false, "error" to "auth-required")))
        }
 
        @Test
@@ -59,6 +62,9 @@ class JsonPageBaseTest : TestObjects() {
                needsFormPassword = true
                page.handleRequest(freenetRequest, response)
                assertThat(response.statusCode, equalTo(403))
+               assertThat(response.statusText, equalTo("Forbidden"))
+               assertThat(response.contentType, equalTo("application/json"))
+               assertThat(outputStream.toString("UTF-8").asJson(), equalTo(mapOf("success" to false, "error" to "auth-required")))
        }
 
        @Test
@@ -67,6 +73,9 @@ class JsonPageBaseTest : TestObjects() {
                addRequestParameter("formPassword", formPassword + "_false")
                page.handleRequest(freenetRequest, response)
                assertThat(response.statusCode, equalTo(403))
+               assertThat(response.statusText, equalTo("Forbidden"))
+               assertThat(response.contentType, equalTo("application/json"))
+               assertThat(outputStream.toString("UTF-8").asJson(), equalTo(mapOf("success" to false, "error" to "auth-required")))
        }
 
        @Test
@@ -75,6 +84,9 @@ class JsonPageBaseTest : TestObjects() {
                addRequestParameter("formPassword", formPassword)
                page.handleRequest(freenetRequest, response)
                assertThat(response.statusCode, equalTo(200))
+               assertThat(response.statusText, equalTo("OK"))
+               assertThat(response.contentType, equalTo("application/json"))
+               assertThat(outputStream.toString("UTF-8").asJson(), equalTo(mapOf("success" to true, "foo" to "bar")))
        }
 
        @Test
@@ -82,20 +94,28 @@ class JsonPageBaseTest : TestObjects() {
                unsetCurrentSone()
                page.handleRequest(freenetRequest, response)
                assertThat(response.statusCode, equalTo(403))
+               assertThat(response.statusText, equalTo("Forbidden"))
+               assertThat(response.contentType, equalTo("application/json"))
+               assertThat(outputStream.toString("UTF-8").asJson(), equalTo(mapOf("success" to false, "error" to "auth-required")))
        }
 
        @Test
        fun `page returns content if login is required and current Sone is set`() {
                page.handleRequest(freenetRequest, response)
-               assertThat(response.statusCode, equalTo(200))
                assertThat(pageCallCounter.get(), equalTo(1))
+               assertThat(response.statusCode, equalTo(200))
+               assertThat(response.statusText, equalTo("OK"))
+               assertThat(response.contentType, equalTo("application/json"))
+               assertThat(outputStream.toString("UTF-8").asJson(), equalTo(mapOf("success" to true, "foo" to "bar")))
        }
 
        @Test
        fun `page returns 500 if execution throws exception`() {
-               pageResponse = { throw IllegalStateException() }
+               pageResponse = { throw IllegalStateException("some error occured") }
                page.handleRequest(freenetRequest, response)
                assertThat(response.statusCode, equalTo(500))
+               assertThat(response.statusText, equalTo("some error occured"))
+               assertThat(response.contentType, equalTo("text/plain"))
        }
 
        @Test
@@ -110,4 +130,6 @@ class JsonPageBaseTest : TestObjects() {
            assertThat(page.isPrefixPage, equalTo(false))
        }
 
+       private fun String.asJson() = objectMapper.readValue(this, Map::class.java) as Map<String, Any>
+
 }