X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FLinkedElementRenderFilterTest.kt;h=31bc4eb11506b9b2eff80207358b522a45fb9444;hp=c0c83b38c11e1e7ce6d08cdfe1208c775f1420ac;hb=03c29a3838e23ed0b9731ca4d84cf58038c30dfe;hpb=64127f2f691c8839757e831031a0e9c6fb702a2b diff --git a/src/test/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilterTest.kt b/src/test/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilterTest.kt index c0c83b3..31bc4eb 100644 --- a/src/test/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilterTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilterTest.kt @@ -1,12 +1,20 @@ package net.pterodactylus.sone.template +import com.google.inject.Guice import net.pterodactylus.sone.core.LinkedElement +import net.pterodactylus.sone.test.getInstance +import net.pterodactylus.sone.test.isProvidedByMock +import net.pterodactylus.util.template.ClassPathTemplateProvider import net.pterodactylus.util.template.HtmlFilter import net.pterodactylus.util.template.TemplateContextFactory import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers.`is` +import org.hamcrest.Matchers.contains +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.notNullValue import org.hamcrest.Matchers.nullValue import org.jsoup.Jsoup +import org.jsoup.nodes.Element import org.junit.Test /** @@ -18,6 +26,7 @@ class LinkedElementRenderFilterTest { init { templateContextFactory.addFilter("html", HtmlFilter()) + templateContextFactory.addProvider(ClassPathTemplateProvider(LinkedElementRenderFilter::class.java, "/templates/")) } private val filter = LinkedElementRenderFilter(templateContextFactory) @@ -28,26 +37,50 @@ class LinkedElementRenderFilterTest { } @Test - fun `filter renders loading animation for not loaded elements`() { - val html = filter.format(null, LinkedElement("KSK@gpl.png", loading = true), emptyMap()) as String + 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(), `is`("span")) - assertThat(spanNode.attr("class"), `is`("linked-element")) + assertThat(spanNode.attr("class"), `is`("linked-element not-loaded")) assertThat(spanNode.attr("title"), `is`("KSK@gpl.png")) - assertThat(spanNode.attr("style"), `is`("background-image: url('images/loading-animation.gif')")) + assertThat(spanNode.hasAttr("style"), `is`(false)) + assertThat(spanNode.children().isEmpty(), `is`(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) + 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(), `is`("span")) + assertThat(outerSpanNode.attr("class"), `is`("linked-element loaded")) + assertThat(outerSpanNode.attr("title"), `is`("KSK@gpl.png")) + val linkNode = outerSpanNode.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 innerSpanNode = linkNode.child(0) + assertThat(innerSpanNode.attr("style"), `is`("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"), `is`("linked-element loaded")) + assertThat(outerSpanNode.attr("title"), `is`("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()) } }