View Javadoc

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      // testGetStaticResourcePrefix
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      // testGetStaticResourcePrefixWithCounter
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     // testGetStaticPluginResourcePrefix
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 }