X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FLinkedElementRenderFilterTest.kt;h=8363f6b6c5e0e94ef3c3979b89a0b75dfb8460e3;hp=07ef1781d4f49b7a53b95f89befc4a51c05927ec;hb=047787883cea2957540331b4720d9a20167eb042;hpb=b91ce252d94a8876097b939e129dc33264cef2f5 diff --git a/src/test/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilterTest.kt b/src/test/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilterTest.kt index 07ef178..8363f6b 100644 --- a/src/test/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilterTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilterTest.kt @@ -1,37 +1,72 @@ package net.pterodactylus.sone.template -import net.pterodactylus.sone.core.LinkedElement -import net.pterodactylus.util.template.HtmlFilter -import net.pterodactylus.util.template.TemplateContextFactory -import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.`is` -import org.jsoup.Jsoup -import org.junit.Test +import com.google.inject.* +import net.pterodactylus.sone.core.* +import net.pterodactylus.sone.test.* +import net.pterodactylus.util.template.* +import org.hamcrest.MatcherAssert.* +import org.hamcrest.Matchers.* +import org.jsoup.* +import org.jsoup.nodes.* +import org.junit.* /** * Unit test for [LinkedElementRenderFilter]. */ class LinkedElementRenderFilterTest { - private val templateContextFactory = TemplateContextFactory() + private val filter = LinkedElementRenderFilter() - init { - templateContextFactory.addFilter("html", HtmlFilter()) + @Test + fun `filter returns null for objects that are not linked elements`() { + assertThat(filter.format(null, Any(), null), nullValue()) } - private val filter = LinkedElementRenderFilter(templateContextFactory) + @Test + fun `filter renders empty span for not loaded elements`() { + val html = filter.format(null, LinkedElement("KSK@gpl.png", loading = true), emptyMap()) as String + val spanNode = Jsoup.parseBodyFragment(html).body().child(0) + assertThat(spanNode.nodeName(), equalTo("span")) + assertThat(spanNode.attr("class"), equalTo("linked-element not-loaded")) + assertThat(spanNode.attr("title"), equalTo("KSK@gpl.png")) + assertThat(spanNode.hasAttr("style"), equalTo(false)) + assertThat(spanNode.children().isEmpty(), equalTo(true)) + } @Test fun `filter can render linked images`() { - val html = filter.format(null, LinkedElement("KSK@gpl.png"), emptyMap()) as String - val linkNode = Jsoup.parseBodyFragment(html).body().child(0) - assertThat(linkNode.nodeName(), `is`("a")) - assertThat(linkNode.attr("href"), `is`("/KSK@gpl.png")) - val spanNode = linkNode.child(0) - assertThat(spanNode.nodeName(), `is`("span")) - assertThat(spanNode.attr("class"), `is`("linked-element")) - assertThat(spanNode.attr("title"), `is`("KSK@gpl.png")) - assertThat(spanNode.attr("style"), `is`("background-image: url('/KSK@gpl.png')")) + val html = filter.format(null, LinkedElement("KSK@gpl.png", properties = mapOf("type" to "image")), emptyMap()) as String + val outerSpanNode = Jsoup.parseBodyFragment(html).body().child(0) + assertThat(outerSpanNode.nodeName(), equalTo("span")) + assertThat(outerSpanNode.attr("class"), equalTo("linked-element loaded")) + assertThat(outerSpanNode.attr("title"), equalTo("KSK@gpl.png")) + val linkNode = outerSpanNode.child(0) + assertThat(linkNode.nodeName(), equalTo("a")) + assertThat(linkNode.attr("href"), equalTo("/KSK@gpl.png")) + val innerSpanNode = linkNode.child(0) + assertThat(innerSpanNode.attr("style"), equalTo("background-image: url('/KSK@gpl.png')")) + } + + @Test + fun `filter can render HTML pages`() { + val html = filter.format(null, LinkedElement("KSK@gpl.html", properties = mapOf("type" to "html", "title" to "Page Title", "description" to "This is the description.")), emptyMap()) as String + val outerSpanNode = Jsoup.parseBodyFragment(html).body().child(0) + assertThat(outerSpanNode.nodeName(), equalTo("span")) + assertThat(outerSpanNode.attr("class"), equalTo("linked-element loaded")) + assertThat(outerSpanNode.attr("title"), equalTo("KSK@gpl.html")) + val linkNode = outerSpanNode.child(0) + assertThat(linkNode.nodeName(), equalTo("a")) + assertThat(linkNode.attr("href"), equalTo("/KSK@gpl.html")) + val divNodes = linkNode.children() + assertThat(divNodes.map(Element::nodeName), contains("div", "div")) + assertThat(divNodes.map { it.attr("class") }, contains("heading", "description")) + assertThat(divNodes.map(Element::text), contains("Page Title", "This is the description.")) + } + + @Test + fun `render filter can be created by guice`() { + val injector = Guice.createInjector(TemplateContextFactory::class.isProvidedByMock()) + assertThat(injector.getInstance(), notNullValue()) } }