1 package com.atlassian.plugin.web.model;
2
3 import com.atlassian.plugin.PluginAccessor;
4 import com.atlassian.plugin.web.renderer.RendererException;
5 import com.atlassian.plugin.web.renderer.StaticWebPanelRenderer;
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.util.Collections;
13 import java.util.Map;
14
15 import static org.mockito.Mockito.*;
16
17 public class AbstractWebPanelTest extends TestCase
18 {
19 public void testStaticGetHtml() throws IOException
20 {
21 AbstractWebPanel panel = new MyAbstractWebPanel();
22 panel.setResourceType(StaticWebPanelRenderer.RESOURCE_TYPE);
23
24 assertEquals("cheese", panel.getHtml(Collections.<String, Object>emptyMap()));
25 }
26
27 public void testStaticWriteHtml() throws IOException
28 {
29 AbstractWebPanel panel = new MyAbstractWebPanel();
30 panel.setResourceType(StaticWebPanelRenderer.RESOURCE_TYPE);
31
32 StringWriter out = new StringWriter();
33 panel.writeHtml(out, Collections.<String, Object>emptyMap());
34 assertEquals("cheese", out.toString());
35 }
36
37 public void testUnsupportedRendererType()
38 {
39 final PluginAccessor accessorMock = mock(PluginAccessor.class);
40 when(accessorMock.getEnabledModulesByClass(WebPanelRenderer.class)).thenReturn(Collections.<WebPanelRenderer>emptyList());
41
42 AbstractWebPanel panel = new AbstractWebPanel(accessorMock)
43 {
44 public String getHtml(Map<String, Object> context)
45 {
46 try
47 {
48 getRenderer();
49 fail();
50 }
51 catch (RendererException re)
52 {
53
54 }
55 return null;
56 }
57 };
58
59 panel.setResourceType("unsupported-type");
60 panel.getHtml(null);
61 }
62
63 public void testSupportedRendererType()
64 {
65 final PluginAccessor accessorMock = mock(PluginAccessor.class);
66 final WebPanelRenderer velocityRenderer = mock(WebPanelRenderer.class);
67 when(velocityRenderer.getResourceType()).thenReturn("velocity");
68 final WebPanelRenderer unsupportedRenderer = mock(WebPanelRenderer.class);
69 when(unsupportedRenderer.getResourceType()).thenReturn("unsupported-type");
70 when(accessorMock.getEnabledModulesByClass(WebPanelRenderer.class)).thenReturn(ImmutableList.of(unsupportedRenderer, velocityRenderer));
71
72 AbstractWebPanel panel = new AbstractWebPanel(accessorMock)
73 {
74 public String getHtml(Map<String, Object> context)
75 {
76 final WebPanelRenderer webPanelRenderer = getRenderer();
77 assertNotNull(webPanelRenderer);
78 assertEquals(velocityRenderer, webPanelRenderer);
79 return null;
80 }
81 };
82
83 panel.setResourceType("velocity");
84 panel.getHtml(null);
85 }
86
87 private static class MyAbstractWebPanel extends AbstractWebPanel
88 {
89 public MyAbstractWebPanel()
90 {
91 super(null);
92 }
93
94 public String getHtml(Map<String, Object> context)
95 {
96 final WebPanelRenderer renderer = getRenderer();
97 assertEquals(renderer, StaticWebPanelRenderer.RENDERER);
98 return "cheese";
99 }
100 }
101 }