X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FRenderFilterTest.java;fp=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FRenderFilterTest.java;h=a600cdd2b25215d36ed3bc0ce925982132eb0e4d;hb=5777a17f983636923bc2231daec8d0383955d1f5;hp=0000000000000000000000000000000000000000;hpb=616d826774d0ac43e1152ec6a4f5c3c198b95483;p=Sone.git diff --git a/src/test/java/net/pterodactylus/sone/template/RenderFilterTest.java b/src/test/java/net/pterodactylus/sone/template/RenderFilterTest.java new file mode 100644 index 0000000..a600cdd --- /dev/null +++ b/src/test/java/net/pterodactylus/sone/template/RenderFilterTest.java @@ -0,0 +1,172 @@ +package net.pterodactylus.sone.template; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import net.pterodactylus.sone.core.Core; +import net.pterodactylus.sone.data.Album; +import net.pterodactylus.sone.data.Post; +import net.pterodactylus.sone.data.Profile; +import net.pterodactylus.sone.data.Sone; +import net.pterodactylus.sone.text.AlbumPart; +import net.pterodactylus.sone.text.FreenetLinkPart; +import net.pterodactylus.sone.text.LinkPart; +import net.pterodactylus.sone.text.Part; +import net.pterodactylus.sone.text.PlainTextPart; +import net.pterodactylus.sone.text.PostPart; +import net.pterodactylus.sone.text.SonePart; +import net.pterodactylus.util.template.HtmlFilter; +import net.pterodactylus.util.template.TemplateContext; +import net.pterodactylus.util.template.TemplateContextFactory; + +import com.google.common.collect.ImmutableMap; +import org.junit.Before; +import org.junit.Test; + +/** + * Unit test for {@link RenderFilter}. + * + * @author David ‘Bombe’ Roden + */ +public class RenderFilterTest { + + private static final Map EMPTY_MAP = Collections.emptyMap(); + private final Core core = mock(Core.class); + private final TemplateContextFactory templateContextFactory = new TemplateContextFactory(); + private final RenderFilter renderFilter = new RenderFilter(core, templateContextFactory); + private final TemplateContext templateContext = new TemplateContext(); + private final Sone sone = mock(Sone.class); + private final Post post = mock(Post.class); + + @Before + public void setupTemplateContextFactory() { + templateContextFactory.addFilter("html", new HtmlFilter()); + } + + @Before + public void setupSone() { + when(sone.getId()).thenReturn("sone-id"); + when(sone.getName()).thenReturn("SoneName"); + when(sone.getProfile()).thenReturn(new Profile(sone)); + } + + @Before + public void setupPost() { + when(post.getId()).thenReturn("post-id"); + when(post.getSone()).thenReturn(sone); + } + + @Test + public void filterCanRenderPlainText() { + List parts = Arrays.asList(new PlainTextPart("")); + assertThat(renderFilter.format(templateContext, parts, EMPTY_MAP), is((Object) "<Text>")); + } + + @Test + public void filterCanRenderMultiplePlainTextParts() { + List parts = Arrays.asList(new PlainTextPart(""), new PlainTextPart("")); + assertThat(renderFilter.format(templateContext, parts, EMPTY_MAP), is((Object) "<Text><Foo>")); + } + + @Test + public void filterCanRenderUntrustedFreenetLinks() { + List parts = Arrays.asList(new FreenetLinkPart("SSK@foo,bar/baz", "foo/baz", false)); + assertThat(renderFilter.format(templateContext, parts, EMPTY_MAP), + is((Object) "foo/baz")); + } + + @Test + public void filterCanRenderTrustedFreenetLinks() { + List parts = Arrays.asList(new FreenetLinkPart("SSK@foo,bar/baz", "foo/baz", true)); + assertThat(renderFilter.format(templateContext, parts, EMPTY_MAP), + is((Object) "foo/baz")); + } + + @Test + public void filterCanRenderInternetLinks() { + List parts = Arrays.asList(new LinkPart("http://link.sone", "link.sone")); + assertThat(renderFilter.format(templateContext, parts, EMPTY_MAP), + is((Object) "link.sone")); + } + + @Test + public void filterCanRenderSonePartsForUnknownSones() { + Sone unknownSone = mock(Sone.class); + when(unknownSone.getId()).thenReturn("sone-id"); + List parts = Arrays.asList(new SonePart(unknownSone)); + assertThat(renderFilter.format(templateContext, parts, EMPTY_MAP), + is((Object) "sone-id")); + } + + @Test + public void filterCanRenderSonePartsForKnownSones() { + List parts = Arrays.asList(new SonePart(sone)); + assertThat(renderFilter.format(templateContext, parts, EMPTY_MAP), + is((Object) "SoneName")); + } + + @Test + public void filterCanRenderPostParts() { + when(post.getText()).thenReturn("123456789012345678901234567890"); + List parts = Arrays.asList(new PostPart(post)); + assertThat(renderFilter.format(templateContext, parts, EMPTY_MAP), + is((Object) "12345678901234567890…")); + } + + @Test + public void filterCanRenderPostPartsWithoutBreakingWords() { + when(post.getText()).thenReturn("12345 12345 12345 12345 12345 12345"); + List parts = Arrays.asList(new PostPart(post)); + assertThat(renderFilter.format(templateContext, parts, EMPTY_MAP), + is((Object) "12345 12345 12345…")); + } + + @Test + public void filterCanRenderPostPartsWithShortText() { + when(post.getText()).thenReturn("12345 12345"); + List parts = Arrays.asList(new PostPart(post)); + assertThat(renderFilter.format(templateContext, parts, EMPTY_MAP), + is((Object) "12345 12345")); + } + + @Test + public void filterCanRenderPostPartsWithOldPostIds() { + when(post.getText()).thenReturn("12345 12345"); + List parts = Arrays.asList(new PostPart(post, true)); + assertThat(renderFilter.format(templateContext, parts, EMPTY_MAP), + is((Object) "12345 12345")); + } + + @Test + public void filterCanRenderAlbumParts() { + Album album = mock(Album.class); + when(album.getId()).thenReturn("album-id"); + when(album.getTitle()).thenReturn("Title"); + when(album.getDescription()).thenReturn("Description"); + List parts = Arrays.asList(new AlbumPart(album)); + assertThat(renderFilter.format(templateContext, parts, EMPTY_MAP), + is((Object) "Title")); + } + + @Test + public void filterHonorsLength() { + List parts = Arrays.asList(new PlainTextPart("12345678901234567890")); + assertThat(renderFilter.format(templateContext, parts, ImmutableMap.of("length", "10")), + is((Object) "1234567890…")); + } + + @Test + public void filterHonorsCutOffLength() { + List parts = Arrays.asList(new PlainTextPart("12345678901234567890")); + assertThat(renderFilter.format(templateContext, parts, ImmutableMap.of("length", "10", "cut-off-length", "5")), + is((Object) "12345…")); + } + +}