View Javadoc

1   package com.atlassian.plugin.webresource;
2   
3   import static org.mockito.Mockito.mock;
4   import static org.mockito.Mockito.when;
5   
6   import com.atlassian.plugin.ModuleDescriptor;
7   import com.atlassian.plugin.Plugin;
8   import com.atlassian.plugin.PluginAccessor;
9   import com.atlassian.plugin.elements.ResourceDescriptor;
10  import com.atlassian.plugin.servlet.DownloadableResource;
11  
12  import org.mockito.Mock;
13  import org.mockito.MockitoAnnotations;
14  
15  import java.net.URI;
16  import java.util.ArrayList;
17  import java.util.Collections;
18  import java.util.List;
19  import java.util.Map;
20  import java.util.TreeMap;
21  
22  import junit.framework.TestCase;
23  
24  public class TestSingleBatchDownloadableResourceBuilder extends TestCase
25  {
26      public static final String MODULE_KEY = "test.plugin:webresources";
27      @Mock
28      private PluginAccessor mockPluginAccessor;
29      @Mock
30      private WebResourceUrlProvider mockWebResourceUrlProvider;
31      @Mock
32      private DownloadableResourceFinder mockResourceFinder;
33  
34      private Plugin plugin;
35      private WebResourceModuleDescriptor moduleDescriptor;
36      private SingleBatchDownloadableResourceBuilder builder;
37  
38      @Override
39      public void setUp() throws Exception
40      {
41          super.setUp();
42  
43          MockitoAnnotations.initMocks(this);
44          builder = new SingleBatchDownloadableResourceBuilder(mockPluginAccessor, mockWebResourceUrlProvider, mockResourceFinder);
45  
46          plugin = TestUtils.createTestPlugin("test.plugin", "1.0");
47      }
48  
49      @Override
50      public void tearDown() throws Exception
51      {
52          mockPluginAccessor = null;
53          mockWebResourceUrlProvider = null;
54          mockResourceFinder = null;
55          plugin = null;
56          moduleDescriptor = null;
57          builder = null;
58  
59          super.tearDown();
60      }
61  
62      public void testIsCacheSupported() throws Exception
63      {
64          final Map<String, String> queryParams = new TreeMap<String, String>();
65          queryParams.put("cache", "false");
66          final List<ResourceDescriptor> resourceDescriptors = TestUtils.createResourceDescriptors("webresources.css");
67          resourceDescriptors.add(TestUtils.createResourceDescriptor("webresources-nocache.css", queryParams));
68  
69          addModuleDescriptor(resourceDescriptors);
70  
71          final DownloadableResource resource = builder.parse("/download/batch/" + MODULE_KEY + "/test.plugin:webresources.css",
72              Collections.<String, String> emptyMap());
73          final BatchPluginResource batchResource = (BatchPluginResource) resource;
74          assertTrue(batchResource.isCacheSupported());
75  
76          final DownloadableResource resource2 = builder.parse("/download/batch/" + MODULE_KEY + "/test.plugin:webresources-nocache.css", queryParams);
77          final BatchPluginResource batchResource2 = (BatchPluginResource) resource2;
78          assertFalse(batchResource2.isCacheSupported());
79      }
80  
81      public void testParse() throws Exception
82      {
83          final List<ResourceDescriptor> resourceDescriptors = TestUtils.createResourceDescriptors("webresources.css");
84          addModuleDescriptor(resourceDescriptors);
85  
86          final DownloadableResource resource = builder.parse("/download/batch/" + MODULE_KEY + "/test.plugin:webresources.css",
87              Collections.<String, String> emptyMap());
88  
89          final BatchPluginResource batchResource = (BatchPluginResource) resource;
90          assertEquals("css", batchResource.getType());
91          assertEquals(MODULE_KEY, batchResource.getModuleCompleteKey());
92  
93          final Map<String, String> params = batchResource.getParams();
94  
95          assertEquals(0, params.size());
96      }
97  
98      public void testParseWithParams() throws Exception
99      {
100         final Map<String, String> queryParams = new TreeMap<String, String>();
101         queryParams.put("ieonly", "true");
102         queryParams.put("foo", "bar");
103 
104         final List<ResourceDescriptor> resourceDescriptors = new ArrayList<ResourceDescriptor>();
105         resourceDescriptors.add(TestUtils.createResourceDescriptor("webresources.css", queryParams));
106         addModuleDescriptor(resourceDescriptors);
107 
108         final DownloadableResource resource = builder.parse("/download/batch/" + MODULE_KEY + "/test.plugin:webresources.css", queryParams);
109         final BatchPluginResource batchResource = (BatchPluginResource) resource;
110         assertEquals("css", batchResource.getType());
111         assertEquals(MODULE_KEY, batchResource.getModuleCompleteKey());
112 
113         final Map<String, String> params = new TreeMap<String, String>();
114         params.put("ieonly", "true");
115         params.put("foo", "bar");
116 
117         assertEquals(params, batchResource.getParams());
118     }
119 
120     public void testParseWithParams2() throws Exception
121     {
122         final Map<String, String> queryParams = new TreeMap<String, String>();
123         queryParams.put("ieonly", "true");
124         queryParams.put("foo", "bar");
125 
126         final List<ResourceDescriptor> resourceDescriptors = new ArrayList<ResourceDescriptor>();
127         resourceDescriptors.add(TestUtils.createResourceDescriptor("webresources.css", queryParams));
128         addModuleDescriptor(resourceDescriptors);
129 
130         final DownloadableResource resource = builder.parse("/download/batch/" + MODULE_KEY + "/test.plugin:webresources.css", queryParams);
131         final BatchPluginResource batchResource = (BatchPluginResource) resource;
132         assertEquals("css", batchResource.getType());
133         assertEquals(MODULE_KEY, batchResource.getModuleCompleteKey());
134 
135         final Map<String, String> params = new TreeMap<String, String>();
136         params.put("ieonly", "true");
137         params.put("foo", "bar");
138 
139         assertEquals(params, batchResource.getParams());
140     }
141 
142     public void testParseWithParamsAndRandomPrefix() throws Exception
143     {
144         final Map<String, String> queryParams = new TreeMap<String, String>();
145         queryParams.put("ieonly", "true");
146         queryParams.put("foo", "bar");
147         final List<ResourceDescriptor> resourceDescriptors = new ArrayList<ResourceDescriptor>();
148         resourceDescriptors.add(TestUtils.createResourceDescriptor("webresources.css", queryParams));
149         addModuleDescriptor(resourceDescriptors);
150 
151         final DownloadableResource resource = builder.parse("/random/stuff/download/batch/" + MODULE_KEY + "/test.plugin:webresources.css",
152             queryParams);
153         final BatchPluginResource batchResource = (BatchPluginResource) resource;
154         assertEquals("css", batchResource.getType());
155         assertEquals(MODULE_KEY, batchResource.getModuleCompleteKey());
156 
157         final Map<String, String> params = new TreeMap<String, String>();
158         params.put("ieonly", "true");
159         params.put("foo", "bar");
160 
161         assertEquals(params, batchResource.getParams());
162     }
163 
164     public void testRoundTrip() throws Exception
165     {
166         final Map<String, String> params = new TreeMap<String, String>();
167         params.put("media", "print");
168 
169         final List<ResourceDescriptor> resourceDescriptors = new ArrayList<ResourceDescriptor>();
170         resourceDescriptors.add(TestUtils.createResourceDescriptor("webresources.js", params));
171 
172         addModuleDescriptor(resourceDescriptors);
173 
174         final String moduleKey = MODULE_KEY;
175         final BatchPluginResource batchResource = new BatchPluginResource(moduleKey, "js", params, Collections.<DownloadableResource> emptyList());
176         final URI uri = new URI(batchResource.getUrl());
177         final BatchPluginResource parsedBatchResource = (BatchPluginResource) builder.parse(uri.getPath(), params);
178         assertEquals(batchResource.getType(), parsedBatchResource.getType());
179         assertEquals(batchResource.getModuleCompleteKey(), parsedBatchResource.getModuleCompleteKey());
180         assertEquals(batchResource.getParams(), parsedBatchResource.getParams());
181         assertEquals(moduleKey + ".js", parsedBatchResource.getResourceName());
182     }
183 
184     public void testParseInvlaidUrlThrowsException()
185     {
186         try
187         {
188             builder.parse("/download/batch/blah.css", Collections.<String, String> emptyMap());
189             fail("Should have thrown exception for invalid url");
190         }
191         catch (final UrlParseException e)
192         {
193             //expected
194         }
195     }
196 
197 
198     private void addModuleDescriptor(List<ResourceDescriptor> resourceDescriptors)
199     {
200         moduleDescriptor = TestUtils.createWebResourceModuleDescriptor(MODULE_KEY, plugin, resourceDescriptors);
201         when(mockPluginAccessor.getEnabledPluginModule(MODULE_KEY)).thenReturn((ModuleDescriptor) moduleDescriptor);
202 
203         for (ResourceDescriptor resourceDescriptor : resourceDescriptors)
204         {
205             // We don't really care what the resource is as long as the finder doesn't return null.
206             DownloadableResource downloadableResourceInBatch = mock(DownloadableResource.class);
207             when(mockResourceFinder.find(MODULE_KEY, resourceDescriptor.getName())).thenReturn(downloadableResourceInBatch);
208         }
209     }
210 }