package org.jtwig.render; import org.jtwig.environment.Environment; import org.jtwig.escape.EscapeEngine; import org.jtwig.escape.HtmlEscapeEngine; import org.jtwig.model.tree.Node; import org.jtwig.renderable.Renderable; import org.jtwig.resource.metadata.ResourceMetadata; import org.jtwig.resource.reference.ResourceReference; import org.jtwig.value.WrappedCollection; import org.jtwig.value.context.ValueContext; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertSame; import static org.mockito.Mockito.*; public class RenderResourceServiceTest { private final Environment environment = mock(Environment.class, RETURNS_DEEP_STUBS); private RenderResourceService underTest = new RenderResourceService(); private RenderRequest renderRequest = mock(RenderRequest.class, RETURNS_DEEP_STUBS); @Before public void setUp() throws Exception { when(renderRequest.getEnvironment()).thenReturn(environment); } @Test public void renderHappy() throws Exception { EscapeEngine initialEscapeMode = HtmlEscapeEngine.instance(); Node node = mock(Node.class); ResourceReference resource = mock(ResourceReference.class); Renderable expectedRenderable = mock(Renderable.class); RenderResourceRequest renderResourceRequest = mock(RenderResourceRequest.class, RETURNS_DEEP_STUBS); ResourceMetadata resourceMetadata = mock(ResourceMetadata.class); when(environment.getParser().parse(environment, resource)).thenReturn(node); when(environment.getEscapeEnvironment().getInitialEscapeEngine()).thenReturn(initialEscapeMode); when(renderResourceRequest.getResource()).thenReturn(resource); when(renderResourceRequest.isNewBlockContext()).thenReturn(false); when(renderResourceRequest.isNewValueContext()).thenReturn(true); when(renderResourceRequest.getIncludeModel()).thenReturn(WrappedCollection.empty()); when(renderRequest.getRenderContext().getCurrent(ValueContext.class)).thenReturn(mock(ValueContext.class)); when(environment.getRenderEnvironment().getRenderNodeService().render(renderRequest, node)) .thenReturn(expectedRenderable); when(environment.getResourceEnvironment().getResourceService().loadMetadata(resource)).thenReturn(resourceMetadata); when(resourceMetadata.exists()).thenReturn(true); Renderable renderable = underTest.render(renderRequest, renderResourceRequest); assertSame(expectedRenderable, renderable); } @Test public void renderWithNewBlockContext() throws Exception { EscapeEngine initialEscapeMode = HtmlEscapeEngine.instance(); Node node = mock(Node.class); ResourceReference resource = mock(ResourceReference.class); Renderable expectedRenderable = mock(Renderable.class); RenderResourceRequest renderResourceRequest = mock(RenderResourceRequest.class, RETURNS_DEEP_STUBS); when(renderRequest.getEnvironment().getParser().parse(environment, resource)).thenReturn(node); when(renderRequest.getEnvironment().getEscapeEnvironment().getInitialEscapeEngine()).thenReturn(initialEscapeMode); when(renderRequest.getRenderContext().getCurrent(ValueContext.class)).thenReturn(mock(ValueContext.class)); when(renderResourceRequest.getResource()).thenReturn(resource); when(renderResourceRequest.isNewBlockContext()).thenReturn(true); when(renderResourceRequest.isNewValueContext()).thenReturn(true); when(renderResourceRequest.getIncludeModel()).thenReturn(WrappedCollection.empty()); when(renderRequest.getEnvironment().getRenderEnvironment().getRenderNodeService().render(renderRequest, node)) .thenReturn(expectedRenderable); Renderable renderable = underTest.render(renderRequest, renderResourceRequest); assertSame(expectedRenderable, renderable); } @Test public void renderWithOldValueContext() throws Exception { EscapeEngine initialEscapeMode = HtmlEscapeEngine.instance(); Node node = mock(Node.class); ResourceReference resource = mock(ResourceReference.class); Renderable expectedRenderable = mock(Renderable.class); RenderResourceRequest renderResourceRequest = mock(RenderResourceRequest.class, RETURNS_DEEP_STUBS); ValueContext valueContext = mock(ValueContext.class, "Parent Context"); when(renderRequest.getEnvironment().getParser().parse(environment, resource)).thenReturn(node); when(renderRequest.getEnvironment().getEscapeEnvironment().getInitialEscapeEngine()).thenReturn(initialEscapeMode); when(renderResourceRequest.getResource()).thenReturn(resource); when(renderResourceRequest.isNewBlockContext()).thenReturn(true); when(renderResourceRequest.isNewValueContext()).thenReturn(false); when(renderResourceRequest.getIncludeModel()).thenReturn(WrappedCollection.empty()); when(renderRequest.getEnvironment().getRenderEnvironment().getRenderNodeService().render(renderRequest, node)) .thenReturn(expectedRenderable); when(renderRequest.getRenderContext().getCurrent(ValueContext.class)).thenReturn(valueContext); Renderable renderable = underTest.render(renderRequest, renderResourceRequest); assertSame(expectedRenderable, renderable); } }