X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FParserFilterTest.java;fp=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FParserFilterTest.java;h=268a3faa6f29b63073d77df850e0c2b22092e8a1;hb=5777a17f983636923bc2231daec8d0383955d1f5;hp=0000000000000000000000000000000000000000;hpb=616d826774d0ac43e1152ec6a4f5c3c198b95483;p=Sone.git
diff --git a/src/test/java/net/pterodactylus/sone/template/ParserFilterTest.java b/src/test/java/net/pterodactylus/sone/template/ParserFilterTest.java
new file mode 100644
index 0000000..268a3fa
--- /dev/null
+++ b/src/test/java/net/pterodactylus/sone/template/ParserFilterTest.java
@@ -0,0 +1,83 @@
+package net.pterodactylus.sone.template;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.empty;
+import static org.hamcrest.Matchers.is;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import net.pterodactylus.sone.core.Core;
+import net.pterodactylus.sone.data.Sone;
+import net.pterodactylus.sone.text.Part;
+import net.pterodactylus.sone.text.PlainTextPart;
+import net.pterodactylus.sone.text.SoneTextParser;
+import net.pterodactylus.sone.text.SoneTextParserContext;
+import net.pterodactylus.util.template.TemplateContext;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableMap;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+
+/**
+ * Unit test for {@link ParserFilter}.
+ *
+ * @author David âBombeâ Roden
+ */
+public class ParserFilterTest {
+
+ private final Core core = mock(Core.class);
+ private final SoneTextParser soneTextParser = mock(SoneTextParser.class);
+ private final ParserFilter parserFilter = new ParserFilter(core, soneTextParser);
+ private final TemplateContext templateContext = new TemplateContext();
+ private final Sone sone = mock(Sone.class);
+
+ @Test
+ public void filterReturnsPartsReturnedByParser() throws IOException {
+ List parts = setupSoneTextParser();
+ assertThat(parserFilter.format(templateContext, "Text", Collections.emptyMap()), is((Object) parts));
+ }
+
+ private List setupSoneTextParser() throws IOException {
+ List parts = Arrays.asList(new PlainTextPart("Text"));
+ when(soneTextParser.parse(any(SoneTextParserContext.class), any(StringReader.class))).thenReturn(parts);
+ return parts;
+ }
+
+ @Test
+ public void filterUsesGivenSone() throws IOException {
+ List parts = setupSoneTextParser();
+ assertThat(parserFilter.format(templateContext, "Text", ImmutableMap.of("sone", sone)), is((Object) parts));
+ verifyThatContextContainsCorrectSone();
+ }
+
+ @Test
+ public void filterGetsCorrectSoneFromCore() throws IOException {
+ when(core.getSone("sone-id")).thenReturn(Optional.of(sone));
+ List parts = setupSoneTextParser();
+ assertThat(parserFilter.format(templateContext, "Text", ImmutableMap.of("sone", "sone-id")), is((Object) parts));
+ verifyThatContextContainsCorrectSone();
+ }
+
+ private void verifyThatContextContainsCorrectSone() throws IOException {
+ ArgumentCaptor contextArgumentCaptor = ArgumentCaptor.forClass(SoneTextParserContext.class);
+ verify(soneTextParser).parse(contextArgumentCaptor.capture(), any(StringReader.class));
+ assertThat(contextArgumentCaptor.getValue().getPostingSone(), is(sone));
+ }
+
+ @Test
+ public void filterReturnsEmptyCollectionOnExceptionInParser() throws IOException {
+ when(soneTextParser.parse(any(SoneTextParserContext.class), any(StringReader.class))).thenThrow(IOException.class);
+ assertThat((Collection) parserFilter.format(templateContext, "Text", Collections.emptyMap()), empty());
+ }
+
+}