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