PageRenderTime 45ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/jira-project/jira-components/jira-tests-parent/jira-tests-unit/src/test/java/com/atlassian/jira/application/TestDefaultApplicationRoleAdminService.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 229 lines | 176 code | 44 blank | 9 comment | 0 complexity | da0f4576f8e7c908ca56b73af85db43e MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.application;
  2. import com.atlassian.application.api.ApplicationKey;
  3. import com.atlassian.crowd.embedded.api.Group;
  4. import com.atlassian.fugue.Option;
  5. import com.atlassian.jira.bc.ServiceOutcome;
  6. import com.atlassian.jira.bc.ServiceOutcomeMatchers;
  7. import com.atlassian.jira.bc.ValueMatcher;
  8. import com.atlassian.jira.license.JiraLicenseManager;
  9. import com.atlassian.jira.license.LicenseDetails;
  10. import com.atlassian.jira.license.LicensedApplications;
  11. import com.atlassian.jira.mock.security.MockSimpleAuthenticationContext;
  12. import com.atlassian.jira.permission.GlobalPermissionKey;
  13. import com.atlassian.jira.security.GlobalPermissionManager;
  14. import com.atlassian.jira.security.JiraAuthenticationContext;
  15. import com.atlassian.jira.security.groups.MockGroupManager;
  16. import com.atlassian.jira.user.MockApplicationUser;
  17. import com.atlassian.jira.user.MockGroup;
  18. import com.atlassian.jira.util.ErrorCollection;
  19. import com.google.common.collect.ImmutableSet;
  20. import com.google.common.collect.Lists;
  21. import com.google.common.collect.Sets;
  22. import org.hamcrest.Matchers;
  23. import org.junit.Before;
  24. import org.junit.Test;
  25. import org.junit.runner.RunWith;
  26. import org.mockito.Mock;
  27. import org.mockito.Mockito;
  28. import org.mockito.runners.MockitoJUnitRunner;
  29. import java.util.Set;
  30. import static com.atlassian.jira.util.NoopI18nHelper.makeTranslation;
  31. import static org.hamcrest.MatcherAssert.assertThat;
  32. import static org.mockito.Mockito.verify;
  33. import static org.mockito.Mockito.when;
  34. @RunWith(MockitoJUnitRunner.class)
  35. public class TestDefaultApplicationRoleAdminService {
  36. private static final MockApplicationUser TEST_USER = new MockApplicationUser("User");
  37. private static final ApplicationKey TEST_APPLICATION_KEY = ApplicationKey.valueOf("Role");
  38. private static final ApplicationKey NONE_APPLICATION_KEY = ApplicationKey.valueOf("None");
  39. private static final Group GROUP_1 = new MockGroup("Group 1");
  40. private static final Group GROUP_2 = new MockGroup("Group 2");
  41. private static final Group GROUP_3 = new MockGroup("Group 3");
  42. private static final Group GROUP_BAD = new MockGroup("Bad Group");
  43. private static final ApplicationRole TEST_ROLE = new MockApplicationRole()
  44. .key(TEST_APPLICATION_KEY)
  45. .groups(GROUP_1, GROUP_2, GROUP_3);
  46. private MockGroupManager groupManager = new MockGroupManager();
  47. @Mock
  48. private ApplicationRoleManager applicationRoleManager;
  49. @Mock
  50. private GlobalPermissionManager permissionManager;
  51. @Mock
  52. private JiraLicenseManager jiraLicenseManager;
  53. @Mock
  54. private LicenseDetails licenseDetails;
  55. @Mock
  56. private LicensedApplications licensedApplications;
  57. private JiraAuthenticationContext context =
  58. MockSimpleAuthenticationContext.createNoopContext(TEST_USER);
  59. private DefaultApplicationRoleAdminService adminService;
  60. @Before
  61. public void setUp() {
  62. groupManager.addGroup(GROUP_1).addGroup(GROUP_2).addGroup(GROUP_3);
  63. adminService = new DefaultApplicationRoleAdminService(groupManager, applicationRoleManager, context,
  64. permissionManager);
  65. //User is an admin.
  66. when(permissionManager.hasPermission(GlobalPermissionKey.ADMINISTER, TEST_USER))
  67. .thenReturn(true);
  68. when(applicationRoleManager.getRole(TEST_APPLICATION_KEY)).thenReturn(Option.some(TEST_ROLE));
  69. when(applicationRoleManager.getRole(NONE_APPLICATION_KEY)).thenReturn(Option.none(ApplicationRole.class));
  70. when(applicationRoleManager.isRoleInstalledAndLicensed(TEST_APPLICATION_KEY)).thenReturn(true);
  71. }
  72. @Test
  73. public void getRolesFailsWithForbiddenForNonUsers() {
  74. when(permissionManager.hasPermission(GlobalPermissionKey.ADMINISTER, TEST_USER))
  75. .thenReturn(false);
  76. assertForbidden(adminService.getRoles());
  77. }
  78. @Test
  79. public void getRolesReturnsRolesCorrectly() {
  80. final ApplicationRole role1 = new MockApplicationRole()
  81. .key("idOne")
  82. .name("name1")
  83. .groups(GROUP_1, GROUP_2)
  84. .defaultGroups(GROUP_1);
  85. final ApplicationRole role2 = new MockApplicationRole()
  86. .key("idTwo")
  87. .name("name2");
  88. when(applicationRoleManager.getRoles())
  89. .thenReturn(Sets.newHashSet(role1, role2));
  90. final ServiceOutcome<Set<ApplicationRole>> roles = adminService.getRoles();
  91. final ValueMatcher<Set<ApplicationRole>> matcher = ServiceOutcomeMatchers.equalTo(
  92. Matchers.containsInAnyOrder(new ApplicationRoleMatcher().merge(role1), new ApplicationRoleMatcher().merge(role2)));
  93. assertThat(roles, matcher);
  94. }
  95. @Test
  96. public void getRoleFailsWithForbiddenForNonUsers() {
  97. when(permissionManager.hasPermission(GlobalPermissionKey.ADMINISTER, TEST_USER))
  98. .thenReturn(false);
  99. final ServiceOutcome<ApplicationRole> outsome = adminService.getRole(ApplicationKey.valueOf("w"));
  100. assertForbidden(outsome);
  101. }
  102. @Test
  103. public void getRoleReturnsRoleThatExistsAndFiltersInvalidGroups() {
  104. final ServiceOutcome<ApplicationRole> role = adminService.getRole(TEST_APPLICATION_KEY);
  105. //Need the explict Type for JDK6.
  106. assertThat(role, ServiceOutcomeMatchers.equalTo(new ApplicationRoleMatcher().merge(TEST_ROLE)));
  107. }
  108. @Test
  109. public void getRoleReturnsErrorOnRoleThatDoesNotExist() {
  110. final ServiceOutcome<ApplicationRole> role = adminService.getRole(NONE_APPLICATION_KEY);
  111. assertRoleDoesNotExist(NONE_APPLICATION_KEY, role);
  112. }
  113. @Test
  114. public void setRoleFailsForNonAdmin() {
  115. //User is an admin.
  116. when(permissionManager.hasPermission(GlobalPermissionKey.ADMINISTER, TEST_USER))
  117. .thenReturn(false);
  118. assertForbidden(adminService.setRole(TEST_ROLE));
  119. }
  120. @Test
  121. public void setRoleFailsWhenRoleDoesNotExist() {
  122. final MockApplicationRole iDontExist = new MockApplicationRole().key(NONE_APPLICATION_KEY);
  123. final ServiceOutcome<ApplicationRole> outcome = adminService.setRole(iDontExist);
  124. assertRoleDoesNotExist(NONE_APPLICATION_KEY, outcome);
  125. }
  126. @Test
  127. public void setRoleFailsWhenGroupsDontExist() {
  128. ApplicationRole expectedRole = TEST_ROLE.withGroups(groups(GROUP_BAD), groups());
  129. //Save the groups.
  130. final ServiceOutcome<ApplicationRole> outcome = adminService.setRole(expectedRole);
  131. assertThat(outcome, ServiceOutcomeMatchers.errorMatcher()
  132. .addReason(ErrorCollection.Reason.VALIDATION_FAILED)
  133. .addError("groups", makeTranslation("application.role.service.group.does.not.exist", GROUP_BAD.getName())));
  134. }
  135. @Test
  136. public void setRoleSavesWhenGroupsExist() {
  137. ApplicationRole expectedRole = TEST_ROLE.withGroups(groups(GROUP_1, GROUP_2), groups());
  138. final ApplicationRoleMatcher expectedMatcher = new ApplicationRoleMatcher().merge(expectedRole);
  139. //All groups exist.
  140. when(applicationRoleManager.setRole(Mockito.argThat(expectedMatcher))).thenReturn(expectedRole);
  141. //Save the groups.
  142. final ServiceOutcome<ApplicationRole> outcome = adminService.setRole(expectedRole);
  143. //Have the groups been saved.
  144. verify(applicationRoleManager).setRole(Mockito.argThat(expectedMatcher));
  145. assertThat(outcome, ServiceOutcomeMatchers.equalTo(expectedMatcher));
  146. }
  147. @Test
  148. public void setRolesFailsForNonAdmin() {
  149. //User is an admin.
  150. when(permissionManager.hasPermission(GlobalPermissionKey.ADMINISTER, TEST_USER))
  151. .thenReturn(false);
  152. assertForbidden(adminService.setRoles(Lists.newArrayList(TEST_ROLE)));
  153. }
  154. @Test
  155. public void setRolesFailsWhenRoleDoesNotExist() {
  156. final MockApplicationRole iDontExist = new MockApplicationRole().key(NONE_APPLICATION_KEY);
  157. final ServiceOutcome<Set<ApplicationRole>> outcome = adminService.setRoles(Lists.newArrayList(iDontExist));
  158. assertRoleDoesNotExist(NONE_APPLICATION_KEY, outcome);
  159. }
  160. @Test
  161. public void setRolesFailsWhenGroupsDontExist() {
  162. ApplicationRole expectedRole = TEST_ROLE.withGroups(groups(GROUP_BAD), groups());
  163. //Save the groups.
  164. final ServiceOutcome<Set<ApplicationRole>> outcome = adminService.setRoles(Lists.newArrayList(expectedRole));
  165. assertThat(outcome, ServiceOutcomeMatchers.errorMatcher()
  166. .addReason(ErrorCollection.Reason.VALIDATION_FAILED)
  167. .addError("groups", makeTranslation("application.role.service.group.does.not.exist", GROUP_BAD.getName())));
  168. }
  169. private void assertRoleDoesNotExist(final ApplicationKey key, final ServiceOutcome<?> role) {
  170. assertThat(role, ServiceOutcomeMatchers.errorMatcher()
  171. .addErrorMessage(makeTranslation("application.role.service.role.does.not.exist", key.value()))
  172. .addReason(ErrorCollection.Reason.NOT_FOUND));
  173. }
  174. private void assertForbidden(final ServiceOutcome<?> outcome) {
  175. assertThat(outcome, ServiceOutcomeMatchers.errorMatcher()
  176. .addErrorMessage(makeTranslation("application.role.service.permission.denied"))
  177. .addReason(ErrorCollection.Reason.FORBIDDEN));
  178. }
  179. private static Set<Group> groups(Group... groups) {
  180. return ImmutableSet.copyOf(groups);
  181. }
  182. private static Set<Group> groups() {
  183. return ImmutableSet.of();
  184. }
  185. }