X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fajax%2FJsonPageTest.kt;h=ea882d31df52b089f715fb04d62c6d66a5d6f755;hp=9b19aa3e22f10b77dcdd4d7081b11566425503db;hb=ea7ad5e87074576d17b7df74365a726bd95d7665;hpb=dd96e781b592c3bae9b0f66f85ba05a4e4cc18ce 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 9b19aa3..ea882d3 100644 --- a/src/test/kotlin/net/pterodactylus/sone/web/ajax/JsonPageTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/web/ajax/JsonPageTest.kt @@ -1,139 +1,49 @@ package net.pterodactylus.sone.web.ajax -import freenet.clients.http.ToadletContext -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 -import net.pterodactylus.sone.data.Sone.SoneStatus -import net.pterodactylus.sone.data.Sone.SoneStatus.idle -import net.pterodactylus.sone.test.asOptional -import net.pterodactylus.sone.test.deepMock import net.pterodactylus.sone.test.mock -import net.pterodactylus.sone.test.whenever 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.anyString +import org.hamcrest.MatcherAssert.assertThat +import org.hamcrest.Matchers.equalTo +import org.junit.Test /** * Base class for tests for any [JsonPage] implementations. */ -open class JsonPageTest { +abstract class JsonPageTest( + private val expectedPath: String, + private val requiresLogin: Boolean = true, + private val needsFormPassword: Boolean = true, + pageSupplier: (WebInterface) -> JsonPage = { mock() }) : TestObjects() { - 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)!! } - - protected val toadletContext = mock() - protected val freenetRequest = mock() - protected val httpRequest = mock() - protected val currentSone = deepMock() - - private val requestParameters = mutableMapOf() - private val localSones = mutableMapOf() - private val remoteSones = mutableMapOf() - private val newPosts = mutableMapOf() - private val newReplies = mutableMapOf() - private val loadedElements = mutableMapOf() - private val notifications = mutableListOf() - - @Before - fun setupWebInterface() { - whenever(webInterface.getCurrentSoneCreatingSession(toadletContext)).thenReturn(currentSone) - whenever(webInterface.getCurrentSoneWithoutCreatingSession(toadletContext)).thenReturn(currentSone) - whenever(webInterface.core).thenReturn(core) - whenever(webInterface.getNotifications(currentSone)).thenAnswer { notifications } - whenever(webInterface.getNewPosts(currentSone)).thenAnswer { newPosts.values } - whenever(webInterface.getNewReplies(currentSone)).thenAnswer { newReplies.values } - } - - @Before - fun setupCore() { - whenever(core.getSone(anyString())).thenAnswer { (localSones + remoteSones)[it.getArgument(0)].asOptional() } - } - - @Before - fun setupElementLoader() { - whenever(elementLoader.loadElement(anyString())).thenAnswer { - loadedElements[it.getArgument(0)] ?: LinkedElement(it.getArgument(0), loading = true) - } - } - - @Before - fun setupCurrentSone() { - currentSone.mock("soneId", "Sone_Id", true, 1000, idle) + protected open val page: JsonPage by lazy { pageSupplier(webInterface) } + protected val json by lazy { + page.createJsonObject(freenetRequest) } - @Before - fun setupFreenetRequest() { - whenever(freenetRequest.toadletContext).thenReturn(toadletContext) - whenever(freenetRequest.httpRequest).thenReturn(httpRequest) - } - - @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) } - } - - protected fun Sone.mock(id: String, name: String, local: Boolean = false, time: Long, status: SoneStatus = idle) = apply { - whenever(this.id).thenReturn(id) - whenever(this.name).thenReturn(name) - whenever(isLocal).thenReturn(local) - whenever(this.time).thenReturn(time) - whenever(this.status).thenReturn(status) - } - - protected fun unsetCurrentSone() { - whenever(webInterface.getCurrentSoneWithoutCreatingSession(toadletContext)).thenReturn(null) - whenever(webInterface.getCurrentSoneCreatingSession(toadletContext)).thenReturn(null) - } - - protected fun addRequestParameter(key: String, value: String) { - requestParameters += key to value - } + private val JsonReturnObject.error get() = (this as? JsonErrorReturnObject)?.error - protected fun addNotification(vararg notifications: Notification) { - this.notifications += notifications + protected fun assertThatJsonIsSuccessful() { + assertThat(json.isSuccess, equalTo(true)) } - protected fun addSone(sone: Sone) { - remoteSones += sone.id to sone + protected fun assertThatJsonFailed(error: String? = null) { + assertThat(json.isSuccess, equalTo(false)) + error?.run { assertThat(json.error, equalTo(this)) } } - protected fun addNewPost(id: String, soneId: String, time: Long, recipientId: String? = null) { - newPosts[id] = mock().apply { - whenever(this.id).thenReturn(id) - val sone = mock().apply { whenever(this.id).thenReturn(soneId) } - whenever(this.sone).thenReturn(sone) - whenever(this.time).thenReturn(time) - whenever(this.recipientId).thenReturn(recipientId.asOptional()) - } + @Test + fun `page returns correct path`() { + assertThat(page.path, equalTo(expectedPath)) } - protected fun addNewReply(id: String, soneId: String, postId: String, postSoneId: String) { - newReplies[id] = mock().apply { - whenever(this.id).thenReturn(id) - val sone = mock().apply { whenever(this.id).thenReturn(soneId) } - whenever(this.sone).thenReturn(sone) - val postSone = mock().apply { whenever(this.id).thenReturn(postSoneId) } - val post = mock().apply { - whenever(this.sone).thenReturn(postSone) - } - whenever(this.post).thenReturn(post.asOptional()) - whenever(this.postId).thenReturn(postId) - } + @Test + fun `page needs form password`() { + assertThat(page.needsFormPassword, equalTo(needsFormPassword)) } - protected fun addLoadedElement(link: String, loading: Boolean, failed: Boolean) { - loadedElements[link] = LinkedElement(link, failed, loading) + @Test + fun `page requires login`() { + assertThat(page.requiresLogin, equalTo(requiresLogin)) } }