PageRenderTime 27ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/jira-project/jira-components/jira-tests-parent/jira-tests-unit/src/test/java/com/atlassian/jira/bc/project/TestDefaultProjectServiceValidateCreateProject.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 242 lines | 208 code | 31 blank | 3 comment | 1 complexity | 6654edeeb2470ae87b2e3ab464b159ca MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.bc.project;
  2. import com.atlassian.beehive.ClusterLockService;
  3. import com.atlassian.jira.association.NodeAssociationStore;
  4. import com.atlassian.jira.avatar.AvatarManager;
  5. import com.atlassian.jira.bc.JiraServiceContext;
  6. import com.atlassian.jira.bc.project.component.ProjectComponentManager;
  7. import com.atlassian.jira.config.properties.ApplicationProperties;
  8. import com.atlassian.jira.event.project.ProjectEventManager;
  9. import com.atlassian.jira.issue.CustomFieldManager;
  10. import com.atlassian.jira.issue.IssueManager;
  11. import com.atlassian.jira.issue.fields.screen.issuetype.IssueTypeScreenSchemeManager;
  12. import com.atlassian.jira.issue.security.IssueSecuritySchemeManager;
  13. import com.atlassian.jira.notification.NotificationSchemeManager;
  14. import com.atlassian.jira.permission.GlobalPermissionKey;
  15. import com.atlassian.jira.permission.PermissionSchemeManager;
  16. import com.atlassian.jira.project.ProjectCreateNotifier;
  17. import com.atlassian.jira.project.ProjectManager;
  18. import com.atlassian.jira.project.template.ProjectTemplate;
  19. import com.atlassian.jira.project.template.ProjectTemplateKey;
  20. import com.atlassian.jira.project.template.ProjectTemplateManager;
  21. import com.atlassian.jira.project.type.ProjectTypeKey;
  22. import com.atlassian.jira.project.type.ProjectTypeUpdatedNotifier;
  23. import com.atlassian.jira.project.util.ProjectKeyStore;
  24. import com.atlassian.jira.project.version.VersionManager;
  25. import com.atlassian.jira.scheme.SchemeFactory;
  26. import com.atlassian.jira.security.GlobalPermissionManager;
  27. import com.atlassian.jira.security.JiraAuthenticationContext;
  28. import com.atlassian.jira.security.PermissionManager;
  29. import com.atlassian.jira.sharing.SharePermissionDeleteUtils;
  30. import com.atlassian.jira.task.TaskManager;
  31. import com.atlassian.jira.user.ApplicationUser;
  32. import com.atlassian.jira.user.MockApplicationUser;
  33. import com.atlassian.jira.user.util.UserManager;
  34. import com.atlassian.jira.util.ErrorCollection;
  35. import com.atlassian.jira.util.I18nHelper;
  36. import com.atlassian.jira.util.SimpleErrorCollection;
  37. import com.atlassian.jira.workflow.WorkflowManager;
  38. import com.atlassian.jira.workflow.WorkflowSchemeManager;
  39. import org.junit.Before;
  40. import org.junit.Test;
  41. import org.junit.runner.RunWith;
  42. import org.mockito.Mock;
  43. import org.mockito.runners.MockitoJUnitRunner;
  44. import java.util.Optional;
  45. import static org.hamcrest.core.Is.is;
  46. import static org.junit.Assert.assertFalse;
  47. import static org.junit.Assert.assertThat;
  48. import static org.junit.Assert.assertTrue;
  49. import static org.mockito.Matchers.any;
  50. import static org.mockito.Mockito.mock;
  51. import static org.mockito.Mockito.when;
  52. /**
  53. * Tests the validation of the parameters that occurs before a project is created
  54. */
  55. @RunWith(MockitoJUnitRunner.class)
  56. public class TestDefaultProjectServiceValidateCreateProject {
  57. private static final Long ASSIGNEE_TYPE = 1L;
  58. private static final Long AVATAR_ID = 2L;
  59. @Mock
  60. private I18nHelper.BeanFactory i18nFactory;
  61. @Mock
  62. private GlobalPermissionManager globalPermissionManager;
  63. @Mock
  64. private ProjectTemplateManager projectTemplateManager;
  65. @Mock
  66. private ApplicationUser user;
  67. private ProjectCreationValidator validator;
  68. @Before
  69. public void setUp() {
  70. mockI18N();
  71. validator = new ProjectCreationValidator(globalPermissionManager, i18nFactory, projectTemplateManager);
  72. validator.setServiceContext(contextWith(new SimpleErrorCollection()));
  73. }
  74. @Test
  75. public void returnsAForbiddenErrorIfTheUserIsNotAnAdmin() {
  76. when(globalPermissionManager.hasPermission(GlobalPermissionKey.ADMINISTER, user)).thenReturn(false);
  77. ProjectService.CreateProjectValidationResult result = validator.validateCreateProject(
  78. user,
  79. new ProjectCreationData.Builder().build()
  80. );
  81. assertTrue(result.getErrorCollection().getReasons().contains(ErrorCollection.Reason.FORBIDDEN));
  82. }
  83. @Test
  84. public void returnsAnErrorIfNotAllOfTheProjectCreationDataIsValid() {
  85. when(globalPermissionManager.hasPermission(GlobalPermissionKey.ADMINISTER, user)).thenReturn(true);
  86. when(projectTemplateManager.getProjectTemplate(null)).thenReturn(Optional.empty());
  87. validator.projectDataIsNotValid();
  88. ProjectService.CreateProjectValidationResult result = validator.validateCreateProject(
  89. user,
  90. new ProjectCreationData.Builder().build()
  91. );
  92. assertTrue(result.getErrorCollection().hasAnyErrors());
  93. }
  94. @Test
  95. public void returnsAValidationResultWithoutErrorsIfAllOfTheProjectCreationDataIsValid() {
  96. when(globalPermissionManager.hasPermission(GlobalPermissionKey.ADMINISTER, user)).thenReturn(true);
  97. validator.projectDataIsValid();
  98. ProjectService.CreateProjectValidationResult result = validator.validateCreateProject(
  99. user,
  100. new ProjectCreationData.Builder()
  101. .withName("name")
  102. .withKey("key")
  103. .withDescription("description")
  104. .withType("projectType")
  105. .withLead(new MockApplicationUser("leadName"))
  106. .withUrl("url")
  107. .withAssigneeType(ASSIGNEE_TYPE)
  108. .withAvatarId(AVATAR_ID)
  109. .build()
  110. );
  111. ProjectCreationData projectCreationData = result.getProjectCreationData();
  112. assertFalse(result.getErrorCollection().hasAnyErrors());
  113. assertThat(projectCreationData.getName(), is("name"));
  114. assertThat(projectCreationData.getKey(), is("key"));
  115. assertThat(projectCreationData.getDescription(), is("description"));
  116. assertThat(projectCreationData.getUrl(), is("url"));
  117. assertThat(projectCreationData.getAssigneeType(), is(1L));
  118. assertThat(projectCreationData.getAvatarId(), is(2L));
  119. assertThat(projectCreationData.getProjectTypeKey(), is(new ProjectTypeKey("projectType")));
  120. }
  121. @Test
  122. public void usesTheProjectTypeSpecifiedOnTheProjectCreationDataIfTheSpecifiedProjectTemplateDoesNotExist() {
  123. when(globalPermissionManager.hasPermission(GlobalPermissionKey.ADMINISTER, user)).thenReturn(true);
  124. validator.projectDataIsValid();
  125. when(projectTemplateManager.getProjectTemplate(new ProjectTemplateKey("projectTemplateKey"))).thenReturn(Optional.empty());
  126. ProjectService.CreateProjectValidationResult result = validator.validateCreateProject(
  127. user,
  128. new ProjectCreationData.Builder()
  129. .withType("projectType")
  130. .withProjectTemplateKey("projectTemplateKey")
  131. .build()
  132. );
  133. ProjectCreationData projectCreationData = result.getProjectCreationData();
  134. assertThat(projectCreationData.getProjectTypeKey().getKey(), is("projectType"));
  135. }
  136. private void mockI18N() {
  137. I18nHelper i18nHelper = mock(I18nHelper.class);
  138. when(i18nFactory.getInstance(any(ApplicationUser.class))).thenReturn(i18nHelper);
  139. }
  140. private JiraServiceContext contextWith(final SimpleErrorCollection errorCollection) {
  141. JiraServiceContext serviceContext = mock(JiraServiceContext.class);
  142. when(serviceContext.getErrorCollection()).thenReturn(errorCollection);
  143. return serviceContext;
  144. }
  145. private ProjectTemplate templateWithProjectType(String projectType) {
  146. ProjectTemplate projectTemplate = mock(ProjectTemplate.class);
  147. when(projectTemplate.getProjectTypeKey()).thenReturn(new ProjectTypeKey(projectType));
  148. return projectTemplate;
  149. }
  150. private static class ProjectCreationValidator extends DefaultProjectService {
  151. private boolean isProjectDataValid;
  152. private JiraServiceContext serviceContext;
  153. public ProjectCreationValidator(
  154. GlobalPermissionManager globalPermissionManager,
  155. I18nHelper.BeanFactory i18nFactory,
  156. ProjectTemplateManager projectTemplateManager) {
  157. super(
  158. mock(JiraAuthenticationContext.class),
  159. mock(ProjectManager.class),
  160. mock(ApplicationProperties.class),
  161. mock(PermissionManager.class),
  162. globalPermissionManager,
  163. mock(PermissionSchemeManager.class),
  164. mock(NotificationSchemeManager.class),
  165. mock(IssueSecuritySchemeManager.class),
  166. mock(SchemeFactory.class),
  167. mock(WorkflowSchemeManager.class),
  168. mock(IssueTypeScreenSchemeManager.class),
  169. mock(CustomFieldManager.class),
  170. mock(NodeAssociationStore.class),
  171. mock(VersionManager.class),
  172. mock(ProjectComponentManager.class),
  173. mock(SharePermissionDeleteUtils.class),
  174. mock(AvatarManager.class),
  175. i18nFactory,
  176. mock(WorkflowManager.class),
  177. mock(UserManager.class),
  178. mock(ProjectEventManager.class),
  179. mock(ProjectKeyStore.class),
  180. mock(ProjectTypeValidator.class),
  181. mock(ProjectCreateNotifier.class),
  182. mock(ProjectTypeUpdatedNotifier.class),
  183. mock(ClusterLockService.class),
  184. projectTemplateManager,
  185. mock(ProjectSchemeAssociationManager.class),
  186. mock(TaskManager.class),
  187. mock(IssueManager.class)
  188. );
  189. }
  190. public void projectDataIsValid() {
  191. isProjectDataValid = true;
  192. }
  193. public void projectDataIsNotValid() {
  194. isProjectDataValid = false;
  195. }
  196. public void setServiceContext(JiraServiceContext serviceContext) {
  197. this.serviceContext = serviceContext;
  198. }
  199. @Override
  200. public boolean isValidAllProjectData(JiraServiceContext serviceContext, ProjectCreationData projectCreationData) {
  201. if (!isProjectDataValid) {
  202. serviceContext.getErrorCollection().addError("some-field", "some-error");
  203. }
  204. return isProjectDataValid;
  205. }
  206. @Override
  207. protected JiraServiceContext getServiceContext(final ApplicationUser user, final ErrorCollection errorCollection) {
  208. return serviceContext;
  209. }
  210. }
  211. }