X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2FWebInterfaceModuleTest.kt;fp=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2FWebInterfaceModuleTest.kt;h=9137da348090f4567d41553514748d9451a922f4;hp=0000000000000000000000000000000000000000;hb=03cec6a6772c2d836d94864adddaf544cbe9d72f;hpb=6f1f26e3998cfef155b0cf59152827accea70d30 diff --git a/src/test/kotlin/net/pterodactylus/sone/web/WebInterfaceModuleTest.kt b/src/test/kotlin/net/pterodactylus/sone/web/WebInterfaceModuleTest.kt new file mode 100644 index 0000000..9137da3 --- /dev/null +++ b/src/test/kotlin/net/pterodactylus/sone/web/WebInterfaceModuleTest.kt @@ -0,0 +1,272 @@ +package net.pterodactylus.sone.web + +import com.google.inject.Guice.* +import freenet.client.* +import freenet.clients.http.* +import freenet.l10n.* +import freenet.support.api.* +import net.pterodactylus.sone.core.* +import net.pterodactylus.sone.data.* +import net.pterodactylus.sone.database.* +import net.pterodactylus.sone.freenet.* +import net.pterodactylus.sone.freenet.wot.* +import net.pterodactylus.sone.main.* +import net.pterodactylus.sone.template.* +import net.pterodactylus.sone.test.* +import net.pterodactylus.sone.text.* +import net.pterodactylus.sone.web.page.* +import net.pterodactylus.util.template.* +import net.pterodactylus.util.web.* +import org.hamcrest.MatcherAssert.* +import org.hamcrest.Matchers.* +import org.junit.* + +class WebInterfaceModuleTest { + + private val webInterfaceModule = WebInterfaceModule() + private val l10n = mock() + private val loaders = mock() + private val additionalModules = arrayOf( + Core::class.isProvidedByMock(), + SoneProvider::class.isProvidedByMock(), + BaseL10n::class.isProvidedBy(l10n), + SoneTextParser::class.isProvidedByMock(), + ElementLoader::class.isProvidedByMock(), + Loaders::class.isProvidedBy(loaders), + HighLevelSimpleClient::class.isProvidedByMock(), + SessionManager::class.isProvidedByMock() + ) + private val injector = createInjector(webInterfaceModule, *additionalModules)!! + private val templateContext by lazy { injector.getInstance().createTemplateContext()!! } + + @Test + fun `template context factory creates template with reflection accessor for objects`() { + verifyAccessor() + } + + @Test + fun `template context factory creates template with collection accessor for collections`() { + verifyAccessor, CollectionAccessor>() + } + + @Test + fun `template context contains sone accessor for sones`() { + verifyAccessor() + } + + @Test + fun `template context contains post accessor for posts`() { + verifyAccessor() + } + + @Test + fun `template context contains reply accessor for replies`() { + verifyAccessor, ReplyAccessor>() + } + + @Test + fun `template context contains album accessor for albums`() { + verifyAccessor() + } + + @Test + fun `template context contains image accessor for images`() { + verifyAccessor() + } + + @Test + fun `template context contains identity accessor for identities`() { + verifyAccessor() + } + + @Test + fun `template context contains trust accessor for trusts`() { + verifyAccessor() + } + + @Test + fun `template context contains http request accessor for http requests`() { + verifyAccessor() + } + + @Test + fun `template context contains profile accessor for profiles`() { + verifyAccessor() + } + + private inline fun verifyAccessor() { + assertThat(templateContext.getAccessor(O::class.java), instanceOf(A::class.java)) + } + + @Test + fun `template context contains date filter`() { + verifyFilter("date") + } + + @Test + fun `template context contains html filter`() { + verifyFilter("html") + } + + @Test + fun `template context contains replace filter`() { + verifyFilter("replace") + } + + @Test + fun `template context contains store filter`() { + verifyFilter("store") + } + + @Test + fun `template context contains l10n filter`() { + verifyFilter("l10n") + } + + @Test + fun `template context contains substring filter`() { + verifyFilter("substring") + } + + @Test + fun `template context contains xml filter`() { + verifyFilter("xml") + } + + @Test + fun `template context contains change filter`() { + verifyFilter("change") + } + + @Test + fun `template context contains match filter`() { + verifyFilter("match") + } + + @Test + fun `template context contains css filter`() { + verifyFilter("css") + } + + @Test + fun `template context contains js filter`() { + verifyFilter("js") + } + + @Test + fun `template context contains parser filter`() { + verifyFilter("parse") + } + + @Test + fun `template context contains shorten filter`() { + verifyFilter("shorten") + } + + @Test + fun `template context contains render filter`() { + verifyFilter("render") + } + + @Test + fun `template context contains linked elements filter`() { + verifyFilter("linked-elements") + } + + @Test + fun `template context contains linked elements render filter`() { + verifyFilter("render-linked-element") + } + + @Test + fun `template context contains reparse filter`() { + verifyFilter("reparse") + } + + @Test + fun `template context contains unknown date filter`() { + verifyFilter("unknown") + } + + @Test + fun `unknown date filter uses correct l10n key`() { + whenever(l10n.getString("View.Sone.Text.UnknownDate")).thenReturn("unknown") + assertThat(getFilter("unknown")!!.format(null, 0L, emptyMap()), equalTo("unknown")) + } + + @Test + fun `template context contains format filter`() { + verifyFilter("format") + } + + @Test + fun `template context contains collection sort filter`() { + verifyFilter("sort") + } + + @Test + fun `template context contains image link filter`() { + verifyFilter("image-link") + } + + @Test + fun `template context contains reply group filter`() { + verifyFilter("replyGroup") + } + + @Test + fun `template context contains contains filter`() { + verifyFilter("in") + } + + @Test + fun `template context unique elements filter`() { + verifyFilter("unique") + } + + @Test + fun `template context mod filter`() { + verifyFilter("mod") + } + + @Test + fun `template context pagination filter`() { + verifyFilter("paginate") + } + + private inline fun verifyFilter(name: String) { + assertThat(getFilter(name), instanceOf(F::class.java)) + } + + private fun getFilter(name: String): Filter? = templateContext.getFilter(name) + + @Test + fun `template context factory is created as singleton`() { + val factory1 = injector.getInstance() + val factory2 = injector.getInstance() + assertThat(factory1, sameInstance(factory2)) + } + + @Test + fun `template from classpath is returned`() { + val template = Template() + templateContext["testTemplate"] = template + assertThat(templateContext.getTemplate("testTemplate"), sameInstance(template)) + } + + @Test + fun `template from loaders’ provider is returned`() { + val template = Template() + whenever(loaders.templateProvider).thenReturn(TemplateProvider { _, templateName -> + template.takeIf { templateName == "testTemplate" } + }) + assertThat(templateContext.getTemplate("testTemplate"), sameInstance(template)) + } + + @Test + fun `page toadlet factory is created with correct prefix`() { + val page = mock>() + assertThat(injector.getInstance().createPageToadlet(page).path(), startsWith("/Sone/")) + } + +}