X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;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()); + } + +}