PageRenderTime 25ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/jira-project/jira-components/jira-tests-parent/jira-tests-unit/src/test/java/com/atlassian/jira/project/template/descriptor/TestProjectTemplateModuleDescriptor.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 216 lines | 176 code | 40 blank | 0 comment | 0 complexity | 943a74d92a58472d29efb5d99da0c19b MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.project.template.descriptor;
  2. import com.atlassian.jira.project.template.hook.AddProjectHook;
  3. import com.atlassian.jira.project.template.hook.AddProjectModule;
  4. import com.atlassian.jira.project.template.hook.ConfigureData;
  5. import com.atlassian.jira.project.template.hook.ConfigureResponse;
  6. import com.atlassian.jira.project.template.hook.ValidateData;
  7. import com.atlassian.jira.project.template.hook.ValidateResponse;
  8. import com.atlassian.jira.project.template.module.AddProjectModuleBuilder;
  9. import com.atlassian.jira.project.template.module.ProjectTemplateModule;
  10. import com.atlassian.plugin.Plugin;
  11. import com.atlassian.plugin.elements.ResourceDescriptor;
  12. import com.atlassian.plugin.module.ModuleFactory;
  13. import com.atlassian.plugin.web.Condition;
  14. import com.atlassian.plugin.web.WebInterfaceManager;
  15. import com.atlassian.plugin.web.descriptors.ConditionElementParser;
  16. import com.atlassian.plugin.webresource.WebResourceUrlProvider;
  17. import org.dom4j.Document;
  18. import org.dom4j.DocumentException;
  19. import org.dom4j.Element;
  20. import org.dom4j.io.SAXReader;
  21. import org.junit.Before;
  22. import org.junit.Rule;
  23. import org.junit.Test;
  24. import org.junit.rules.MethodRule;
  25. import org.mockito.Mock;
  26. import org.mockito.junit.MockitoJUnit;
  27. import java.net.URL;
  28. import java.util.Optional;
  29. import static org.hamcrest.MatcherAssert.assertThat;
  30. import static org.hamcrest.Matchers.equalTo;
  31. import static org.hamcrest.core.IsInstanceOf.instanceOf;
  32. import static org.junit.Assert.assertEquals;
  33. import static org.junit.Assert.assertFalse;
  34. import static org.junit.Assert.assertTrue;
  35. import static org.mockito.Matchers.any;
  36. import static org.mockito.Matchers.anyString;
  37. import static org.mockito.Matchers.eq;
  38. import static org.mockito.Mockito.mock;
  39. import static org.mockito.Mockito.verify;
  40. import static org.mockito.Mockito.when;
  41. public class TestProjectTemplateModuleDescriptor {
  42. @Rule
  43. public MethodRule initMockito = MockitoJUnit.rule();
  44. private static final String PLUGIN_KEY = "test-plugin-key";
  45. @Mock
  46. private ModuleFactory moduleFactory;
  47. @Mock
  48. private WebResourceUrlProvider urlProvider;
  49. @Mock
  50. private Plugin plugin;
  51. @Mock
  52. private ResourceDescriptorFactory resourceDescriptorFactory;
  53. @Mock
  54. private AddProjectModuleBuilder addProjectModuleBuilder;
  55. @Mock
  56. private AddProjectModule addProjectModule;
  57. @Mock
  58. private ConfigTemplateParser configTemplateParser;
  59. @Mock
  60. private WebInterfaceManager webInterfaceManager;
  61. private ConditionElementParser.ConditionFactory conditionFactory = (className, plugin1) -> {
  62. try {
  63. return (Condition) mock(Class.forName(className));
  64. } catch (ClassNotFoundException e) {
  65. throw new RuntimeException(e);
  66. }
  67. };
  68. private Element xml;
  69. private ProjectTemplateModuleDescriptor descriptor;
  70. @Before
  71. public void setUp() throws Exception {
  72. when(plugin.getKey()).thenReturn(PLUGIN_KEY);
  73. when(plugin.getClassLoader()).thenReturn(getClass().getClassLoader());
  74. when(addProjectModuleBuilder.addProjectHookClassName(any(String.class))).thenReturn(addProjectModuleBuilder);
  75. when(addProjectModuleBuilder.templateConfigurationFile(any(String.class))).thenReturn(addProjectModuleBuilder);
  76. when(addProjectModuleBuilder.build()).thenReturn(addProjectModule);
  77. when(plugin.getResource("/config/simple-issue-tracking.json")).thenReturn(new URL("http://localhost"));
  78. when(resourceDescriptorFactory.createResource(eq(plugin), anyString(), anyString(), any())).thenReturn(mock(ResourceDescriptor.class));
  79. xml = getProjectTemplateElement();
  80. descriptor = new ProjectTemplateModuleDescriptor(moduleFactory, urlProvider, resourceDescriptorFactory, webInterfaceManager, conditionFactory, configTemplateParser) {
  81. @Override
  82. protected AddProjectModuleBuilder getProjectTemplateModuleBuilder() {
  83. return addProjectModuleBuilder;
  84. }
  85. };
  86. }
  87. @Test
  88. public void templateDescriptorParsesXmlCorrectly() throws Exception {
  89. initDescriptor();
  90. ProjectTemplateModule module = descriptor.getModule();
  91. assertEquals(PLUGIN_KEY + ":issuetracking-blueprint", module.key());
  92. assertEquals("labelKey", "jira.issuetracking.project.item", module.labelKey());
  93. assertEquals("descriptionKey", "jira.issuetracking.project.item.description", module.descriptionKey());
  94. assertEquals("longDescriptionKey", Optional.of("jira.issuetracking.project.item.description.long"), module.longDescriptionKey());
  95. assertEquals("icon.location", "images/project-template-bug.png", module.icon().location());
  96. assertEquals("backgroundIcon.location", "images/background-image-issue-tracking.png", module.backgroundIcon().location());
  97. assertEquals("software", module.projectTypeKey());
  98. verify(addProjectModuleBuilder).addProjectHookClassName("com.atlassian.jira.project.template.descriptor.TestProjectTemplateModuleDescriptor$TestHook");
  99. verify(addProjectModuleBuilder).templateConfigurationFile(any(String.class));
  100. }
  101. @Test
  102. public void templateDescriptorIsConditional() throws Exception {
  103. initDescriptor();
  104. assertThat(descriptor.getCondition(), instanceOf(MockCondition.class));
  105. }
  106. @Test
  107. public void addProjectModuleIsOptional() {
  108. getNode("add-project").detach();
  109. initDescriptor();
  110. assertFalse(descriptor.getModule().hasAddProjectModule());
  111. assertThat(descriptor.getModule().addProjectModule(), equalTo(null));
  112. }
  113. @Test(expected = Exception.class)
  114. public void projectTypeIsMandatory() {
  115. getNode("projectTypeKey").detach();
  116. initDescriptor();
  117. assertThat(descriptor.getModule().projectTypeKey(), equalTo(null));
  118. }
  119. @Test
  120. public void projectCreateHookIsOptional() throws Exception {
  121. getNode("add-project/hook").detach();
  122. initDescriptor();
  123. assertTrue(descriptor.getModule().hasAddProjectModule());
  124. verify(addProjectModuleBuilder).addProjectHookClassName(null);
  125. }
  126. @Test
  127. public void configFileIsOptional() throws Exception {
  128. getNode("add-project/descriptor").detach();
  129. initDescriptor();
  130. verify(addProjectModuleBuilder).templateConfigurationFile(null);
  131. }
  132. @Test
  133. public void namesOfIconResourcesHaveTheRightExtension() throws Exception {
  134. initDescriptor();
  135. verify(resourceDescriptorFactory).createResource(eq(plugin), eq("icon.png"), anyString(), eq(Optional.empty()));
  136. verify(resourceDescriptorFactory).createResource(eq(plugin), eq("backgroundIcon.png"), anyString(), eq(Optional.of("a/customtype; charset=UTF-8")));
  137. }
  138. @Test
  139. public void templateWeightIsOptional() throws Exception {
  140. xml.remove(xml.attribute("weight"));
  141. initDescriptor();
  142. assertThat(descriptor.getModule().weight(), equalTo(100));
  143. }
  144. @Test
  145. public void iconAndBackgroundIconAreOptional() throws Exception {
  146. getNode("icon").detach();
  147. getNode("backgroundIcon").detach();
  148. descriptor.init(plugin, xml);
  149. ProjectTemplateModule module = descriptor.getModule();
  150. assertThat(module.icon().location(), equalTo(""));
  151. assertThat(module.backgroundIcon().location(), equalTo(""));
  152. }
  153. private void initDescriptor() {
  154. descriptor.init(plugin, xml);
  155. descriptor.enabled();
  156. descriptor.getModule();
  157. }
  158. private Element getProjectTemplateElement() throws DocumentException {
  159. SAXReader reader = new SAXReader();
  160. Document doc = reader.read(getClass().getResource("/project-templates/ProjectTemplateModuleDescriptorTest.xml"));
  161. return doc.getRootElement();
  162. }
  163. private Element getNode(String name) {
  164. return (Element) xml.selectSingleNode("//project-blueprint/" + name);
  165. }
  166. public static class TestHook implements AddProjectHook {
  167. @Override
  168. public ValidateResponse validate(ValidateData validateData) {
  169. throw new UnsupportedOperationException();
  170. }
  171. @Override
  172. public ConfigureResponse configure(ConfigureData configureData) {
  173. throw new UnsupportedOperationException();
  174. }
  175. }
  176. }