package sagan.blog.support;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.mockito.BDDMockito.given;
@RunWith(MockitoJUnitRunner.class)
public class BlogPostContentRendererTests {
private PostContentRenderer renderer;
@Mock
private MarkdownService markdownService;
@Before
public void setUp() throws Exception {
renderer = new PostContentRenderer(markdownService);
}
@Test
public void sendsContentToMarkdownRenderer() throws Exception {
given(markdownService.renderToHtml("CONTENT")).willReturn("RENDERED CONTENT");
assertThat(renderer.render("CONTENT"), equalTo("RENDERED CONTENT"));
}
@Test
public void rendersDecodedHtml() throws Exception {
String encoded =
"FIRST\n" + "<pre>!{iframe src=\"//www.youtube.com/embed/D6nJSyWB-xA\"}{/iframe}</pre>\n" + "SECOND\n"
+ "<pre>!{iframe src=\"//www.youtube.com/embed/jplkJIHPGos\"}{/iframe}</pre>\n" + "END";
String decoded =
"FIRST\n" + "<iframe src=\"//www.youtube.com/embed/D6nJSyWB-xA\"></iframe>\n" + "SECOND\n"
+ "<iframe src=\"//www.youtube.com/embed/jplkJIHPGos\"></iframe>\n" + "END";
given(markdownService.renderToHtml(encoded)).willReturn(encoded);
assertThat(renderer.render(encoded), equalTo(decoded));
}
@Test
public void rendersCallouts() throws Exception {
given(markdownService.renderToHtml("CONTENT")).willReturn("[callout title=Title]Callout body[/callout]");
assertThat(renderer.render("CONTENT"), equalTo("<div class=\"callout\">\n"
+ "<div class=\"callout-title\">Title</div>\n" + "Callout body\n" + "</div>"));
}
@Test
public void rendersMultipleCallouts() throws Exception {
given(markdownService.renderToHtml("CONTENT"))
.willReturn(
"[callout title=Title]Callout body[/callout] other content [callout title=Other Title]Other Callout body[/callout]");
assertThat(renderer.render("CONTENT"), equalTo("<div class=\"callout\">\n"
+ "<div class=\"callout-title\">Title</div>\n" + "Callout body\n" + "</div>" + " other content "
+ "<div class=\"callout\">\n" + "<div class=\"callout-title\">Other Title</div>\n"
+ "Other Callout body\n" + "</div>"));
}
}