PageRenderTime 29ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/atlassian-plugins-core/src/test/java/com/atlassian/plugin/util/TestPluginUtils.java

https://bitbucket.org/purewind/atlassian-plugins
Java | 256 lines | 209 code | 47 blank | 0 comment | 8 complexity | 825b34dc3dda7ef5380b524de7211761 MD5 | raw file
  1. package com.atlassian.plugin.util;
  2. import com.atlassian.fugue.Option;
  3. import com.atlassian.plugin.Application;
  4. import com.atlassian.plugin.InstallationMode;
  5. import com.atlassian.plugin.ModuleDescriptor;
  6. import com.atlassian.plugin.Plugin;
  7. import com.atlassian.plugin.descriptors.MockUnusedModuleDescriptor;
  8. import com.atlassian.plugin.descriptors.RequiresRestart;
  9. import com.google.common.base.Function;
  10. import com.google.common.collect.Lists;
  11. import org.dom4j.Element;
  12. import org.junit.Rule;
  13. import org.junit.Test;
  14. import org.junit.contrib.java.lang.system.RestoreSystemProperties;
  15. import org.junit.runner.RunWith;
  16. import org.mockito.runners.MockitoJUnitRunner;
  17. import java.util.HashSet;
  18. import java.util.List;
  19. import static com.atlassian.plugin.util.PluginUtils.ATLASSIAN_DEV_MODE;
  20. import static com.google.common.collect.Lists.newArrayList;
  21. import static com.google.common.collect.Sets.newHashSet;
  22. import static org.junit.Assert.assertFalse;
  23. import static org.junit.Assert.assertTrue;
  24. import static org.mockito.Mockito.mock;
  25. import static org.mockito.Mockito.when;
  26. @RunWith(MockitoJUnitRunner.class)
  27. public final class TestPluginUtils {
  28. @Rule
  29. public RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties(ATLASSIAN_DEV_MODE);
  30. @Test
  31. public void testPluginWithNoModuleDoesNotRequireRestartInDevMode() {
  32. System.setProperty(ATLASSIAN_DEV_MODE, "true");
  33. final Plugin plugin = mockPluginWithModuleDescriptors();
  34. assertFalse(PluginUtils.doesPluginRequireRestart(plugin));
  35. }
  36. @Test
  37. public void testPluginWithNoModuleDoesNotRequireRestartNoDevMode() {
  38. final Plugin plugin = mockPluginWithModuleDescriptors();
  39. assertFalse(PluginUtils.doesPluginRequireRestart(plugin));
  40. }
  41. @Test
  42. public void testPluginWithModuleRequiringRestartDoesNotRequireRestartInDevMode() {
  43. System.setProperty(ATLASSIAN_DEV_MODE, "true");
  44. final Plugin plugin = mockPluginWithModuleDescriptors(new DynamicModuleDescriptor(), new RequiresRestartModuleDescriptor());
  45. assertFalse(PluginUtils.doesPluginRequireRestart(plugin));
  46. }
  47. @Test
  48. public void testPluginWithModuleRequiringRestartDoesRequireRestartNoDevMode() {
  49. final Plugin plugin = mockPluginWithModuleDescriptors(new DynamicModuleDescriptor(), new RequiresRestartModuleDescriptor());
  50. assertTrue(PluginUtils.doesPluginRequireRestart(plugin));
  51. }
  52. @Test
  53. public void testPluginWithNoModuleRequiringRestartDoesNotRequireRestartNoDevMode() {
  54. final Plugin plugin = mockPluginWithModuleDescriptors(new DynamicModuleDescriptor());
  55. assertFalse(PluginUtils.doesPluginRequireRestart(plugin));
  56. }
  57. private Plugin mockPluginWithModuleDescriptors(final ModuleDescriptor<?>... descriptors) {
  58. final Plugin plugin = mock(Plugin.class);
  59. when(plugin.getModuleDescriptors()).thenReturn(Lists.newArrayList(descriptors));
  60. return plugin;
  61. }
  62. @Test
  63. public void testModuleElementAppliesWithNoInformation() {
  64. assertTrue(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement(null), applications(), InstallationMode.REMOTE));
  65. }
  66. @Test
  67. public void testModuleElementAppliesWithApplicationAttributeJira() {
  68. assertTrue(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement("jira"), applications(), InstallationMode.REMOTE));
  69. }
  70. @Test
  71. public void testModuleElementAppliesWithApplicationAttributeBamboo() {
  72. assertFalse(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement("bamboo"), applications(), InstallationMode.REMOTE));
  73. }
  74. @Test
  75. public void testModuleElementAppliesWithApplicationAttributeJiraBamboo() {
  76. assertTrue(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement("jira,bamboo"), applications(), InstallationMode.REMOTE));
  77. }
  78. @Test
  79. public void testModuleElementAppliesWithApplicationAttributeBambooConfluence() {
  80. assertTrue(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement("bamboo,confluence"), applications(), InstallationMode.REMOTE));
  81. }
  82. @Test
  83. public void testModuleElementAppliesWithApplicationAttributeBambooCrowd() {
  84. assertFalse(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement("bamboo,crowd"), applications(), InstallationMode.REMOTE));
  85. }
  86. @Test
  87. public void testModuleElementAppliesWithApplicationAttributeBambooCrowdAndBlank() {
  88. assertFalse(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement("bamboo,,crowd, ,"), applications(), InstallationMode.REMOTE));
  89. }
  90. @Test
  91. public void testModuleElementAppliesWithApplicationAttributeBambooConfluenceAndBlank() {
  92. assertTrue(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement("bamboo,, , confluence, "), applications(), InstallationMode.REMOTE));
  93. }
  94. @Test
  95. public void testModuleElementAppliesWithApplicationAttributeBlank() {
  96. assertTrue(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement(" "), applications(), InstallationMode.REMOTE));
  97. assertTrue(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement(" ,"), applications(), InstallationMode.REMOTE));
  98. assertTrue(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement(" ,, "), applications(), InstallationMode.REMOTE));
  99. assertTrue(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement(" ,, ,,,"), applications(), InstallationMode.REMOTE));
  100. }
  101. @Test
  102. public void testModuleElementAppliesWithRestrictElementJira() {
  103. assertTrue(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement(null, Lists.newArrayList(newMockRestrictElement("jira", Option.<InstallationMode>none()))), applications(), InstallationMode.REMOTE));
  104. }
  105. @Test
  106. public void testModuleElementAppliesWithRestrictElementBamboo() {
  107. assertFalse(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement(null, Lists.newArrayList(newMockRestrictElement("bamboo", Option.<InstallationMode>none()))), applications(), InstallationMode.REMOTE));
  108. }
  109. @Test
  110. public void testModuleElementAppliesWithRestrictElementJiraBamboo() {
  111. assertTrue(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement(null, Lists.newArrayList(newMockRestrictElement("jira", Option.<InstallationMode>none()), newMockRestrictElement("bamboo", Option.<InstallationMode>none()))), applications(), InstallationMode.REMOTE));
  112. }
  113. @Test
  114. public void testModuleElementAppliesWithRestrictElementJiraConfluence() {
  115. assertTrue(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement(null, Lists.newArrayList(newMockRestrictElement("jira", Option.<InstallationMode>none()), newMockRestrictElement("confluence", Option.<InstallationMode>none()))), applications(), InstallationMode.REMOTE));
  116. }
  117. @Test
  118. public void testModuleElementAppliesWithRestrictElementJiraAndVersionInRange() {
  119. assertTrue(PluginUtils.doesModuleElementApplyToApplication(
  120. newMockModuleElement(null, Lists.newArrayList(newMockRestrictElement("jira", Option.<InstallationMode>none(), "[4.0,)"))), applications(), InstallationMode.REMOTE));
  121. }
  122. @Test
  123. public void testModuleElementAppliesWithRestrictElementJiraAndVersionOutOfRange() {
  124. assertFalse(PluginUtils.doesModuleElementApplyToApplication(
  125. newMockModuleElement(null, Lists.newArrayList(newMockRestrictElement("jira", Option.<InstallationMode>none(), "(,5.0)"))), applications(), InstallationMode.REMOTE));
  126. }
  127. @Test
  128. public void testModuleElementAppliesWithRestrictElementJiraAndVersionsInRange() {
  129. assertTrue(PluginUtils.doesModuleElementApplyToApplication(
  130. newMockModuleElement(null, Lists.newArrayList(newMockRestrictElement("jira", Option.<InstallationMode>none(), "(,4.0)", "5.0"))), applications(), InstallationMode.REMOTE));
  131. }
  132. @Test
  133. public void testModuleElementAppliesWithRestrictElementJiraAndVersionsOutOfRange() {
  134. assertFalse(PluginUtils.doesModuleElementApplyToApplication(
  135. newMockModuleElement(null, Lists.newArrayList(newMockRestrictElement("jira", Option.<InstallationMode>none(), "(,4.0]", "(5.0,)"))), applications(), InstallationMode.REMOTE));
  136. }
  137. @Test
  138. public void testModuleElementAppliesWithRestrictElementMatchingInstallMode() {
  139. assertTrue(PluginUtils.doesModuleElementApplyToApplication(
  140. newMockModuleElement(null, Lists.newArrayList(newMockRestrictElement("jira", Option.some(InstallationMode.LOCAL)))), applications(), InstallationMode.LOCAL));
  141. }
  142. @Test
  143. public void testModuleElementAppliesWithRestrictElementNonMatchingInstallMode() {
  144. assertFalse(PluginUtils.doesModuleElementApplyToApplication(
  145. newMockModuleElement(null, Lists.newArrayList(newMockRestrictElement("jira", Option.some(InstallationMode.REMOTE)))), applications(), InstallationMode.LOCAL));
  146. }
  147. @Test
  148. public void testModuleElementAppliesWithRestrictElementInstallModeUnspecified() {
  149. assertTrue(PluginUtils.doesModuleElementApplyToApplication(
  150. newMockModuleElement(null, Lists.newArrayList(newMockRestrictElement("jira", Option.<InstallationMode>none()))), applications(), InstallationMode.LOCAL));
  151. }
  152. @Test
  153. public void testModuleElementAppliesWithRestrictElementInstallModeSpecifiedOnDifferentAppVersion() {
  154. final List<Element> restricts = Lists.newArrayList(
  155. newMockRestrictElement("jira", Option.some(InstallationMode.LOCAL), "5.0"),
  156. newMockRestrictElement("jira", Option.some(InstallationMode.REMOTE), "6.0"));
  157. assertTrue(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement(null, restricts), applications(), InstallationMode.LOCAL));
  158. assertFalse(PluginUtils.doesModuleElementApplyToApplication(newMockModuleElement(null, restricts), applications(), InstallationMode.REMOTE));
  159. }
  160. private Element newMockRestrictElement(final String app, final Option<InstallationMode> modeOption, final String... versions) {
  161. final Element restrict = mock(Element.class);
  162. when(restrict.attributeValue("application")).thenReturn(app);
  163. if (modeOption.isDefined()) {
  164. when(restrict.attributeValue("mode")).thenReturn(modeOption.get().toString().toLowerCase());
  165. }
  166. if (versions != null && versions.length == 1) {
  167. when(restrict.attributeValue("version")).thenReturn(versions[0]);
  168. } else if (versions != null) {
  169. when(restrict.elements("version")).thenReturn(Lists.transform(newArrayList(versions), new Function<String, Element>() {
  170. @Override
  171. public Element apply(final String version) {
  172. final Element versionE = mock(Element.class);
  173. when(versionE.getText()).thenReturn(version);
  174. return versionE;
  175. }
  176. }));
  177. }
  178. return restrict;
  179. }
  180. private HashSet<Application> applications() {
  181. return newHashSet(jira50(), confluence40());
  182. }
  183. private Application confluence40() {
  184. return newApplication("confluence", "4.0");
  185. }
  186. private Application jira50() {
  187. return newApplication("jira", "5.0");
  188. }
  189. private Element newMockModuleElement(final String app) {
  190. return newMockModuleElement(app, Lists.<Element>newArrayList());
  191. }
  192. private Element newMockModuleElement(final String app, final List<Element> restricts) {
  193. final Element element = mock(Element.class);
  194. when(element.attributeValue("application")).thenReturn(app);
  195. when(element.elements("restrict")).thenReturn(restricts);
  196. return element;
  197. }
  198. private Application newApplication(final String name, final String version) {
  199. final Application app = mock(Application.class);
  200. when(app.getKey()).thenReturn(name);
  201. when(app.getVersion()).thenReturn(version);
  202. return app;
  203. }
  204. static class DynamicModuleDescriptor extends MockUnusedModuleDescriptor {
  205. }
  206. @RequiresRestart
  207. static class RequiresRestartModuleDescriptor extends MockUnusedModuleDescriptor {
  208. }
  209. }