diff --git a/lib/build.gradle b/lib/build.gradle index 0949c23..cdfaa2b 100644 --- a/lib/build.gradle +++ b/lib/build.gradle @@ -31,6 +31,15 @@ dependencies { // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' + /** + * Mockito + */ + // https://mvnrepository.com/artifact/org.mockito/mockito-core + testImplementation 'org.mockito:mockito-core:4.11.0' + + // https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter + testImplementation 'org.mockito:mockito-junit-jupiter:4.11.0' + /** * Test Logging */ diff --git a/lib/src/test/groovy/com/jessebrault/ssg/specialpage/GspSpecialPageRendererTests.groovy b/lib/src/test/groovy/com/jessebrault/ssg/specialpage/GspSpecialPageRendererTests.groovy index 1a6b736..f942508 100644 --- a/lib/src/test/groovy/com/jessebrault/ssg/specialpage/GspSpecialPageRendererTests.groovy +++ b/lib/src/test/groovy/com/jessebrault/ssg/specialpage/GspSpecialPageRendererTests.groovy @@ -1,16 +1,23 @@ package com.jessebrault.ssg.specialpage -import com.jessebrault.ssg.part.GspPartRenderer import com.jessebrault.ssg.part.Part +import com.jessebrault.ssg.part.PartRenderer import com.jessebrault.ssg.part.PartType -import com.jessebrault.ssg.text.MarkdownFrontMatterGetter -import com.jessebrault.ssg.text.MarkdownTextRenderer +import com.jessebrault.ssg.text.FrontMatterGetter import com.jessebrault.ssg.text.Text +import com.jessebrault.ssg.text.TextRenderer import com.jessebrault.ssg.text.TextType import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.ExtendWith +import org.mockito.Mock +import org.mockito.junit.jupiter.MockitoExtension import static org.junit.jupiter.api.Assertions.assertEquals +import static org.mockito.ArgumentMatchers.any +import static org.mockito.ArgumentMatchers.argThat +import static org.mockito.Mockito.when +@ExtendWith(MockitoExtension) class GspSpecialPageRendererTests { private final SpecialPageRenderer renderer = new GspSpecialPageRenderer() @@ -23,22 +30,31 @@ class GspSpecialPageRendererTests { } @Test - void rendersPartWithNoBinding() { - def part = new Part('test', new PartType(['.gsp'], new GspPartRenderer()), 'Hello, World!') + void rendersPartWithNoBinding(@Mock PartRenderer partRenderer) { + when(partRenderer.render(any(), any(), any())).thenReturn('Hello, World!') + def partType = new PartType([], partRenderer) + def part = new Part('test', partType , '') + def r = this.renderer.render("<%= parts['test'].render() %>", [], [part], [:]) assertEquals('Hello, World!', r) } @Test - void rendersPartWithBinding() { - def part = new Part('test', new PartType(['.gsp'], new GspPartRenderer()), "<%= binding['greeting'] %>") + void rendersPartWithBinding(@Mock PartRenderer partRenderer) { + when(partRenderer.render(any(), argThat { Map m -> m.get('greeting') == 'Hello, World!'}, any())).thenReturn('Hello, World!') + def partType = new PartType([], partRenderer) + def part = new Part('test', partType, '') + def r = this.renderer.render("<%= parts['test'].render([greeting: 'Hello, World!'])", [], [part], [:]) assertEquals('Hello, World!', r) } @Test - void rendersText() { - def text = new Text('**Hello, World!**', 'test', new TextType(['.gsp'], new MarkdownTextRenderer(), new MarkdownFrontMatterGetter())) + void rendersText(@Mock TextRenderer textRenderer, @Mock FrontMatterGetter frontMatterGetter) { + when(textRenderer.render(any(), any())).thenReturn('
Hello, World!
\n') + def textType = new TextType([], textRenderer, frontMatterGetter) + def text = new Text('', 'test', textType) + def r = this.renderer.render("<%= texts.find { it.path == 'test' }.render() %>", [text], [], [:]) assertEquals('Hello, World!
\n', r) } diff --git a/lib/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy b/lib/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy index ffc538a..356cfa9 100644 --- a/lib/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy +++ b/lib/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy @@ -1,37 +1,52 @@ package com.jessebrault.ssg.template -import com.jessebrault.ssg.part.GspPartRenderer import com.jessebrault.ssg.part.Part +import com.jessebrault.ssg.part.PartRenderer import com.jessebrault.ssg.part.PartType import com.jessebrault.ssg.text.FrontMatter import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.ExtendWith +import org.mockito.Mock +import org.mockito.junit.jupiter.MockitoExtension import static org.junit.jupiter.api.Assertions.assertEquals +import static org.mockito.ArgumentMatchers.any +import static org.mockito.ArgumentMatchers.argThat +import static org.mockito.Mockito.when +@ExtendWith(MockitoExtension) class GspTemplateRendererTests { private final TemplateRenderer renderer = new GspTemplateRenderer() @Test - void rendersPartWithNoBinding() { + void rendersPartWithNoBinding(@Mock PartRenderer partRenderer) { def template = new Template( "<%= parts['test'].render() %>", null, null ) - def part = new Part('test', new PartType(['.gsp'], new GspPartRenderer()), 'Hello, World!') + + when(partRenderer.render(any(), any(), any())).thenReturn('Hello, World!') + def partType = new PartType([], partRenderer) + def part = new Part('test', partType, null) + def r = this.renderer.render(template, new FrontMatter([:]), '', [part], [:]) assertEquals('Hello, World!', r) } @Test - void rendersPartWithBinding() { + void rendersPartWithBinding(@Mock PartRenderer partRenderer) { def template = new Template( "<%= parts['greeting'].render([person: 'World']) %>", null, null ) - def part = new Part('greeting', new PartType(['.gsp'], new GspPartRenderer()), 'Hello, $binding.person!') + + when(partRenderer.render(any(), argThat { Map m -> m.get('person') == 'World' }, any())).thenReturn('Hello, World!') + def partType = new PartType([], partRenderer) + def part = new Part('greeting', partType, null) + def r = this.renderer.render(template, new FrontMatter([:]), '', [part], [:]) assertEquals('Hello, World!', r) }