PageRenderTime 62ms CodeModel.GetById 34ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://bitbucket.org/atlassianlabs/rpc-jira-plugin
Java | 291 lines | 219 code | 57 blank | 15 comment | 0 complexity | 20306d0d0dc4c703f6975a03e86f3945 MD5 | raw file
  1. package com.atlassian.jira.rpc.soap.service;
  2. import com.atlassian.crowd.embedded.api.User;
  3. import com.atlassian.jira.bc.filter.SearchRequestService;
  4. import com.atlassian.jira.bc.issue.search.SearchService;
  5. import com.atlassian.jira.component.ComponentAccessor;
  6. import com.atlassian.jira.issue.AttachmentManager;
  7. import com.atlassian.jira.issue.CustomFieldManager;
  8. import com.atlassian.jira.issue.Issue;
  9. import com.atlassian.jira.issue.IssueManager;
  10. import com.atlassian.jira.issue.search.SearchException;
  11. import com.atlassian.jira.issue.search.SearchProvider;
  12. import com.atlassian.jira.issue.search.SearchRequest;
  13. import com.atlassian.jira.issue.search.SearchResults;
  14. import com.atlassian.jira.mock.component.MockComponentWorker;
  15. import com.atlassian.jira.plugin.searchrequestview.SearchRequestParams;
  16. import com.atlassian.jira.plugin.searchrequestview.auth.Authorizer;
  17. import com.atlassian.jira.project.ProjectManager;
  18. import com.atlassian.jira.rpc.exception.RemoteException;
  19. import com.atlassian.jira.rpc.mock.MockIssue;
  20. import com.atlassian.jira.rpc.mock.MockUser;
  21. import com.atlassian.jira.rpc.soap.beans.RemoteIssue;
  22. import com.atlassian.jira.rpc.soap.util.SoapUtilsBean;
  23. import com.atlassian.jira.security.PermissionManager;
  24. import com.atlassian.jira.user.ApplicationUsers;
  25. import com.atlassian.jira.user.util.UserManager;
  26. import com.atlassian.jira.util.MessageSetImpl;
  27. import com.atlassian.jira.web.bean.PagerFilter;
  28. import com.atlassian.query.QueryImpl;
  29. import com.atlassian.query.clause.TerminalClauseImpl;
  30. import junit.framework.TestCase;
  31. import org.easymock.EasyMock;
  32. import java.util.Collections;
  33. import static org.easymock.EasyMock.createMock;
  34. import static org.easymock.EasyMock.expect;
  35. /**
  36. * @since v4.0
  37. */
  38. public class TestSearchServiceImpl extends TestCase
  39. {
  40. private IssueManager issueManager;
  41. private PermissionManager permissionManager;
  42. private User user;
  43. private MockComponentWorker mockComponentWorker;
  44. private UserManager mockUserManager;
  45. protected void setUp()
  46. {
  47. mockUserManager = createMock(UserManager.class);
  48. mockComponentWorker = new MockComponentWorker();
  49. ComponentAccessor.initialiseWorker(mockComponentWorker);
  50. mockComponentWorker.addMock(UserManager.class, mockUserManager);
  51. user = new MockUser("admin");
  52. expect(mockUserManager.getUserByName("admin")).andStubReturn(ApplicationUsers.from(user));
  53. issueManager = createMock(IssueManager.class);
  54. expect(issueManager.getIssueObject(EasyMock.anyLong())).andStubReturn(new MockIssue());
  55. permissionManager = createMock(PermissionManager.class);
  56. expect(permissionManager.hasPermission(EasyMock.anyInt(), EasyMock.<Issue>anyObject(), EasyMock.same(user))).andStubReturn(true);
  57. }
  58. protected void tearDown()
  59. {
  60. ComponentAccessor.initialiseWorker(null);
  61. }
  62. public void testNormalQuery() throws Exception
  63. {
  64. final String jqlSearch = "";
  65. final int maxNumResults = 10;
  66. final QueryImpl query = new QueryImpl();
  67. final SearchResults results = new SearchResults(Collections.<Issue>emptyList(), new PagerFilter(maxNumResults));
  68. final SearchService.ParseResult parseResult = new SearchService.ParseResult(query, new MessageSetImpl());
  69. // return OK authorization for any params
  70. final Authorizer requestAuthorizer = createMock(Authorizer.class);
  71. expect(requestAuthorizer.isSearchRequestAuthorized(EasyMock.eq(user), (SearchRequest) EasyMock.anyObject(), (SearchRequestParams) EasyMock.anyObject())).andReturn(Authorizer.Result.OK);
  72. // set up the SearchService facade
  73. final com.atlassian.jira.bc.issue.search.SearchService theRealSearchService = createMock(SearchService.class);
  74. expect(theRealSearchService.parseQuery(EasyMock.eq(user), EasyMock.eq(jqlSearch))).andReturn(parseResult);
  75. expect(theRealSearchService.validateQuery(EasyMock.eq(user), EasyMock.eq(parseResult.getQuery()))).andReturn(new MessageSetImpl());
  76. expect(theRealSearchService.search(EasyMock.eq(user), EasyMock.eq(parseResult.getQuery()), (PagerFilter) EasyMock.anyObject())).andReturn(results);
  77. EasyMock.replay(requestAuthorizer, theRealSearchService);
  78. final SearchRequestService searchRequestService = null;
  79. final CustomFieldManager customFieldManager = null;
  80. final ProjectManager projectManager = null;
  81. final AttachmentManager attachmentManager = null;
  82. final SearchProvider searchProvider = null;
  83. final SoapUtilsBean soapUtilsBean = null;
  84. final SearchServiceImpl searchService = new SearchServiceImpl(searchProvider, searchRequestService, customFieldManager, soapUtilsBean, projectManager, attachmentManager, requestAuthorizer, theRealSearchService, issueManager, permissionManager);
  85. final RemoteIssue[] resultIssues = searchService.getIssuesFromJqlSearch(user, jqlSearch, maxNumResults);
  86. assertEquals(0, resultIssues.length);
  87. EasyMock.verify(requestAuthorizer, theRealSearchService);
  88. }
  89. public void testSearchException() throws Exception
  90. {
  91. final String jqlSearch = "";
  92. final int maxNumResults = 10;
  93. final QueryImpl query = new QueryImpl();
  94. final SearchResults results = new SearchResults(Collections.<Issue>emptyList(), new PagerFilter(maxNumResults));
  95. final SearchService.ParseResult parseResult = new SearchService.ParseResult(query, new MessageSetImpl());
  96. // return OK authorization for any params
  97. final Authorizer requestAuthorizer = createMock(Authorizer.class);
  98. expect(requestAuthorizer.isSearchRequestAuthorized(EasyMock.eq(user), (SearchRequest) EasyMock.anyObject(), (SearchRequestParams) EasyMock.anyObject())).andReturn(Authorizer.Result.OK);
  99. // set up the SearchService facade
  100. final com.atlassian.jira.bc.issue.search.SearchService theRealSearchService = createMock(SearchService.class);
  101. expect(theRealSearchService.parseQuery(EasyMock.eq(user), EasyMock.eq(jqlSearch))).andReturn(parseResult);
  102. expect(theRealSearchService.validateQuery(EasyMock.eq(user), EasyMock.eq(parseResult.getQuery()))).andReturn(new MessageSetImpl());
  103. expect(theRealSearchService.search(EasyMock.eq(user), EasyMock.eq(parseResult.getQuery()), (PagerFilter) EasyMock.anyObject())).andThrow(new SearchException("error message"));
  104. EasyMock.replay(requestAuthorizer, theRealSearchService);
  105. final SearchRequestService searchRequestService = null;
  106. final CustomFieldManager customFieldManager = null;
  107. final ProjectManager projectManager = null;
  108. final AttachmentManager attachmentManager = null;
  109. final SearchProvider searchProvider = null;
  110. final SoapUtilsBean soapUtilsBean = null;
  111. final SearchServiceImpl searchService = new SearchServiceImpl(searchProvider, searchRequestService, customFieldManager, soapUtilsBean, projectManager, attachmentManager, requestAuthorizer, theRealSearchService, issueManager, permissionManager);
  112. try
  113. {
  114. searchService.getIssuesFromJqlSearch(user, jqlSearch, maxNumResults);
  115. fail();
  116. }
  117. catch (RemoteException expected)
  118. {
  119. final String errorStart = "Error occurred during searching: Caused by com.atlassian.jira.issue.search.SearchException: error message";
  120. assertTrue(expected.getMessage().startsWith(errorStart));
  121. }
  122. EasyMock.verify(requestAuthorizer, theRealSearchService);
  123. }
  124. public void testBadParse() throws Exception
  125. {
  126. final int maxNumResults = 10;
  127. final String jqlSearch = "bad bad";
  128. final MessageSetImpl messages = new MessageSetImpl();
  129. messages.addErrorMessage("an error message");
  130. final SearchService.ParseResult parseResult = new SearchService.ParseResult(new QueryImpl(), messages);
  131. // set up the SearchService facade
  132. final com.atlassian.jira.bc.issue.search.SearchService theRealSearchService = createMock(SearchService.class);
  133. expect(theRealSearchService.parseQuery(EasyMock.eq(user), EasyMock.eq(jqlSearch))).andReturn(parseResult);
  134. EasyMock.replay(theRealSearchService);
  135. final SearchRequestService searchRequestService = null;
  136. final CustomFieldManager customFieldManager = null;
  137. final SoapUtilsBean soapUtilsBean = null;
  138. final ProjectManager projectManager = null;
  139. final AttachmentManager attachmentManager = null;
  140. final SearchProvider searchProvider = null;
  141. final Authorizer requestAuthorizer = null;
  142. final SearchServiceImpl searchService = new SearchServiceImpl(searchProvider, searchRequestService, customFieldManager, soapUtilsBean, projectManager, attachmentManager, requestAuthorizer, theRealSearchService, issueManager, permissionManager);
  143. try
  144. {
  145. searchService.getIssuesFromJqlSearch(user, jqlSearch, maxNumResults);
  146. fail();
  147. }
  148. catch (RemoteException expected)
  149. {
  150. // expected
  151. assertEquals("Parsing failed: an error message", expected.getMessage().trim());
  152. }
  153. EasyMock.verify(theRealSearchService);
  154. }
  155. public void testAuthorizationFailure() throws Exception
  156. {
  157. final int maxNumResults = 10;
  158. final String jqlSearch = "key is not empty";
  159. final QueryImpl query = new QueryImpl(new TerminalClauseImpl("bob", "happy"));
  160. final Authorizer.Result authorizerResult = new Authorizer.Result()
  161. {
  162. public boolean isOK()
  163. {
  164. return false;
  165. }
  166. public String getReason()
  167. {
  168. return "bob is a bad person";
  169. }
  170. };
  171. final SearchResults results = new SearchResults(Collections.<Issue>emptyList(), new PagerFilter(maxNumResults));
  172. final SearchService.ParseResult parseResult = new SearchService.ParseResult(query, new MessageSetImpl());
  173. // return OK authorization for any params
  174. Authorizer requestAuthorizer = createMock(Authorizer.class);
  175. expect(requestAuthorizer.isSearchRequestAuthorized(EasyMock.eq(user), (SearchRequest) EasyMock.anyObject(), (SearchRequestParams) EasyMock.anyObject())).andReturn(authorizerResult);
  176. // set up the SearchService facade
  177. final com.atlassian.jira.bc.issue.search.SearchService theRealSearchService = createMock(SearchService.class);
  178. expect(theRealSearchService.parseQuery(EasyMock.eq(user), EasyMock.eq(jqlSearch))).andReturn(parseResult);
  179. EasyMock.replay(theRealSearchService, requestAuthorizer);
  180. final SearchRequestService searchRequestService = null;
  181. final CustomFieldManager customFieldManager = null;
  182. final SoapUtilsBean soapUtilsBean = null;
  183. final ProjectManager projectManager = null;
  184. final AttachmentManager attachmentManager = null;
  185. final SearchProvider searchProvider = null;
  186. final SearchServiceImpl searchService = new SearchServiceImpl(searchProvider, searchRequestService, customFieldManager, soapUtilsBean, projectManager, attachmentManager, requestAuthorizer, theRealSearchService, issueManager, permissionManager);
  187. try
  188. {
  189. searchService.getIssuesFromJqlSearch(user, jqlSearch, maxNumResults);
  190. fail();
  191. }
  192. catch (RemoteException expected)
  193. {
  194. // expected
  195. assertEquals("Error occurred during searching: 'bob is a bad person'.", expected.getMessage());
  196. }
  197. EasyMock.verify(theRealSearchService, requestAuthorizer);
  198. }
  199. public void testValidationFailure() throws Exception
  200. {
  201. final String jqlSearch = "";
  202. final int maxNumResults = 10;
  203. final QueryImpl query = new QueryImpl();
  204. final SearchService.ParseResult parseResult = new SearchService.ParseResult(query, new MessageSetImpl());
  205. // return OK authorization for any params
  206. final Authorizer requestAuthorizer = createMock(Authorizer.class);
  207. expect(requestAuthorizer.isSearchRequestAuthorized(EasyMock.eq(user), (SearchRequest) EasyMock.anyObject(), (SearchRequestParams) EasyMock.anyObject())).andReturn(Authorizer.Result.OK);
  208. // set up the SearchService facade
  209. final com.atlassian.jira.bc.issue.search.SearchService theRealSearchService = createMock(SearchService.class);
  210. expect(theRealSearchService.parseQuery(EasyMock.eq(user), EasyMock.eq(jqlSearch))).andReturn(parseResult);
  211. final MessageSetImpl validationMessageSet = new MessageSetImpl();
  212. validationMessageSet.addErrorMessage("error message");
  213. expect(theRealSearchService.validateQuery(EasyMock.eq(user), EasyMock.eq(parseResult.getQuery()))).andReturn(validationMessageSet);
  214. EasyMock.replay(requestAuthorizer, theRealSearchService);
  215. final SearchRequestService searchRequestService = null;
  216. final CustomFieldManager customFieldManager = null;
  217. final ProjectManager projectManager = null;
  218. final AttachmentManager attachmentManager = null;
  219. final SearchProvider searchProvider = null;
  220. final SoapUtilsBean soapUtilsBean = null;
  221. final SearchServiceImpl searchService = new SearchServiceImpl(searchProvider, searchRequestService, customFieldManager, soapUtilsBean, projectManager, attachmentManager, requestAuthorizer, theRealSearchService, issueManager, permissionManager);
  222. try
  223. {
  224. searchService.getIssuesFromJqlSearch(user, jqlSearch, maxNumResults);
  225. fail();
  226. }
  227. catch (RemoteException expected)
  228. {
  229. // expected
  230. assertEquals("Query validation failed: error message", expected.getMessage().trim());
  231. }
  232. EasyMock.verify(requestAuthorizer, theRealSearchService);
  233. }
  234. }