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