View Javadoc

1   package com.atlassian.plugin.webresource;
2   
3   import com.atlassian.plugin.Plugin;
4   import com.atlassian.plugin.servlet.DownloadableResource;
5   import junit.framework.TestCase;
6   import org.dom4j.DocumentException;
7   import org.mockito.Mock;
8   import org.mockito.MockitoAnnotations;
9   
10  import java.util.ArrayList;
11  import java.util.Arrays;
12  import java.util.Collections;
13  import java.util.List;
14  
15  import static org.mockito.Mockito.mock;
16  import static org.mockito.Mockito.verify;
17  import static org.mockito.Mockito.when;
18  
19  public class TestContextBatchSubResourceBuilder extends TestCase
20  {
21      @Mock
22      private DefaultResourceDependencyResolver mockDependencyResolver;
23      @Mock
24      private DownloadableResourceFinder mockResourceFinder;
25  
26      private ContextBatchSubResourceBuilder builder;
27      private Plugin testPlugin;
28  
29      @Override
30      public void setUp() throws Exception
31      {
32          super.setUp();
33  
34          MockitoAnnotations.initMocks(this);
35          builder = new ContextBatchSubResourceBuilder(mockDependencyResolver, mockResourceFinder);
36  
37          testPlugin = TestUtils.createTestPlugin();
38      }
39  
40      @Override
41      public void tearDown() throws Exception
42      {
43          mockDependencyResolver = null;
44          mockResourceFinder = null;
45  
46          builder = null;
47          testPlugin = null;
48  
49          super.tearDown();
50      }
51  
52      public void testMatches()
53      {
54          assertTrue(builder.matches("/download/contextbatch/css/contexta/images/foo.png"));
55          assertFalse(builder.matches("/download/contextbatch/css/contexta/batch.js"));
56          assertFalse(builder.matches("/download/superbatch/css/batch.js"));
57      }
58  
59      public void testParsePluginResource() throws UrlParseException
60      {
61          String path = "/download/contextbatch/css/contexta/images/foo.png";
62  
63          String moduleKey = "contextb-resources";
64          WebResourceModuleDescriptor moduleDescriptor = TestUtils.createWebResourceModuleDescriptor(moduleKey, testPlugin);
65          when(mockDependencyResolver.getDependenciesInContext("contexta")).thenReturn(Arrays.asList(moduleDescriptor));
66          DownloadableResource imageResource = mock(DownloadableResource.class);
67          when(mockResourceFinder.find(moduleKey, "images/foo.png")).thenReturn(imageResource);
68  
69          assertTrue(builder.matches(path));
70          DownloadableResource resource = builder.parse(path, Collections.<String, String>emptyMap());
71          assertSame(imageResource, resource);
72  
73          verify(mockResourceFinder).find(moduleKey, "images/foo.png");
74      }
75  
76      public void testParsePluginResourceAndResolve() throws UrlParseException, DocumentException
77      {
78          String path = "/download/contextbatch/css/contextb/images/foo.png";
79  
80          String moduleKey = "contextb-resources";
81          DownloadableResource imageResource = mock(DownloadableResource.class);
82          when(mockResourceFinder.find(moduleKey, "images/foo.png")).thenReturn(imageResource);
83  
84          WebResourceModuleDescriptor moduleDescriptor = TestUtils.createWebResourceModuleDescriptor(moduleKey, testPlugin);
85          List<WebResourceModuleDescriptor> contextDependencies = new ArrayList<WebResourceModuleDescriptor>();
86          contextDependencies.add(moduleDescriptor);
87          when(mockDependencyResolver.getDependenciesInContext("contextb")).thenReturn(contextDependencies);
88  
89          DownloadableResource resource = builder.parse(path, Collections.<String, String>emptyMap());
90          assertSame(imageResource, resource);
91  //        BatchSubResource batchResource = (BatchSubResource) resource;
92  //        assertEquals("images/foo.png", batchResource.getResourceName());
93  ////        assertFalse(batchResource.isEmpty());
94  
95          verify(mockResourceFinder).find(moduleKey, "images/foo.png");
96      }
97  
98      public void testParsePluginResourceAndResolveMultipleContexts() throws UrlParseException, DocumentException
99      {
100         String path = "/download/contextbatch/css/contexta,contextb/images/foo.png";
101 
102         String moduleKey = "contextb-resources";
103         DownloadableResource imageResource = mock(DownloadableResource.class);
104         when(mockResourceFinder.find(moduleKey, "images/foo.png")).thenReturn(imageResource);
105 
106         WebResourceModuleDescriptor moduleDescriptor = TestUtils.createWebResourceModuleDescriptor(moduleKey, testPlugin);
107         List<WebResourceModuleDescriptor> contextDependencies = new ArrayList<WebResourceModuleDescriptor>();
108         contextDependencies.add(moduleDescriptor);
109         when(mockDependencyResolver.getDependenciesInContext("contextb")).thenReturn(contextDependencies);
110         when(mockDependencyResolver.getDependenciesInContext("contexta")).thenReturn(Collections.<WebResourceModuleDescriptor>emptyList());
111 
112         DownloadableResource resource = builder.parse(path, Collections.<String, String>emptyMap());
113         assertSame(imageResource, resource);
114 
115         verify(mockResourceFinder).find(moduleKey, "images/foo.png");
116     }
117 }