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
92
93
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 }