1 package com.atlassian.plugin.webresource;
2
3 import static org.mockito.Mockito.when;
4
5 import com.atlassian.plugin.PluginAccessor;
6 import com.atlassian.plugin.cache.filecache.impl.PassThroughFileCache;
7 import com.atlassian.plugin.servlet.DownloadableResource;
8
9 import com.atlassian.plugin.webresource.cache.FileCacheKey;
10 import org.mockito.Mock;
11 import org.mockito.MockitoAnnotations;
12
13 import java.util.Collections;
14 import java.util.Map;
15 import java.util.TreeMap;
16
17 import junit.framework.TestCase;
18
19 public class TestContextBatchDownloadableResourceBuilder extends TestCase
20 {
21 @Mock
22 private DefaultResourceDependencyResolver mockDependencyResolver;
23 @Mock
24 private PluginAccessor mockPluginAccessor;
25 @Mock
26 private WebResourceUrlProvider mockWebResourceUrlProvider;
27 @Mock
28 private DownloadableResourceFinder mockResourceFinder;
29
30 private ContextBatchDownloadableResourceBuilder builder;
31
32 @Override
33 public void setUp() throws Exception
34 {
35 super.setUp();
36
37 MockitoAnnotations.initMocks(this);
38 builder = new ContextBatchDownloadableResourceBuilder(mockDependencyResolver, mockPluginAccessor, mockWebResourceUrlProvider,
39 mockResourceFinder, PassThroughFileCache.<FileCacheKey>instance());
40 }
41
42 @Override
43 public void tearDown() throws Exception
44 {
45 mockDependencyResolver = null;
46 mockPluginAccessor = null;
47 mockWebResourceUrlProvider = null;
48 mockResourceFinder = null;
49 builder = null;
50
51 super.tearDown();
52 }
53
54 public void testParseCss() throws UrlParseException
55 {
56 final String context = "contexta";
57 createContext(context);
58 final String path = "/download/contextbatch/css/contexta/batch.css";
59 assertTrue(builder.matches(path));
60 final DownloadableResource resource = builder.parse(path, Collections.<String, String> emptyMap());
61 final ContextBatchDownloadableResource batchResource = (ContextBatchDownloadableResource) resource;
62 assertEquals("css", batchResource.getType());
63 }
64
65 public void testParseCssWithMultipleContexts() throws UrlParseException
66 {
67 createContext("contexta");
68 createContext("contextb");
69 final String path = "/download/contextbatch/css/contexta,contextb/batch.css";
70 assertTrue(builder.matches(path));
71 final DownloadableResource resource = builder.parse(path, Collections.<String, String> emptyMap());
72 final ContextBatchDownloadableResource batchResource = (ContextBatchDownloadableResource) resource;
73 assertEquals("css", batchResource.getType());
74 }
75
76 public void testParseJavascript() throws UrlParseException
77 {
78 createContext("contexta");
79 final String path = "/download/contextbatch/js/contexta/batch.js";
80 assertTrue(builder.matches(path));
81 final DownloadableResource resource = builder.parse(path, Collections.<String, String> emptyMap());
82 final ContextBatchDownloadableResource batchResource = (ContextBatchDownloadableResource) resource;
83 assertEquals("js", batchResource.getType());
84 }
85
86 public void testParseWithParam() throws UrlParseException
87 {
88 createContext("contexta");
89 final String path = "/download/contextbatch/js/contexta/batch.js";
90 final Map<String, String> params = Collections.singletonMap("ieOnly", "true");
91 final DownloadableResource resource = builder.parse(path, params);
92 final ContextBatchDownloadableResource batchResource = (ContextBatchDownloadableResource) resource;
93 assertEquals(params, batchResource.getParams());
94 }
95
96 public void testParseWithParams() throws UrlParseException
97 {
98 createContext("contexta");
99 final String path = "/download/contextbatch/js/contexta/batch.js";
100 final Map<String, String> params = new TreeMap<String, String>();
101 params.put("ieOnly", "true");
102 params.put("zomg", "false");
103 final DownloadableResource resource = builder.parse(path, params);
104 final ContextBatchDownloadableResource batchResource = (ContextBatchDownloadableResource) resource;
105 assertEquals(params, batchResource.getParams());
106 }
107
108 public void testMatch()
109 {
110 assertTrue("correct path", builder.matches("/download/contextbatch/css/contexta/batch.css"));
111 assertFalse("wrong path", builder.matches("/download/contextbatch/js/contexta/batch.css"));
112 assertFalse("wrong path", builder.matches("/download/contextbatch/css/contexta/image.png"));
113 }
114
115 private void createContext(String context)
116 {
117 when(mockDependencyResolver.getDependenciesInContext(context)).thenReturn(Collections.<WebResourceModuleDescriptor>emptyList());
118 }
119 }