import com.google.common.eventbus.EventBus
import freenet.clients.http.ToadletContext
+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.web.WebInterface
import net.pterodactylus.sone.web.page.FreenetRequest
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.junit.Before
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.ArgumentMatchers.anyInt
import org.mockito.ArgumentMatchers.anyLong
private val requestHeaders = mutableMapOf<String, String>()
private val getRequestParameters = mutableMapOf<String, MutableList<String>>()
private val postRequestParameters = mutableMapOf<String, ByteArray>()
+ private val uploadedFileNames = mutableMapOf<String, String>()
+ private val uploadedFileContentTypes = mutableMapOf<String, String>()
+ private val uploadedFileResources = mutableMapOf<String, String>()
private val ownIdentities = mutableSetOf<OwnIdentity>()
private val allSones = mutableMapOf<String, Sone>()
private val localSones = mutableMapOf<String, Sone>()
private val perPostReplies = mutableMapOf<String, PostReply>()
private val allAlbums = mutableMapOf<String, Album>()
private val allImages = mutableMapOf<String, Image>()
+ private val notifications = mutableMapOf<String, Notification>()
private val translations = mutableMapOf<String, String>()
init {
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())
+ whenever(webInterface.getNotifications(currentSone)).then { notifications.values }
+ whenever(webInterface.getNotification(anyString())).then { notifications[it[0]].asOptional() }
}
private fun setupHttpRequest() {
whenever(httpRequest.getMultipleIntParam(anyString())).then { getRequestParameters[it[0]]?.map { it.toIntOrNull() ?: 0 } ?: emptyArray<Int>() }
whenever(httpRequest.isPartSet(anyString())).then { it[0] in postRequestParameters }
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]!!)
+ }
+ }
+ }
+
+ 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)
}
private fun ByteArray.decode(charset: Charset = UTF_8) = String(this, charset)
translations[key] = value
}
+ fun addNotification(id: String, notification: Notification) {
+ notifications[id] = notification
+ }
+
fun addTemporaryImage(id: String, temporaryImage: TemporaryImage) {
whenever(core.getTemporaryImage(id)).thenReturn(temporaryImage)
}
+ fun addUploadedFile(name: String, filename: String, contentType: String, resource: String) {
+ uploadedFileNames[name] = filename
+ uploadedFileContentTypes[name] = contentType
+ uploadedFileResources[name] = resource
+ }
+
fun verifyNoRedirect(assertions: () -> Unit) {
var caughtException: Exception? = null
try {