1 package com.atlassian.plugin.webresource;
2
3 import com.atlassian.plugin.ModuleDescriptor;
4 import com.atlassian.plugin.Plugin;
5 import com.atlassian.plugin.PluginAccessor;
6 import com.atlassian.plugin.impl.StaticPlugin;
7 import com.atlassian.plugin.servlet.AbstractFileServerServlet;
8 import junit.framework.TestCase;
9 import org.mockito.Mock;
10 import org.mockito.MockitoAnnotations;
11
12 import static org.mockito.Mockito.when;
13
14 public class TestWebResourceUrlProviderImpl extends TestCase
15 {
16 private static final String ANIMAL_PLUGIN_VERSION = "2";
17 private static final String BASEURL = "http://www.foo.com";
18 private static final String SYSTEM_COUNTER = "123";
19 private static final String SYSTEM_BUILD_NUMBER = "650";
20
21 @Mock
22 private WebResourceIntegration mockWebResourceIntegration;
23 @Mock
24 private PluginAccessor mockPluginAccessor;
25
26 private Plugin testPlugin;
27 private WebResourceUrlProvider urlProvider;
28
29 @Override
30 public void setUp() throws Exception
31 {
32 super.setUp();
33
34 MockitoAnnotations.initMocks(this);
35 urlProvider = new WebResourceUrlProviderImpl(mockWebResourceIntegration);
36
37 testPlugin = TestUtils.createTestPlugin();
38 when(mockWebResourceIntegration.getPluginAccessor()).thenReturn(mockPluginAccessor);
39 when(mockWebResourceIntegration.getBaseUrl()).thenReturn(BASEURL);
40 when(mockWebResourceIntegration.getBaseUrl(UrlMode.ABSOLUTE)).thenReturn(BASEURL);
41 when(mockWebResourceIntegration.getBaseUrl(UrlMode.RELATIVE)).thenReturn("");
42 when(mockWebResourceIntegration.getBaseUrl(UrlMode.AUTO)).thenReturn("");
43 when(mockWebResourceIntegration.getSystemBuildNumber()).thenReturn(SYSTEM_BUILD_NUMBER);
44 when(mockWebResourceIntegration.getSystemCounter()).thenReturn(SYSTEM_COUNTER);
45 when(mockWebResourceIntegration.getStaticResourceLocale()).thenReturn(null);
46 }
47
48 @Override
49 public void tearDown() throws Exception
50 {
51 mockWebResourceIntegration = null;
52 mockPluginAccessor = null;
53
54 urlProvider = null;
55 testPlugin = null;
56 super.tearDown();
57 }
58
59
60
61 public void testGetStaticResourcePrefix()
62 {
63 final String expectedPrefix = setupGetStaticResourcePrefix(false);
64 assertEquals(expectedPrefix, urlProvider.getStaticResourcePrefix(UrlMode.AUTO));
65 }
66
67 public void testGetStaticResourcePrefixWithAbsoluteUrlMode()
68 {
69 testGetStaticResourcePrefix(UrlMode.ABSOLUTE, true);
70 }
71
72 public void testGetStaticResourcePrefixWithRelativeUrlMode()
73 {
74 testGetStaticResourcePrefix(UrlMode.RELATIVE, false);
75 }
76
77 public void testGetStaticResourcePrefixWithAutoUrlMode()
78 {
79 testGetStaticResourcePrefix(UrlMode.AUTO, false);
80 }
81
82 private void testGetStaticResourcePrefix(UrlMode urlMode, boolean baseUrlExpected)
83 {
84 final String expectedPrefix = setupGetStaticResourcePrefix(baseUrlExpected);
85 assertEquals(expectedPrefix, urlProvider.getStaticResourcePrefix(urlMode));
86 }
87
88 private String setupGetStaticResourcePrefix(boolean baseUrlExpected)
89 {
90 return (baseUrlExpected ? BASEURL : "") +
91 "/" + WebResourceUrlProviderImpl.STATIC_RESOURCE_PREFIX + "/" +
92 SYSTEM_BUILD_NUMBER + "/" + SYSTEM_COUNTER + "/" + WebResourceUrlProviderImpl.STATIC_RESOURCE_SUFFIX;
93 }
94
95
96
97 public void testGetStaticResourcePrefixWithCounter()
98 {
99 final String resourceCounter = "456";
100 final String expectedPrefix = setupGetStaticResourcePrefixWithCounter(false, resourceCounter);
101 assertEquals(expectedPrefix, urlProvider.getStaticResourcePrefix(resourceCounter, UrlMode.AUTO));
102 }
103
104 public void testGetStaticResourcePrefixWithCounterAndAbsoluteUrlMode()
105 {
106 testGetStaticResourcePrefixWithCounter(UrlMode.ABSOLUTE, true);
107 }
108
109 public void testGetStaticResourcePrefixWithCounterAndRelativeUrlMode()
110 {
111 testGetStaticResourcePrefixWithCounter(UrlMode.RELATIVE, false);
112 }
113
114 public void testGetStaticResourcePrefixWithCounterAndAutoUrlMode()
115 {
116 testGetStaticResourcePrefixWithCounter(UrlMode.AUTO, false);
117 }
118
119 private void testGetStaticResourcePrefixWithCounter(UrlMode urlMode, boolean baseUrlExpected)
120 {
121 final String resourceCounter = "456";
122 final String expectedPrefix = setupGetStaticResourcePrefixWithCounter(baseUrlExpected, resourceCounter);
123 assertEquals(expectedPrefix, urlProvider.getStaticResourcePrefix(resourceCounter, urlMode));
124 }
125
126 private String setupGetStaticResourcePrefixWithCounter(boolean baseUrlExpected, String resourceCounter)
127 {
128 return (baseUrlExpected ? BASEURL : "") +
129 "/" + WebResourceUrlProviderImpl.STATIC_RESOURCE_PREFIX + "/" +
130 SYSTEM_BUILD_NUMBER + "/" + SYSTEM_COUNTER + "/" + resourceCounter +
131 "/" + WebResourceUrlProviderImpl.STATIC_RESOURCE_SUFFIX;
132 }
133
134
135
136 public void testGetStaticPluginResourcePrefix()
137 {
138 final String moduleKey = "confluence.extra.animal:animal";
139 final String resourceName = "foo.js";
140
141 final String expectedPrefix = setupGetStaticPluginResourcePrefix(false, moduleKey, resourceName);
142
143 assertEquals(expectedPrefix, urlProvider.getStaticPluginResourceUrl(moduleKey, resourceName, UrlMode.AUTO));
144 }
145
146 public void testGetStaticPluginResourcePrefixWithAbsoluteUrlMode()
147 {
148 testGetStaticPluginResourcePrefix(UrlMode.ABSOLUTE, true);
149 }
150
151 public void testGetStaticPluginResourcePrefixWithRelativeUrlMode()
152 {
153 testGetStaticPluginResourcePrefix(UrlMode.RELATIVE, false);
154 }
155
156 public void testGetStaticPluginResourcePrefixWithAutoUrlMode()
157 {
158 testGetStaticPluginResourcePrefix(UrlMode.AUTO, false);
159 }
160
161 private void testGetStaticPluginResourcePrefix(UrlMode urlMode, boolean baseUrlExpected)
162 {
163 final String moduleKey = "confluence.extra.animal:animal";
164 final String resourceName = "foo.js";
165
166 final String expectedPrefix = setupGetStaticPluginResourcePrefix(baseUrlExpected, moduleKey, resourceName);
167
168 assertEquals(expectedPrefix, urlProvider.getStaticPluginResourceUrl(moduleKey, resourceName, urlMode));
169 }
170
171 private String setupGetStaticPluginResourcePrefix(boolean baseUrlExpected, String moduleKey, String resourceName)
172 {
173 final Plugin animalPlugin = new StaticPlugin();
174 animalPlugin.setKey("confluence.extra.animal");
175 animalPlugin.setPluginsVersion(5);
176 animalPlugin.getPluginInformation().setVersion(ANIMAL_PLUGIN_VERSION);
177
178 mockEnabledPluginModule(moduleKey, TestUtils.createWebResourceModuleDescriptor(moduleKey, animalPlugin));
179
180 return (baseUrlExpected ? BASEURL : "") +
181 "/" + WebResourceUrlProviderImpl.STATIC_RESOURCE_PREFIX + "/" + SYSTEM_BUILD_NUMBER +
182 "/" + SYSTEM_COUNTER + "/" + ANIMAL_PLUGIN_VERSION + "/" + WebResourceUrlProviderImpl.STATIC_RESOURCE_SUFFIX +
183 "/" + AbstractFileServerServlet.SERVLET_PATH + "/" + AbstractFileServerServlet.RESOURCE_URL_PREFIX +
184 "/" + moduleKey + "/" + resourceName;
185 }
186
187
188 public void testGetStaticPrefixResourceWithLocale()
189 {
190 testGetStaticPrefixResourceWithLocale(UrlMode.ABSOLUTE, true);
191 testGetStaticPrefixResourceWithLocale(UrlMode.RELATIVE, false);
192 testGetStaticPrefixResourceWithLocale(UrlMode.AUTO, false);
193 }
194
195 private void testGetStaticPrefixResourceWithLocale(UrlMode urlMode, boolean baseUrlExpected)
196 {
197 String expected = setupGetStaticPrefixResourceWithLocale(baseUrlExpected);
198 assertEquals(expected, urlProvider.getStaticResourcePrefix(urlMode));
199 }
200
201 private String setupGetStaticPrefixResourceWithLocale(boolean baseUrlExpected)
202 {
203 when(mockWebResourceIntegration.getStaticResourceLocale()).thenReturn("de_DE");
204 return (baseUrlExpected ? BASEURL : "") +
205 "/" + WebResourceManagerImpl.STATIC_RESOURCE_PREFIX + "/" +
206 "de_DE/" +
207 SYSTEM_BUILD_NUMBER + "/" + SYSTEM_COUNTER +
208 "/" + WebResourceManagerImpl.STATIC_RESOURCE_SUFFIX;
209 }
210
211 public void testStaticPluginResourceWithLocale()
212 {
213 testStaticPluginResourceWithLocale(UrlMode.ABSOLUTE, true);
214 testStaticPluginResourceWithLocale(UrlMode.RELATIVE, false);
215 testStaticPluginResourceWithLocale(UrlMode.AUTO, false);
216 }
217
218 private void testStaticPluginResourceWithLocale(UrlMode urlMode, boolean baseUrlExpected)
219 {
220 final String moduleKey = "confluence.extra.animal:animal";
221 final String resourceName = "foo.js";
222 String expected = setupStaticPluginResourceWithLocale(moduleKey, resourceName, baseUrlExpected);
223 assertEquals(expected, urlProvider.getStaticPluginResourceUrl(moduleKey, resourceName, urlMode));
224 }
225
226 private String setupStaticPluginResourceWithLocale(final String moduleKey, final String resourceName, boolean baseUrlExpected)
227 {
228 when(mockWebResourceIntegration.getStaticResourceLocale()).thenReturn("de_DE");
229 String ver = "2";
230 final Plugin animalPlugin = new StaticPlugin();
231 animalPlugin.setKey("confluence.extra.animal");
232 animalPlugin.setPluginsVersion(5);
233 animalPlugin.getPluginInformation().setVersion(ver);
234
235 final ModuleDescriptor moduleDescriptor = TestUtils.createWebResourceModuleDescriptor(moduleKey, animalPlugin);
236 when(mockPluginAccessor.getEnabledPluginModule(moduleKey)).thenReturn(moduleDescriptor);
237
238 return (baseUrlExpected ? BASEURL : "") +
239 "/" + WebResourceManagerImpl.STATIC_RESOURCE_PREFIX + "/de_DE/" + SYSTEM_BUILD_NUMBER +
240 "/" + SYSTEM_COUNTER + "/" + ver + "/" + WebResourceManagerImpl.STATIC_RESOURCE_SUFFIX +
241 "/" + AbstractFileServerServlet.SERVLET_PATH + "/" + AbstractFileServerServlet.RESOURCE_URL_PREFIX +
242 "/" + moduleKey + "/" + resourceName;
243 }
244
245 private void mockEnabledPluginModule(final String key, final ModuleDescriptor md)
246 {
247 when(mockPluginAccessor.getEnabledPluginModule(key)).thenReturn(md);
248 }
249 }