🔀 Merge “release/v81” into “master”
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / WebPageTest.kt
index d48f5fd..07ae727 100644 (file)
@@ -1,66 +1,59 @@
 package net.pterodactylus.sone.web.pages
 
-import com.google.common.eventbus.EventBus
+import com.google.common.eventbus.*
 import freenet.clients.http.*
-import freenet.support.SimpleReadOnlyArrayBucket
-import freenet.support.api.HTTPRequest
-import freenet.support.api.HTTPUploadedFile
-import net.pterodactylus.sone.core.Preferences
-import net.pterodactylus.sone.data.Album
-import net.pterodactylus.sone.data.Image
-import net.pterodactylus.sone.data.Post
-import net.pterodactylus.sone.data.PostReply
-import net.pterodactylus.sone.data.Sone
-import net.pterodactylus.sone.data.TemporaryImage
-import net.pterodactylus.sone.freenet.wot.OwnIdentity
+import freenet.support.*
+import freenet.support.api.*
+import net.pterodactylus.sone.core.*
+import net.pterodactylus.sone.data.*
+import net.pterodactylus.sone.freenet.*
+import net.pterodactylus.sone.freenet.wot.*
+import net.pterodactylus.sone.main.*
 import net.pterodactylus.sone.test.deepMock
 import net.pterodactylus.sone.test.get
 import net.pterodactylus.sone.test.mock
 import net.pterodactylus.sone.test.whenever
-import net.pterodactylus.sone.utils.asList
-import net.pterodactylus.sone.utils.asOptional
-import net.pterodactylus.sone.web.WebInterface
+import net.pterodactylus.sone.utils.*
+import net.pterodactylus.sone.web.*
 import net.pterodactylus.sone.web.page.*
 import net.pterodactylus.sone.web.page.FreenetTemplatePage.RedirectException
-import net.pterodactylus.util.notify.Notification
-import net.pterodactylus.util.template.Template
-import net.pterodactylus.util.template.TemplateContext
-import net.pterodactylus.util.web.Method
-import net.pterodactylus.util.web.Method.GET
-import net.pterodactylus.util.web.Response
-import org.junit.Assert.fail
-import org.mockito.ArgumentMatchers.anyBoolean
-import org.mockito.ArgumentMatchers.anyInt
-import org.mockito.ArgumentMatchers.anyLong
-import org.mockito.ArgumentMatchers.anyString
+import net.pterodactylus.util.notify.*
+import net.pterodactylus.util.template.*
+import net.pterodactylus.util.web.*
+import net.pterodactylus.util.web.Method.*
+import org.junit.Assert.*
+import org.mockito.ArgumentMatchers.*
 import org.mockito.ArgumentMatchers.eq
-import java.io.ByteArrayOutputStream
-import java.net.URI
-import java.nio.charset.Charset
+import java.io.*
+import java.net.*
+import java.nio.charset.*
+import java.util.*
 import kotlin.text.Charsets.UTF_8
 
 /**
  * Base class for web page tests.
  */
-open class WebPageTest(pageSupplier: (Template, WebInterface) -> SoneTemplatePage = { _, _ -> mock() }) {
+open class WebPageTest(pageSupplier: (WebInterface, Loaders, TemplateRenderer) -> SoneTemplatePage = { _, _, _ -> mock() }) {
 
        val currentSone = mock<Sone>()
-       val template = mock<Template>()
+       val loaders = mock<Loaders>()
+       val templateRenderer = mock<TemplateRenderer>()
        val webInterface = deepMock<WebInterface>()
        val core = webInterface.core
        val eventBus = mock<EventBus>()
        val preferences = Preferences(eventBus)
-       val l10n = webInterface.l10n!!
        val sessionManager = mock<SessionManager>()
 
-       val page by lazy { pageSupplier(template, webInterface) }
+       open val page by lazy { pageSupplier(webInterface, loaders, templateRenderer) }
+
        val httpRequest = mock<HTTPRequest>()
        val freenetRequest = mock<FreenetRequest>()
+
        init {
-               whenever(freenetRequest.l10n).thenReturn(l10n)
                whenever(freenetRequest.sessionManager).thenReturn(sessionManager)
                whenever(freenetRequest.uri).thenReturn(mock())
        }
+
        val soneRequest by lazy { freenetRequest.toSoneRequest(core, webInterface) }
        val templateContext = TemplateContext()
        val toadletContext = deepMock<ToadletContext>()
@@ -84,12 +77,16 @@ open class WebPageTest(pageSupplier: (Template, WebInterface) -> SoneTemplatePag
        private val notifications = mutableMapOf<String, Notification>()
        private val translations = mutableMapOf<String, String>()
 
+       private val translation = object : Translation {
+               override val currentLocale = Locale.ENGLISH
+               override fun translate(key: String) = translations[key] ?: key
+       }
+
        init {
                setupCore()
                setupWebInterface()
                setupHttpRequest()
                setupFreenetRequest()
-               setupTranslations()
        }
 
        private fun setupCore() {
@@ -103,8 +100,8 @@ open class WebPageTest(pageSupplier: (Template, WebInterface) -> SoneTemplatePag
                whenever(core.getPostReply(anyString())).then { allPostReplies[it[0]] }
                whenever(core.getReplies(anyString())).then { perPostReplies[it[0]].asList() }
                whenever(core.getAlbum(anyString())).then { allAlbums[it[0]] }
-               whenever(core.getImage(anyString())).then { allImages[it[0]]}
-               whenever(core.getImage(anyString(), anyBoolean())).then { allImages[it[0]]}
+               whenever(core.getImage(anyString())).then { allImages[it[0]] }
+               whenever(core.getImage(anyString(), anyBoolean())).then { allImages[it[0]] }
                whenever(core.getTemporaryImage(anyString())).thenReturn(null)
        }
 
@@ -115,6 +112,7 @@ open class WebPageTest(pageSupplier: (Template, WebInterface) -> SoneTemplatePag
                whenever(webInterface.getCurrentSoneWithoutCreatingSession(eq(toadletContext))).thenReturn(currentSone)
                whenever(webInterface.getNotifications(currentSone)).then { notifications.values }
                whenever(webInterface.getNotification(anyString())).then { notifications[it[0]].asOptional() }
+               whenever(webInterface.translation).thenReturn(translation)
        }
 
        private fun setupHttpRequest() {
@@ -134,12 +132,13 @@ open class WebPageTest(pageSupplier: (Template, WebInterface) -> SoneTemplatePag
                whenever(httpRequest.getPartAsStringFailsafe(anyString(), anyInt())).then { postRequestParameters[it[0]]?.decode()?.take(it[1]) ?: "" }
                whenever(httpRequest.getUploadedFile(anyString())).then {
                        it.get<String>(0).takeIf { it in uploadedFileNames }
-                                       ?.let { name -> UploadedFile(uploadedFileNames[name]!!, uploadedFileContentTypes[name]!!, uploadedFileResources[name]!!)
-                       }
+                                       ?.let { name ->
+                                               UploadedFile(uploadedFileNames[name]!!, uploadedFileContentTypes[name]!!, uploadedFileResources[name]!!)
+                                       }
                }
        }
 
-       private class UploadedFile(private val filename: String, private val contentType: String, private val resourceName: String): HTTPUploadedFile {
+       private class UploadedFile(private val filename: String, private val contentType: String, private val resourceName: String) : HTTPUploadedFile {
                override fun getFilename() = filename
                override fun getContentType() = contentType
                override fun getData() = javaClass.getResourceAsStream(resourceName).readBytes().let(::SimpleReadOnlyArrayBucket)
@@ -153,10 +152,6 @@ open class WebPageTest(pageSupplier: (Template, WebInterface) -> SoneTemplatePag
                whenever(freenetRequest.toadletContext).thenReturn(toadletContext)
        }
 
-       private fun setupTranslations() {
-               whenever(l10n.getString(anyString())).then { translations[it[0]] ?: it[0] }
-       }
-
        fun setMethod(method: Method) {
                whenever(httpRequest.method).thenReturn(method.name)
                whenever(freenetRequest.method).thenReturn(method)