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 com.google.common.collect.ImmutableList;
8   import junit.framework.TestCase;
9   
10  import java.io.IOException;
11  import java.io.StringWriter;
12  import java.io.Writer;
13  import java.util.Collections;
14  import java.util.Map;
15  
16  import static org.mockito.Matchers.*;
17  import static org.mockito.Mockito.doThrow;
18  import static org.mockito.Mockito.mock;
19  import static org.mockito.Mockito.when;
20  
21  public class ResourceTemplateWebPanelTest extends TestCase
22  {
23      private static final String TEMPLATE_FILE_TEXT = "This <file> is used as web panel contents in unit tests.\n" +
24              "Do not change its contents.";
25  
26      private PluginAccessor accessorMock;
27      private WebPanelRenderer rendererMock;
28      private Plugin pluginMock;
29      private Map<String, Object> emptyContext = Collections.emptyMap();
30  
31      @Override
32      protected void setUp() throws Exception
33      {
34          accessorMock = mock(PluginAccessor.class);
35          rendererMock = mock(WebPanelRenderer.class);
36          pluginMock = mock(Plugin.class);
37          when(pluginMock.getClassLoader()).thenReturn(this.getClass().getClassLoader());
38      }
39  
40      @Override
41      protected void tearDown() throws Exception
42      {
43          accessorMock = null;
44          rendererMock = null;
45          pluginMock = null;
46      }
47  
48      public void testGetHtml()
49      {
50          when(accessorMock.getEnabledModulesByClass(WebPanelRenderer.class)).thenReturn(Collections.<WebPanelRenderer>emptyList());
51  
52          String resourceFilename = "ResourceTemplateWebPanelTest.txt";
53          String resourceType = "static";
54          final ResourceTemplateWebPanel webPanel = newResourceTemplateWebPanel(resourceFilename, resourceType);
55  
56          assertEquals(TEMPLATE_FILE_TEXT, webPanel.getHtml(Collections.<String, Object>emptyMap()));
57      }
58  
59      public void testWriteHtml() throws IOException
60      {
61          when(accessorMock.getEnabledModulesByClass(WebPanelRenderer.class)).thenReturn(Collections.<WebPanelRenderer>emptyList());
62  
63          ResourceTemplateWebPanel webPanel = newResourceTemplateWebPanel("ResourceTemplateWebPanelTest.txt", "static");
64  
65          StringWriter out = new StringWriter();
66          webPanel.writeHtml(out, emptyContext);
67          assertEquals(TEMPLATE_FILE_TEXT, out.toString());
68      }
69  
70      public void testErrorMessagesEscaped() throws IOException
71      {
72          WebPanelTestUtils.mockPluginAccessorReturning(accessorMock, rendererMock);
73          when(rendererMock.getResourceType()).thenReturn("cheese");
74  
75          doThrow(new RendererException("<cheese>")).when(rendererMock).render(eq("<filename>.txt"), same(pluginMock), same(emptyContext), isA(Writer.class));
76  
77          ResourceTemplateWebPanel webPanel = newResourceTemplateWebPanel("<filename>.txt", "cheese");
78          assertEquals("Error rendering WebPanel (&lt;filename&gt;.txt): &lt;cheese&gt;", webPanel.getHtml(emptyContext));
79      }
80  
81      public void testErrorMessagesEscapedInWriteHtml() throws IOException
82      {
83          WebPanelTestUtils.mockPluginAccessorReturning(accessorMock, rendererMock);
84          when(rendererMock.getResourceType()).thenReturn("cheese");
85          doThrow(new RendererException("<cheese>")).when(rendererMock).render(eq("<filename>.txt"), same(pluginMock), same(emptyContext), isA(Writer.class));
86  
87          ResourceTemplateWebPanel webPanel = newResourceTemplateWebPanel("<filename>.txt", "cheese");
88  
89          StringWriter out = new StringWriter();
90          webPanel.writeHtml(out, emptyContext);
91          assertEquals("Error rendering WebPanel (&lt;filename&gt;.txt): &lt;cheese&gt;", out.toString());
92      }
93  
94      public void testUnsupportedResourceType()
95      {
96          when(rendererMock.getResourceType()).thenReturn("velocity");
97          WebPanelTestUtils.mockPluginAccessorReturning(accessorMock, rendererMock);
98  
99          ResourceTemplateWebPanel webPanel = newResourceTemplateWebPanel("ResourceTemplateWebPanelTest.txt", "unsupported-type");
100 
101         String result = webPanel.getHtml(emptyContext);
102         assertEquals("Error rendering WebPanel (ResourceTemplateWebPanelTest.txt): No renderer found for resource type: unsupported-type", result);
103     }
104 
105     private ResourceTemplateWebPanel newResourceTemplateWebPanel(String resourceFilename, String resourceType)
106     {
107         final ResourceTemplateWebPanel webPanel = new ResourceTemplateWebPanel(accessorMock);
108         webPanel.setPlugin(pluginMock);
109         webPanel.setResourceType(resourceType);
110         webPanel.setResourceFilename(resourceFilename);
111         return webPanel;
112     }
113 }