X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fajax%2FJsonPageTest.kt;h=e719c06dde0bcd9307ecc17b13086264d8325b84;hb=05fb821e72072bde52f383bdc5a988da67f66d0c;hp=84f74f966aec0d725ad6c79774c4211bc3c32d8f;hpb=14bcfdd073d7ae75ae77bc112e38b29aee243411;p=Sone.git diff --git a/src/test/kotlin/net/pterodactylus/sone/web/ajax/JsonPageTest.kt b/src/test/kotlin/net/pterodactylus/sone/web/ajax/JsonPageTest.kt index 84f74f9..e719c06 100644 --- a/src/test/kotlin/net/pterodactylus/sone/web/ajax/JsonPageTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/web/ajax/JsonPageTest.kt @@ -1,8 +1,11 @@ package net.pterodactylus.sone.web.ajax import freenet.clients.http.ToadletContext +import freenet.support.SimpleReadOnlyArrayBucket import freenet.support.api.HTTPRequest import net.pterodactylus.sone.core.Core +import net.pterodactylus.sone.core.ElementLoader +import net.pterodactylus.sone.core.LinkedElement import net.pterodactylus.sone.data.Post import net.pterodactylus.sone.data.PostReply import net.pterodactylus.sone.data.Sone @@ -16,7 +19,11 @@ import net.pterodactylus.sone.web.WebInterface import net.pterodactylus.sone.web.page.FreenetRequest import net.pterodactylus.util.notify.Notification import org.junit.Before +import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.anyString +import java.util.NoSuchElementException +import javax.naming.SizeLimitExceededException +import kotlin.coroutines.experimental.EmptyCoroutineContext.plus /** * Base class for tests for any [JsonPage] implementations. @@ -25,6 +32,7 @@ open class JsonPageTest { protected val webInterface = mock() protected val core = mock() + protected val elementLoader = mock() protected open lateinit var page: JsonPage protected val json by lazy { page.createJsonObject(freenetRequest)!! } @@ -34,10 +42,12 @@ open class JsonPageTest { protected val currentSone = deepMock() private val requestParameters = mutableMapOf() + private val requestParts = mutableMapOf() private val localSones = mutableMapOf() private val remoteSones = mutableMapOf() private val newPosts = mutableMapOf() private val newReplies = mutableMapOf() + private val linkedElements = mutableMapOf() private val notifications = mutableListOf() @Before @@ -56,6 +66,13 @@ open class JsonPageTest { } @Before + fun setupElementLoader() { + whenever(elementLoader.loadElement(anyString())).thenAnswer { + linkedElements[it.getArgument(0)] ?: LinkedElement(it.getArgument(0), loading = true) + } + } + + @Before fun setupCurrentSone() { currentSone.mock("soneId", "Sone_Id", true, 1000, idle) } @@ -69,6 +86,14 @@ open class JsonPageTest { @Before fun setupHttpRequest() { whenever(httpRequest.getParam(anyString())).thenAnswer { requestParameters[it.getArgument(0)] ?: "" } + whenever(httpRequest.getParam(anyString(), anyString())).thenAnswer { requestParameters[it.getArgument(0)] ?: it.getArgument(1) } + whenever(httpRequest.getPart(anyString())).thenAnswer { requestParts[it.getArgument(0)]?.let { SimpleReadOnlyArrayBucket(it.toByteArray()) } } + whenever(httpRequest.getPartAsBytesFailsafe(anyString(), anyInt())).thenAnswer { requestParts[it.getArgument(0)]?.toByteArray()?.copyOf(it.getArgument(1)) ?: ByteArray(0) } + whenever(httpRequest.getPartAsBytesThrowing(anyString(), anyInt())).thenAnswer { invocation -> requestParts[invocation.getArgument(0)]?.let { it.toByteArray().let { if (it.size > invocation.getArgument(1)) throw SizeLimitExceededException() else it } } ?: throw NoSuchElementException() } + whenever(httpRequest.getPartAsStringFailsafe(anyString(), anyInt())).thenAnswer { requestParts[it.getArgument(0)]?.substring(0, it.getArgument(1)) ?: "" } + whenever(httpRequest.getPartAsStringThrowing(anyString(), anyInt())).thenAnswer { invocation -> requestParts[invocation.getArgument(0)]?.let { if (it.length > invocation.getArgument(1)) throw SizeLimitExceededException() else it } ?: throw NoSuchElementException() } + whenever(httpRequest.getIntPart(anyString(), anyInt())).thenAnswer { invocation -> requestParts[invocation.getArgument(0)]?.toIntOrNull() ?: invocation.getArgument(1) } + whenever(httpRequest.isPartSet(anyString())).thenAnswer { it.getArgument(0) in requestParts } } protected fun Sone.mock(id: String, name: String, local: Boolean = false, time: Long, status: SoneStatus = idle) = apply { @@ -88,6 +113,10 @@ open class JsonPageTest { requestParameters += key to value } + protected fun addRequestPart(key: String, value: String) { + requestParts += key to value + } + protected fun addNotification(vararg notifications: Notification) { this.notifications += notifications } @@ -120,4 +149,8 @@ open class JsonPageTest { } } + protected fun addLinkedElement(link: String, loading: Boolean, failed: Boolean) { + linkedElements[link] = LinkedElement(link, failed, loading) + } + }