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
67 assertTrue(builder.matches(path));
68 DownloadableResource resource = builder.parse(path, Collections.<String, String>emptyMap());
69 BatchSubResource batchResource = (BatchSubResource) resource;
70 assertEquals("images/foo.png", batchResource.getResourceName());
71 assertTrue(batchResource.isEmpty());
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 BatchSubResource batchResource = (BatchSubResource) resource;
91 assertEquals("images/foo.png", batchResource.getResourceName());
92 assertFalse(batchResource.isEmpty());
93
94 verify(mockResourceFinder).find(moduleKey, "images/foo.png");
95 }
96
97 public void testParsePluginResourceAndResolveMultipleContexts() throws UrlParseException, DocumentException
98 {
99 String path = "/download/contextbatch/css/contexta,contextb/images/foo.png";
100
101 String moduleKey = "contextb-resources";
102 DownloadableResource imageResource = mock(DownloadableResource.class);
103 when(mockResourceFinder.find(moduleKey, "images/foo.png")).thenReturn(imageResource);
104
105 WebResourceModuleDescriptor moduleDescriptor = TestUtils.createWebResourceModuleDescriptor(moduleKey, testPlugin);
106 List<WebResourceModuleDescriptor> contextDependencies = new ArrayList<WebResourceModuleDescriptor>();
107 contextDependencies.add(moduleDescriptor);
108 when(mockDependencyResolver.getDependenciesInContext("contextb")).thenReturn(contextDependencies);
109 when(mockDependencyResolver.getDependenciesInContext("contexta")).thenReturn(Collections.<WebResourceModuleDescriptor>emptyList());
110
111 DownloadableResource resource = builder.parse(path, Collections.<String, String>emptyMap());
112 BatchSubResource batchResource = (BatchSubResource) resource;
113 assertEquals("images/foo.png", batchResource.getResourceName());
114 assertFalse(batchResource.isEmpty());
115
116 verify(mockResourceFinder).find(moduleKey, "images/foo.png");
117 }
118 }