View Javadoc
1   package com.atlassian.plugin.web.model;
2   
3   import com.atlassian.plugin.Plugin;
4   import com.atlassian.plugin.PluginAccessor;
5   import com.atlassian.plugin.web.renderer.RendererException;
6   import com.atlassian.plugin.web.renderer.WebPanelRenderer;
7   import junit.framework.TestCase;
8   
9   import java.io.IOException;
10  import java.io.StringWriter;
11  import java.io.Writer;
12  import java.util.Collections;
13  import java.util.Map;
14  
15  import static org.mockito.Matchers.eq;
16  import static org.mockito.Matchers.isA;
17  import static org.mockito.Matchers.isNull;
18  import static org.mockito.Matchers.same;
19  import static org.mockito.Mockito.doThrow;
20  import static org.mockito.Mockito.mock;
21  import static org.mockito.Mockito.when;
22  
23  public class EmbeddedTemplateWebPanelTest extends TestCase {
24      private PluginAccessor accessorMock;
25      private WebPanelRenderer rendererMock;
26      private Map<String, Object> emptyContext = Collections.emptyMap();
27  
28      @Override
29      protected void setUp() throws Exception {
30          accessorMock = mock(PluginAccessor.class);
31          rendererMock = mock(WebPanelRenderer.class);
32      }
33  
34      @Override
35      protected void tearDown() throws Exception {
36          accessorMock = null;
37          rendererMock = null;
38      }
39  
40      public void testWriteHtml() throws IOException {
41          EmbeddedTemplateWebPanel webPanel = newEmbeddedTemplateWebPanel(accessorMock, "static");
42  
43          StringWriter out = new StringWriter();
44          webPanel.writeHtml(out, Collections.<String, Object>emptyMap());
45          assertEquals("<body>", out.toString());
46      }
47  
48      public void testWriteHtmlErrorMessagesEscaped() throws IOException {
49          setMocksToThrowException(accessorMock, rendererMock);
50  
51          EmbeddedTemplateWebPanel webPanel = newEmbeddedTemplateWebPanel(accessorMock, "cheese");
52  
53          StringWriter out = new StringWriter();
54          webPanel.writeHtml(out, emptyContext);
55          assertEquals("Error rendering WebPanel: &lt;cheese&gt;\nTemplate contents: &lt;body&gt;", out.toString());
56      }
57  
58      public void testGetHtml() {
59          EmbeddedTemplateWebPanel webPanel = newEmbeddedTemplateWebPanel(accessorMock, "static");
60  
61          assertEquals("<body>", webPanel.getHtml(Collections.<String, Object>emptyMap()));
62      }
63  
64      public void testErrorMessagesEscaped() throws IOException {
65          setMocksToThrowException(accessorMock, rendererMock);
66  
67          EmbeddedTemplateWebPanel webPanel = newEmbeddedTemplateWebPanel(accessorMock, "cheese");
68  
69          assertEquals("Error rendering WebPanel: &lt;cheese&gt;\nTemplate contents: &lt;body&gt;", webPanel.getHtml(emptyContext));
70      }
71  
72      private void setMocksToThrowException(PluginAccessor accessorMock, WebPanelRenderer rendererMock) throws IOException {
73          WebPanelTestUtils.mockPluginAccessorReturning(accessorMock, rendererMock);
74  
75          when(rendererMock.getResourceType()).thenReturn("cheese");
76          doThrow(new RendererException("<cheese>")).when(rendererMock).renderFragment(isA(Writer.class), eq("<body>"), (Plugin) isNull(), same(emptyContext));
77      }
78  
79      public void testUnsupportedResourceType() {
80          when(rendererMock.getResourceType()).thenReturn("velocity");
81          WebPanelTestUtils.mockPluginAccessorReturning(accessorMock, rendererMock);
82  
83          EmbeddedTemplateWebPanel webPanel = newEmbeddedTemplateWebPanel(accessorMock, "unsupported-type");
84  
85          String result = webPanel.getHtml(emptyContext);
86          assertNotNull(result);
87          assertTrue(result.toLowerCase().contains("error"));
88      }
89  
90      private EmbeddedTemplateWebPanel newEmbeddedTemplateWebPanel(PluginAccessor accessorMock, String resourceType) {
91          EmbeddedTemplateWebPanel webPanel = new EmbeddedTemplateWebPanel(accessorMock);
92          webPanel.setResourceType(resourceType);
93          webPanel.setTemplateBody("<body>");
94          return webPanel;
95      }
96  }