PageRenderTime 51ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/jira-project/jira-components/jira-plugins/jira-sal-plugin/src/test/java/com/atlassian/sal/jira/user/TestDefaultUserManager.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 310 lines | 224 code | 85 blank | 1 comment | 0 complexity | ecd047716729cfb19082a3fb40da533d MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.sal.jira.user;
  2. import com.atlassian.crowd.embedded.api.CrowdService;
  3. import com.atlassian.crowd.embedded.api.Group;
  4. import com.atlassian.crowd.embedded.api.Query;
  5. import com.atlassian.crowd.embedded.api.User;
  6. import com.atlassian.crowd.exception.FailedAuthenticationException;
  7. import com.atlassian.crowd.model.user.UserTemplate;
  8. import com.atlassian.crowd.search.query.entity.GroupQuery;
  9. import com.atlassian.crowd.search.query.entity.restriction.TermRestriction;
  10. import com.atlassian.jira.avatar.Avatar;
  11. import com.atlassian.jira.avatar.AvatarService;
  12. import com.atlassian.jira.security.GlobalPermissionManager;
  13. import com.atlassian.jira.security.JiraAuthenticationContext;
  14. import com.atlassian.jira.user.ApplicationUser;
  15. import com.atlassian.jira.user.MockApplicationUser;
  16. import com.atlassian.jira.user.util.UserManager;
  17. import com.atlassian.sal.api.user.UserProfile;
  18. import com.google.common.collect.Lists;
  19. import org.junit.Before;
  20. import org.junit.Test;
  21. import org.junit.runner.RunWith;
  22. import org.mockito.ArgumentCaptor;
  23. import org.mockito.Mock;
  24. import org.mockito.runners.MockitoJUnitRunner;
  25. import javax.servlet.http.HttpServletRequest;
  26. import java.net.URI;
  27. import static org.hamcrest.MatcherAssert.assertThat;
  28. import static org.hamcrest.core.IsCollectionContaining.hasItems;
  29. import static org.junit.Assert.assertEquals;
  30. import static org.junit.Assert.assertFalse;
  31. import static org.junit.Assert.assertNull;
  32. import static org.junit.Assert.assertTrue;
  33. import static org.mockito.Matchers.any;
  34. import static org.mockito.Mockito.mock;
  35. import static org.mockito.Mockito.times;
  36. import static org.mockito.Mockito.verify;
  37. import static org.mockito.Mockito.when;
  38. @RunWith(MockitoJUnitRunner.class)
  39. public class TestDefaultUserManager {
  40. @Mock
  41. private UserManager userManager;
  42. @Mock
  43. private JiraAuthenticationContext jiraAuthenticationContext;
  44. @Mock
  45. private CrowdService crowdService;
  46. @Mock
  47. private GlobalPermissionManager globalPermissionManager;
  48. @Mock
  49. private AvatarService avatarService;
  50. private DefaultUserManager defaultUserManager;
  51. @Before
  52. public void setUp() throws Exception {
  53. defaultUserManager = new DefaultUserManager(globalPermissionManager, jiraAuthenticationContext, crowdService, avatarService, userManager);
  54. }
  55. @Test
  56. public void testGetRemoteUsername() {
  57. ApplicationUser mockUser = new MockApplicationUser("tommy");
  58. when(jiraAuthenticationContext.getUser()).thenReturn(null).thenReturn(mockUser);
  59. String username = defaultUserManager.getRemoteUsername();
  60. assertNull(username);
  61. username = defaultUserManager.getRemoteUsername();
  62. assertEquals("tommy", username);
  63. verify(jiraAuthenticationContext, times(2)).getUser();
  64. }
  65. @Test
  66. public void testIsSystemAdminNoUser() {
  67. when(userManager.getUserByName("tommy")).thenReturn(null);
  68. boolean systemAdmin = defaultUserManager.isSystemAdmin("tommy");
  69. assertFalse(systemAdmin);
  70. verify(userManager).getUserByName("tommy");
  71. }
  72. @Test
  73. public void testIsSystemAdminNoPermissions() {
  74. final ApplicationUser mockUser = new MockApplicationUser("tommy");
  75. when(globalPermissionManager.hasPermission(44, mockUser)).thenReturn(false);
  76. when(userManager.getUserByName("tommy")).thenReturn(mockUser);
  77. boolean systemAdmin = defaultUserManager.isSystemAdmin("tommy");
  78. assertFalse(systemAdmin);
  79. verify(userManager).getUserByName("tommy");
  80. verify(globalPermissionManager).hasPermission(44, mockUser);
  81. }
  82. @Test
  83. public void testIsSystemAdmin() {
  84. final ApplicationUser mockUser = new MockApplicationUser("tommy");
  85. when(globalPermissionManager.hasPermission(44, mockUser)).thenReturn(true);
  86. when(userManager.getUserByName("tommy")).thenReturn(mockUser);
  87. boolean systemAdmin = defaultUserManager.isSystemAdmin("tommy");
  88. assertTrue(systemAdmin);
  89. verify(userManager).getUserByName("tommy");
  90. verify(globalPermissionManager).hasPermission(44, mockUser);
  91. }
  92. @Test
  93. public void testGetRemoteUserRequest() {
  94. final ApplicationUser mockUser = new MockApplicationUser("tommy");
  95. when(jiraAuthenticationContext.getUser()).thenReturn(mockUser);
  96. final HttpServletRequest mockHttpServletRequest = mock(HttpServletRequest.class);
  97. final String remoteUsername = defaultUserManager.getRemoteUsername(mockHttpServletRequest);
  98. assertEquals("tommy", remoteUsername);
  99. verify(jiraAuthenticationContext).getUser();
  100. }
  101. @Test
  102. public void testGetRemoteUserRequestNoUser() {
  103. when(jiraAuthenticationContext.getUser()).thenReturn(null);
  104. final HttpServletRequest mockHttpServletRequest = mock(HttpServletRequest.class);
  105. final String remoteUsername = defaultUserManager.getRemoteUsername(mockHttpServletRequest);
  106. assertNull(remoteUsername);
  107. verify(jiraAuthenticationContext).getUser();
  108. }
  109. @Test
  110. public void testUserProfile_userdoesntexist() throws Exception {
  111. when(crowdService.getUser("tommy")).thenReturn(null);
  112. final UserProfile profile = defaultUserManager.getUserProfile("tommy");
  113. assertNull(profile);
  114. }
  115. @Test
  116. public void testUserProfile() throws Exception {
  117. final MockApplicationUser mockUser = new MockApplicationUser("tommy", "Tommy Golightly", "tommy@example.com");
  118. when(userManager.getUserByName("tommy")).thenReturn(mockUser);
  119. final UserProfile profile = defaultUserManager.getUserProfile("tommy");
  120. assertEquals("tommy@example.com", profile.getEmail());
  121. assertEquals("tommy", profile.getUsername());
  122. assertEquals("Tommy Golightly", profile.getFullName());
  123. assertEquals("/secure/ViewProfile.jspa?name=tommy", profile.getProfilePageUri().toString());
  124. }
  125. @Test
  126. public void testUserProfile_crazyName() throws Exception {
  127. final String username = "=?&!; #";
  128. final ApplicationUser mockUser = new MockApplicationUser(username);
  129. when(userManager.getUserByName(username)).thenReturn(mockUser);
  130. final UserProfile profile = defaultUserManager.getUserProfile(username);
  131. assertEquals(username, profile.getUsername());
  132. assertEquals("/secure/ViewProfile.jspa?name=%3D%3F%26%21%3B+%23", profile.getProfilePageUri().toString());
  133. }
  134. @Test
  135. public void testUserProfile_noAvatar() throws Exception {
  136. final ApplicationUser mockUser = new MockApplicationUser("tommy");
  137. when(userManager.getUserByName("tommy")).thenReturn(mockUser);
  138. final ApplicationUser remoteUser = mock(ApplicationUser.class);
  139. when(jiraAuthenticationContext.getUser()).thenReturn(remoteUser);
  140. when(avatarService.getAvatarURL(remoteUser, mockUser, Avatar.Size.LARGE)).thenReturn(null);
  141. final UserProfile profile = defaultUserManager.getUserProfile("tommy");
  142. final URI picture = profile.getProfilePictureUri();
  143. assertNull(picture);
  144. }
  145. @Test
  146. public void testUserProfile_avatar() throws Exception {
  147. final ApplicationUser mockUser = new MockApplicationUser("tommy");
  148. when(userManager.getUserByName("tommy")).thenReturn(mockUser);
  149. when(jiraAuthenticationContext.getUser()).thenReturn(mockUser);
  150. final URI avatarUri = new URI("http://example.invalid/secure/useravatar?avatarId=2000");
  151. when(avatarService.getAvatarURL(mockUser, mockUser, Avatar.Size.LARGE)).thenReturn(avatarUri);
  152. // when(avatarService.hasCustomUserAvatar(mockUser, "tommy")).thenReturn(false);
  153. final UserProfile profile = defaultUserManager.getUserProfile("tommy");
  154. final URI picture = profile.getProfilePictureUri();
  155. assertEquals(avatarUri, picture);
  156. }
  157. @Test
  158. public void testUserProfile_avatarServiceGetsLoggedInUser() {
  159. final ApplicationUser avatarUser = new MockApplicationUser("tommy");
  160. when(userManager.getUserByName("tommy")).thenReturn(avatarUser);
  161. final ApplicationUser remoteUser = mock(ApplicationUser.class);
  162. when(jiraAuthenticationContext.getUser()).thenReturn(remoteUser);
  163. defaultUserManager.getUserProfile("tommy").getProfilePictureUri(48, 48);
  164. verify(avatarService).getAvatarURL(remoteUser, avatarUser, Avatar.Size.LARGE);
  165. }
  166. @Test
  167. public void testAuthenticate_goodUser()
  168. throws FailedAuthenticationException {
  169. final UserTemplate mockUser = new UserTemplate("user1");
  170. when(crowdService.authenticate("user1", "password1")).thenReturn(mockUser);
  171. assertTrue(defaultUserManager.authenticate("user1", "password1"));
  172. verify(crowdService).authenticate("user1", "password1");
  173. }
  174. @Test
  175. public void testAuthenticate_nonExistingUser()
  176. throws FailedAuthenticationException {
  177. when(crowdService.authenticate("user1", "password1")).thenThrow(new FailedAuthenticationException("username/password is incorrect"));
  178. assertFalse(defaultUserManager.authenticate("user1", "password1"));
  179. verify(crowdService).authenticate("user1", "password1");
  180. }
  181. @Test
  182. public void testIsUserInGroup_goodUser() {
  183. final User mockUser = mock(User.class);
  184. final Group mockGroup = mock(Group.class);
  185. when(crowdService.getUser("user1")).thenReturn(mockUser);
  186. when(crowdService.getGroup("group1")).thenReturn(mockGroup);
  187. when(crowdService.isUserMemberOfGroup(mockUser, mockGroup)).thenReturn(true);
  188. assertTrue(defaultUserManager.isUserInGroup("user1", "group1"));
  189. verify(crowdService).getUser("user1");
  190. verify(crowdService).getGroup("group1");
  191. verify(crowdService).isUserMemberOfGroup(mockUser, mockGroup);
  192. }
  193. @Test
  194. public void testIsUserInGroup_nonExistingUser() {
  195. final Group mockGroup = mock(Group.class);
  196. when(crowdService.getUser("user1")).thenReturn(null);
  197. when(crowdService.getGroup("group1")).thenReturn(mockGroup);
  198. assertFalse(defaultUserManager.isUserInGroup("user1", "group1"));
  199. verify(crowdService).getUser("user1");
  200. verify(crowdService).getGroup("group1");
  201. }
  202. @Test
  203. public void testIsUserInGroup_nonExistingGroup() {
  204. final User mockUser = mock(User.class);
  205. when(crowdService.getUser("user1")).thenReturn(mockUser);
  206. when(crowdService.getGroup("group1")).thenReturn(null);
  207. assertFalse(defaultUserManager.isUserInGroup("user1", "group1"));
  208. verify(crowdService).getUser("user1");
  209. verify(crowdService).getGroup("group1");
  210. }
  211. @Test
  212. public void testfindGroupNamesByPrefixQuery() {
  213. String prefix = "g";
  214. int startIndex = 0;
  215. int maxResults = 100;
  216. when(crowdService.search(any(Query.class))).thenReturn(Lists.newArrayList("group", "group2"));
  217. assertThat(defaultUserManager.findGroupNamesByPrefix(prefix, startIndex, maxResults), hasItems("group", "group2"));
  218. ArgumentCaptor argument = ArgumentCaptor.forClass(GroupQuery.class);
  219. verify(crowdService).search((Query<Object>) argument.capture());
  220. Query<String> actualQuery = (Query<String>) argument.getValue();
  221. assertEquals(prefix, ((TermRestriction) actualQuery.getSearchRestriction()).getValue());
  222. assertEquals(startIndex, actualQuery.getStartIndex());
  223. assertEquals(maxResults, actualQuery.getMaxResults());
  224. }
  225. }