View Javadoc

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