1 package net.pterodactylus.sone.web.ajax
3 import net.pterodactylus.sone.core.Preferences
4 import net.pterodactylus.sone.test.whenever
5 import net.pterodactylus.sone.web.page.FreenetRequest
6 import net.pterodactylus.util.web.Response
7 import org.hamcrest.MatcherAssert.assertThat
8 import org.hamcrest.Matchers.containsString
9 import org.hamcrest.Matchers.equalTo
10 import org.junit.Before
12 import java.io.ByteArrayOutputStream
13 import java.util.concurrent.atomic.AtomicInteger
16 * Unit test for [JsonPage].
18 class JsonPageBaseTest : TestObjects() {
20 private var needsFormPassword = false
21 private val pageCallCounter = AtomicInteger()
22 private var pageResponse = { JsonReturnObject(true) }
23 private val outputStream = ByteArrayOutputStream()
24 private val response = Response(outputStream)
26 private val page = object : JsonPage("path.html", webInterface) {
28 override fun needsFormPassword() = this@JsonPageBaseTest.needsFormPassword
30 override fun createJsonObject(request: FreenetRequest) =
31 pageResponse().also { pageCallCounter.incrementAndGet() }
36 fun setupWebInterface() {
37 whenever(webInterface.core).thenReturn(core)
42 whenever(core.preferences).thenReturn(Preferences(eventBus))
46 fun setupFreenetRequest() {
47 whenever(freenetRequest.toadletContext).thenReturn(toadletContext)
51 fun `page returns 403 is full access is required but request is not full access`() {
52 core.preferences.isRequireFullAccess = true
53 page.handleRequest(freenetRequest, response)
54 assertThat(response.statusCode, equalTo(403))
58 fun `page returns 403 if form password is needed but not supplied`() {
59 needsFormPassword = true
60 page.handleRequest(freenetRequest, response)
61 assertThat(response.statusCode, equalTo(403))
65 fun `page returns 403 is form password is supplied but incorrect`() {
66 needsFormPassword = true
67 addRequestParameter("formPassword", formPassword + "_false")
68 page.handleRequest(freenetRequest, response)
69 assertThat(response.statusCode, equalTo(403))
73 fun `page returns 200 if form password is required and correct`() {
74 needsFormPassword = true
75 addRequestParameter("formPassword", formPassword)
76 page.handleRequest(freenetRequest, response)
77 assertThat(response.statusCode, equalTo(200))
81 fun `page returns 403 is login is required but current Sone is null`() {
83 page.handleRequest(freenetRequest, response)
84 assertThat(response.statusCode, equalTo(403))
88 fun `page returns content if login is required and current Sone is set`() {
89 page.handleRequest(freenetRequest, response)
90 assertThat(response.statusCode, equalTo(200))
91 assertThat(pageCallCounter.get(), equalTo(1))
95 fun `page returns 500 if execution throws exception`() {
96 pageResponse = { throw IllegalStateException() }
97 page.handleRequest(freenetRequest, response)
98 assertThat(response.statusCode, equalTo(500))
102 fun `page returns stack trace if execution throws exception`() {
103 pageResponse = { throw IllegalStateException() }
104 page.handleRequest(freenetRequest, response)
105 assertThat(outputStream.toString(), containsString("IllegalStateException"))
109 fun `json page is not a prefix page`() {
110 assertThat(page.isPrefixPage, equalTo(false))