Convert sone template page test to use new web page test base
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / WebPageTest2.kt
index 6cdff99..6c4372d 100644 (file)
@@ -25,6 +25,7 @@ import org.mockito.ArgumentMatchers.anyInt
 import org.mockito.ArgumentMatchers.anyLong
 import org.mockito.ArgumentMatchers.anyString
 import org.mockito.ArgumentMatchers.eq
+import java.net.URI
 import java.nio.charset.Charset
 import kotlin.text.Charsets.UTF_8
 
@@ -34,22 +35,24 @@ import kotlin.text.Charsets.UTF_8
 abstract class WebPageTest2(pageSupplier: (Template, WebInterface) -> SoneTemplatePage) {
 
        protected val currentSone = mock<Sone>()
-       private val template = mock<Template>()
-       private val webInterface = deepMock<WebInterface>()
+       protected val template = mock<Template>()
+       protected val webInterface = deepMock<WebInterface>()
        protected val core = webInterface.core!!
        private val eventBus = mock<EventBus>()
-       private val preferences = Preferences(eventBus)
-       private val l10n = webInterface.l10n!!
+       protected val preferences = Preferences(eventBus)
+       protected val l10n = webInterface.l10n!!
 
        protected val page by lazy { pageSupplier(template, webInterface) }
        private val httpRequest = mock<HTTPRequest>()
        protected val freenetRequest = mock<FreenetRequest>()
        protected val templateContext = TemplateContext()
 
-       private val toadletContext = deepMock<ToadletContext>()
+       protected val toadletContext = deepMock<ToadletContext>()
+       private val requestHeaders = mutableMapOf<String, String>()
        private val getRequestParameters = mutableMapOf<String, MutableList<String>>()
        private val postRequestParameters = mutableMapOf<String, ByteArray>()
        private val allSones = mutableMapOf<String, Sone>()
+       private val localSones = mutableMapOf<String, Sone>()
        private val allPosts = mutableMapOf<String, Post>()
        private val translations = mutableMapOf<String, String>()
 
@@ -58,6 +61,8 @@ abstract class WebPageTest2(pageSupplier: (Template, WebInterface) -> SoneTempla
                whenever(core.preferences).thenReturn(preferences)
                whenever(core.sones).then { allSones.values }
                whenever(core.getSone(anyString())).then { allSones[it[0]].asOptional() }
+               whenever(core.localSones).then { localSones.values }
+               whenever(core.getLocalSone(anyString())).then { localSones[it[0]] }
                whenever(core.getPost(anyString())).then { allPosts[it[0]].asOptional() }
        }
 
@@ -66,11 +71,13 @@ abstract class WebPageTest2(pageSupplier: (Template, WebInterface) -> SoneTempla
                whenever(webInterface.getCurrentSoneCreatingSession(eq(toadletContext))).thenReturn(currentSone)
                whenever(webInterface.getCurrentSone(eq(toadletContext), anyBoolean())).thenReturn(currentSone)
                whenever(webInterface.getCurrentSoneWithoutCreatingSession(eq(toadletContext))).thenReturn(currentSone)
+               whenever(webInterface.getNotifications(currentSone)).thenReturn(emptyList())
        }
 
        @Before
        fun setupHttpRequest() {
                whenever(httpRequest.method).thenReturn("GET")
+               whenever(httpRequest.getHeader(anyString())).then { requestHeaders[it.get<String>(0).toLowerCase()] }
                whenever(httpRequest.hasParameters()).then { getRequestParameters.isNotEmpty() }
                whenever(httpRequest.parameterNames).then { getRequestParameters.keys }
                whenever(httpRequest.isParameterSet(anyString())).then { it[0] in getRequestParameters }
@@ -81,7 +88,7 @@ abstract class WebPageTest2(pageSupplier: (Template, WebInterface) -> SoneTempla
                whenever(httpRequest.getLongParam(anyString(), anyLong())).then { getRequestParameters[it[0]]?.first()?.toLongOrNull() ?: it[1] }
                whenever(httpRequest.getMultipleParam(anyString())).then { getRequestParameters[it[0]]?.toTypedArray() ?: emptyArray<String>() }
                whenever(httpRequest.getMultipleIntParam(anyString())).then { getRequestParameters[it[0]]?.map { it.toIntOrNull() ?: 0 } ?: emptyArray<Int>() }
-               whenever(httpRequest.getPartAsStringFailsafe(anyString(), anyInt())).then { postRequestParameters[it[0]]?.decode() }
+               whenever(httpRequest.getPartAsStringFailsafe(anyString(), anyInt())).then { postRequestParameters[it[0]]?.decode()?.take(it[1]) ?: "" }
        }
 
        private fun ByteArray.decode(charset: Charset = UTF_8) = String(this, charset)
@@ -103,6 +110,15 @@ abstract class WebPageTest2(pageSupplier: (Template, WebInterface) -> SoneTempla
                whenever(freenetRequest.method).thenReturn(method)
        }
 
+       fun request(uri: String) {
+               whenever(httpRequest.path).thenReturn(uri)
+               whenever(freenetRequest.uri).thenReturn(URI(uri))
+       }
+
+       fun addHttpRequestHeader(name: String, value: String) {
+               requestHeaders[name.toLowerCase()] = value
+       }
+
        fun addHttpRequestParameter(name: String, value: String) {
                getRequestParameters[name] = getRequestParameters.getOrElse(name) { mutableListOf<String>() }.apply { add(value) }
        }
@@ -111,10 +127,20 @@ abstract class WebPageTest2(pageSupplier: (Template, WebInterface) -> SoneTempla
                postRequestParameters[name] = value.toByteArray(UTF_8)
        }
 
+       fun unsetCurrentSone() {
+               whenever(webInterface.getCurrentSoneCreatingSession(eq(toadletContext))).thenReturn(null)
+               whenever(webInterface.getCurrentSone(eq(toadletContext), anyBoolean())).thenReturn(null)
+               whenever(webInterface.getCurrentSoneWithoutCreatingSession(eq(toadletContext))).thenReturn(null)
+       }
+
        fun addSone(id: String, sone: Sone) {
                allSones[id] = sone
        }
 
+       fun addLocalSone(id: String, localSone: Sone) {
+               localSones[id] = localSone
+       }
+
        fun addPost(id: String, post: Post) {
                allPosts[id] = post
        }