/rpc-jira-plugin/src/test/java/com/atlassian/jira/rpc/soap/service/TestUserServiceImplWithExternalManagement.java

https://bitbucket.org/atlassianlabs/rpc-jira-plugin · Java · 192 lines · 167 code · 24 blank · 1 comment · 0 complexity · 4f1801b678e790423d87cf00b1a08ac8 MD5 · raw file

  1. package com.atlassian.jira.rpc.soap.service;
  2. import com.atlassian.crowd.embedded.api.CrowdService;
  3. import com.atlassian.crowd.embedded.api.Group;
  4. import com.atlassian.crowd.embedded.api.User;
  5. import com.atlassian.crowd.embedded.impl.ImmutableGroup;
  6. import com.atlassian.crowd.exception.OperationNotPermittedException;
  7. import com.atlassian.crowd.exception.embedded.InvalidGroupException;
  8. import com.atlassian.jira.bc.filter.SearchRequestService;
  9. import com.atlassian.jira.bc.group.GroupService;
  10. import com.atlassian.jira.bc.user.UserServiceResultHelper;
  11. import com.atlassian.jira.component.ComponentAccessor;
  12. import com.atlassian.jira.config.properties.APKeys;
  13. import com.atlassian.jira.config.properties.ApplicationProperties;
  14. import com.atlassian.jira.exception.CreateException;
  15. import com.atlassian.jira.exception.PermissionException;
  16. import com.atlassian.jira.mock.component.MockComponentWorker;
  17. import com.atlassian.jira.rpc.exception.RemoteException;
  18. import com.atlassian.jira.rpc.mock.MockUser;
  19. import com.atlassian.jira.rpc.soap.util.MockRemoteEntityFactory;
  20. import com.atlassian.jira.rpc.soap.util.RemoteEntityFactory;
  21. import com.atlassian.jira.security.GlobalPermissionManager;
  22. import com.atlassian.jira.security.PermissionManager;
  23. import com.atlassian.jira.security.Permissions;
  24. import com.atlassian.jira.security.groups.GroupManager;
  25. import com.atlassian.jira.user.util.UserUtil;
  26. import com.atlassian.jira.util.ErrorCollection;
  27. import com.atlassian.jira.util.SimpleErrorCollection;
  28. import org.junit.Before;
  29. import org.junit.Test;
  30. import java.util.Collections;
  31. import static org.junit.Assert.fail;
  32. import static org.mockito.Mockito.*;
  33. public class TestUserServiceImplWithExternalManagement
  34. {
  35. private GroupManager mockGroupManager;
  36. private PermissionManager mockPermissionManager;
  37. private ApplicationProperties mockApplicationProperties;
  38. private com.atlassian.jira.bc.user.UserService mockUserService;
  39. private MockComponentWorker mockComponentWorker;
  40. private UserService userService;
  41. private User user;
  42. private User user2;
  43. private User user3;
  44. @Before
  45. public void setUp() throws Exception
  46. {
  47. mockComponentWorker = new MockComponentWorker();
  48. ComponentAccessor.initialiseWorker(mockComponentWorker);
  49. mockPermissionManager = mock(PermissionManager.class);
  50. mockApplicationProperties = mock(ApplicationProperties.class);
  51. mockGroupManager = mock(GroupManager.class);
  52. mockUserService = mock(com.atlassian.jira.bc.user.UserService.class);
  53. final RemoteEntityFactory mockRemoteEntityFactory = new MockRemoteEntityFactory();
  54. user = new MockUser("driver", "Test User", "test@test.com");
  55. user2 = new MockUser("driver2", "Test User", "test@test.com");
  56. user3 = new MockUser("driver3", "Test User", "test@test.com");
  57. userService = new UserServiceImpl
  58. (
  59. mock(SearchRequestService.class), null, mockGroupManager, mockPermissionManager,
  60. mockApplicationProperties, mockUserService, mock(GroupService.class), mockRemoteEntityFactory,
  61. mock(CrowdService.class), mock(GlobalPermissionManager.class), mock(UserUtil.class)
  62. );
  63. }
  64. @Test
  65. public void testCreateUserWithExternalUserManagement() throws CreateException, PermissionException
  66. {
  67. com.atlassian.jira.bc.user.UserService.CreateUserValidationResult result =
  68. UserServiceResultHelper.getCreateUserValidationResult
  69. (
  70. "testuser",
  71. "testpassword",
  72. "user@email.com",
  73. "first last"
  74. );
  75. when(mockUserService.
  76. validateCreateUserForAdminPasswordRequired
  77. (
  78. user,
  79. "testuser",
  80. "testpassword",
  81. "testpassword",
  82. "user@email.com",
  83. "first last"
  84. )
  85. ).thenReturn(result);
  86. when(mockUserService.createUserWithNotification(result)).thenReturn(user);
  87. try
  88. {
  89. userService.createUser(user, "testuser", "testpassword", "first last", "user@email.com");
  90. }
  91. catch (RemoteException e)
  92. {
  93. fail("failed creating user without ext mgmt turned on");
  94. }
  95. ErrorCollection errors = new SimpleErrorCollection();
  96. errors.addErrorMessage("content");
  97. com.atlassian.jira.bc.user.UserService.CreateUserValidationResult errorResult =
  98. UserServiceResultHelper.getCreateUserValidationResult(errors);
  99. when(mockUserService.
  100. validateCreateUserForAdminPasswordRequired
  101. (
  102. user,
  103. "testuser1",
  104. "testpassword",
  105. "testpassword",
  106. "user@email.com",
  107. "first last"
  108. )).
  109. thenReturn(errorResult);
  110. try
  111. {
  112. userService.createUser(user, "testuser1", "testpassword", "first last", "user@email.com");
  113. fail("ext mgmt is turned on. Creation of user should have failed.");
  114. }
  115. catch (RemoteException e){}
  116. }
  117. @Test
  118. public void testDeleteUserWithExternalUserManagement()
  119. {
  120. com.atlassian.jira.bc.user.UserService.DeleteUserValidationResult result =
  121. UserServiceResultHelper.getDeleteUserValidationResult(user2);
  122. when(mockUserService.validateDeleteUser(user, user2.getName())).thenReturn(result);
  123. try
  124. {
  125. userService.deleteUser(user, user2.getName());
  126. }
  127. catch (RemoteException e)
  128. {
  129. fail("failed deleting user with ext mgmt turned off");
  130. }
  131. verify(mockUserService).removeUser(user, result);
  132. // just checking error - real external management is tested in UserUtil
  133. ErrorCollection errors = new SimpleErrorCollection();
  134. errors.addErrorMessage("error message");
  135. result = UserServiceResultHelper.getDeleteUserValidationResult(errors);
  136. when(mockUserService.validateDeleteUser(user, user3.getName())).thenReturn(result);
  137. try
  138. {
  139. userService.deleteUser(user, user3.getName());
  140. fail("ext mgmt is turned on. Deletion of user should have failed.");
  141. }
  142. catch (RemoteException e){}
  143. }
  144. @Test
  145. public void testCreateGroupWithExternalUserManagement() throws OperationNotPermittedException, InvalidGroupException
  146. {
  147. when(mockGroupManager.createGroup(("test-group"))).thenReturn(new ImmutableGroup("test-group"));
  148. when(mockPermissionManager.hasPermission(Permissions.ADMINISTER, user)).thenReturn(true);
  149. when(mockApplicationProperties.getOption(APKeys.JIRA_OPTION_USER_EXTERNALMGT)).thenReturn(false);
  150. final GlobalPermissionManager mockGlobalPermissionManager = mock(GlobalPermissionManager.class);
  151. when(mockGlobalPermissionManager.getGroupsWithPermission(Permissions.USE)).thenReturn(Collections.<Group>emptyList());
  152. try
  153. {
  154. userService.createGroup(user, "test-group", null);
  155. }
  156. catch (RemoteException e)
  157. {
  158. fail("failed creating group without ext mgmt turned on: " + e.getMessage());
  159. }
  160. when(mockApplicationProperties.getOption(APKeys.JIRA_OPTION_USER_EXTERNALMGT)).thenReturn(true);
  161. try
  162. {
  163. userService.createGroup(user, "testgroup2", null);
  164. fail("ext mgmt is turned on. Creation of group should have failed.");
  165. }
  166. catch (RemoteException e){}
  167. }
  168. }