PageRenderTime 55ms CodeModel.GetById 28ms RepoModel.GetById 1ms app.codeStats 0ms

/com.atlassian.connector.eclipse.jira.tests/src/com/atlassian/connector/eclipse/jira/tests/core/JiraCustomQueryTest.java

https://bitbucket.org/jon_black/connector-eclipse
Java | 382 lines | 305 code | 61 blank | 16 comment | 4 complexity | 633bf7839216a6029db0951ae90ad66d MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause, BSD-2-Clause
  1. /*******************************************************************************
  2. * Copyright (c) 2004, 2009 Eugene Kuleshov and others.
  3. * All rights reserved. This program and the accompanying materials
  4. * are made available under the terms of the Eclipse Public License v1.0
  5. * which accompanies this distribution, and is available at
  6. * http://www.eclipse.org/legal/epl-v10.html
  7. *
  8. * Contributors:
  9. * Eugene Kuleshov - initial API and implementation
  10. * Tasktop Technologies - improvements
  11. *******************************************************************************/
  12. package com.atlassian.connector.eclipse.jira.tests.core;
  13. import java.text.SimpleDateFormat;
  14. import java.util.Date;
  15. import java.util.Locale;
  16. import junit.framework.TestCase;
  17. import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
  18. import org.eclipse.mylyn.tasks.core.TaskRepository;
  19. import com.atlassian.connector.eclipse.internal.jira.core.InvalidJiraQueryException;
  20. import com.atlassian.connector.eclipse.internal.jira.core.JiraCorePlugin;
  21. import com.atlassian.connector.eclipse.internal.jira.core.model.Component;
  22. import com.atlassian.connector.eclipse.internal.jira.core.model.IssueType;
  23. import com.atlassian.connector.eclipse.internal.jira.core.model.JiraStatus;
  24. import com.atlassian.connector.eclipse.internal.jira.core.model.Project;
  25. import com.atlassian.connector.eclipse.internal.jira.core.model.Resolution;
  26. import com.atlassian.connector.eclipse.internal.jira.core.model.Version;
  27. import com.atlassian.connector.eclipse.internal.jira.core.model.filter.ComponentFilter;
  28. import com.atlassian.connector.eclipse.internal.jira.core.model.filter.ContentFilter;
  29. import com.atlassian.connector.eclipse.internal.jira.core.model.filter.DateFilter;
  30. import com.atlassian.connector.eclipse.internal.jira.core.model.filter.DateRangeFilter;
  31. import com.atlassian.connector.eclipse.internal.jira.core.model.filter.FilterDefinition;
  32. import com.atlassian.connector.eclipse.internal.jira.core.model.filter.IssueTypeFilter;
  33. import com.atlassian.connector.eclipse.internal.jira.core.model.filter.ProjectFilter;
  34. import com.atlassian.connector.eclipse.internal.jira.core.model.filter.ResolutionFilter;
  35. import com.atlassian.connector.eclipse.internal.jira.core.model.filter.SpecificUserFilter;
  36. import com.atlassian.connector.eclipse.internal.jira.core.model.filter.StatusFilter;
  37. import com.atlassian.connector.eclipse.internal.jira.core.model.filter.UserFilter;
  38. import com.atlassian.connector.eclipse.internal.jira.core.model.filter.VersionFilter;
  39. import com.atlassian.connector.eclipse.internal.jira.core.service.FilterDefinitionConverter;
  40. import com.atlassian.connector.eclipse.internal.jira.core.service.JiraClient;
  41. import com.atlassian.connector.eclipse.internal.jira.core.service.JiraClientCache;
  42. import com.atlassian.connector.eclipse.internal.jira.core.service.JiraLocalConfiguration;
  43. import com.atlassian.connector.eclipse.internal.jira.core.util.JiraUtil;
  44. import com.atlassian.connector.eclipse.jira.tests.util.JiraFixture;
  45. import com.atlassian.connector.eclipse.jira.tests.util.JiraTestUtil;
  46. import com.atlassian.connector.eclipse.jira.tests.util.MockJiraClient;
  47. /**
  48. * @author Eugene Kuleshov
  49. * @author Steffen Pingel
  50. * @author Thomas Ehrnhoefer (multiple projects selection)
  51. */
  52. public class JiraCustomQueryTest extends TestCase {
  53. private Project[] projects;
  54. @Override
  55. protected void setUp() throws Exception {
  56. Component[] comps = new Component[3];
  57. comps[0] = new Component();
  58. comps[0].setId("comp0");
  59. comps[1] = new Component();
  60. comps[1].setId("comp1");
  61. comps[2] = new Component();
  62. comps[2].setId("comp2");
  63. Version[] vers = new Version[3];
  64. vers[0] = new Version();
  65. vers[0].setId("ver0");
  66. vers[1] = new Version();
  67. vers[1].setId("ver1");
  68. vers[2] = new Version();
  69. vers[2].setId("ver2");
  70. projects = new Project[2];
  71. projects[0] = new Project();
  72. projects[0].setId("prj0");
  73. projects[0].setComponents(comps);
  74. projects[0].setVersions(vers);
  75. projects[0].setDetails(true);
  76. projects[1] = new Project();
  77. projects[1].setId("prj1");
  78. projects[1].setComponents(comps);
  79. projects[1].setVersions(vers);
  80. projects[1].setDetails(true);
  81. }
  82. public void testJiraCustomQuery() {
  83. String repositoryUrl = "http://host.net/";
  84. Component[] components = new Component[2];
  85. components[0] = new Component();
  86. components[0].setId("comp0");
  87. components[1] = new Component();
  88. components[1].setId("comp1");
  89. Version[] fixVersions = new Version[2];
  90. fixVersions[0] = new Version();
  91. fixVersions[0].setId("ver0");
  92. fixVersions[1] = new Version();
  93. fixVersions[1].setId("ver1");
  94. Version[] repoVersions = new Version[2];
  95. repoVersions[0] = new Version();
  96. repoVersions[0].setId("ver1");
  97. repoVersions[1] = new Version();
  98. repoVersions[1].setId("ver2");
  99. IssueType[] issueTypes = new IssueType[2];
  100. issueTypes[0] = new IssueType();
  101. issueTypes[0].setId("issue0");
  102. issueTypes[1] = new IssueType();
  103. issueTypes[1].setId("issue1");
  104. JiraStatus[] statuses = new JiraStatus[2];
  105. statuses[0] = new JiraStatus();
  106. statuses[0].setId("status0");
  107. statuses[1] = new JiraStatus();
  108. statuses[1].setId("status1");
  109. Resolution[] resolutions = new Resolution[2];
  110. resolutions[0] = new Resolution();
  111. resolutions[0].setId("resolution0");
  112. resolutions[1] = new Resolution();
  113. resolutions[1].setId("resolution1");
  114. FilterDefinition filter = new FilterDefinition();
  115. filter.setProjectFilter(new ProjectFilter(projects));
  116. filter.setComponentFilter(new ComponentFilter(components, true));
  117. filter.setFixForVersionFilter(new VersionFilter(fixVersions, true, true, true));
  118. filter.setReportedInVersionFilter(new VersionFilter(repoVersions, true, true, true));
  119. filter.setIssueTypeFilter(new IssueTypeFilter(issueTypes));
  120. filter.setStatusFilter(new StatusFilter(statuses));
  121. filter.setResolutionFilter(new ResolutionFilter(resolutions));
  122. filter.setContentFilter(new ContentFilter("query", true, true, true, true));
  123. filter.setReportedByFilter(new SpecificUserFilter("reporter"));
  124. filter.setAssignedToFilter(new SpecificUserFilter("assignee"));
  125. filter.setCreatedDateFilter(new DateRangeFilter(new Date(10), new Date(12)));
  126. filter.setUpdatedDateFilter(new DateRangeFilter(new Date(20), new Date(22)));
  127. filter.setDueDateFilter(new DateRangeFilter(new Date(30), new Date(32)));
  128. TaskRepository taskRepository = new TaskRepository(JiraCorePlugin.CONNECTOR_KIND, repositoryUrl);
  129. taskRepository.setCharacterEncoding("ASCII");
  130. IRepositoryQuery customQuery = JiraTestUtil.createQuery(taskRepository, filter);
  131. String queryUrl = customQuery.getUrl();
  132. MockJiraClient client = new MockJiraClient("");
  133. JiraClientCache cache = new JiraClientCache(client) {
  134. @Override
  135. public Project getProjectById(String id) {
  136. for (Project prj : projects) {
  137. if (prj.getId().equals(id)) {
  138. return prj;
  139. }
  140. }
  141. return null;
  142. }
  143. @Override
  144. public Project[] getProjects() {
  145. return projects;
  146. }
  147. @Override
  148. public IssueType getIssueTypeById(String id) {
  149. IssueType issueType = new IssueType();
  150. issueType.setId(id);
  151. return issueType;
  152. };
  153. @Override
  154. public JiraStatus getStatusById(String id) {
  155. JiraStatus status = new JiraStatus();
  156. status.setId(id);
  157. return status;
  158. };
  159. @Override
  160. public Resolution getResolutionById(String id) {
  161. Resolution resolution = new Resolution();
  162. resolution.setId(id);
  163. return resolution;
  164. };
  165. };
  166. client.setCache(cache);
  167. FilterDefinitionConverter converter = new FilterDefinitionConverter(taskRepository.getCharacterEncoding(),
  168. JiraUtil.getLocalConfiguration(taskRepository).getDateFormat());
  169. FilterDefinition filter2 = converter.toFilter(client, queryUrl, true);
  170. ProjectFilter projectFilter2 = filter2.getProjectFilter();
  171. assertEquals(2, projects.length);
  172. assertEquals(projects[0].getId(), projectFilter2.getProjects()[0].getId());
  173. assertEquals(projects[1].getId(), projectFilter2.getProjects()[1].getId());
  174. Component[] components2 = filter2.getComponentFilter().getComponents();
  175. assertEquals(2, components2.length);
  176. assertEquals(components[0].getId(), components2[0].getId());
  177. assertEquals(components[1].getId(), components2[1].getId());
  178. assertTrue(filter2.getComponentFilter().hasNoComponent());
  179. Version[] repoVersions2 = filter2.getReportedInVersionFilter().getVersions();
  180. assertEquals(2, repoVersions2.length);
  181. assertEquals(repoVersions[0].getId(), repoVersions2[0].getId());
  182. assertEquals(repoVersions[1].getId(), repoVersions2[1].getId());
  183. assertTrue(filter2.getReportedInVersionFilter().hasNoVersion());
  184. assertTrue(filter2.getReportedInVersionFilter().isReleasedVersions());
  185. assertTrue(filter2.getReportedInVersionFilter().isUnreleasedVersions());
  186. Version[] fixVersions2 = filter2.getFixForVersionFilter().getVersions();
  187. assertEquals(2, fixVersions2.length);
  188. assertEquals(fixVersions[0].getId(), fixVersions2[0].getId());
  189. assertEquals(fixVersions[1].getId(), fixVersions2[1].getId());
  190. assertTrue(filter2.getFixForVersionFilter().hasNoVersion());
  191. assertTrue(filter2.getFixForVersionFilter().isUnreleasedVersions());
  192. assertTrue(filter2.getFixForVersionFilter().isReleasedVersions());
  193. IssueType[] issueTypes2 = filter2.getIssueTypeFilter().getIsueTypes();
  194. assertEquals(2, issueTypes2.length);
  195. assertEquals(issueTypes[0].getId(), issueTypes2[0].getId());
  196. assertEquals(issueTypes[1].getId(), issueTypes2[1].getId());
  197. JiraStatus[] statuses2 = filter2.getStatusFilter().getStatuses();
  198. assertEquals(2, statuses2.length);
  199. assertEquals(statuses[0].getId(), statuses2[0].getId());
  200. assertEquals(statuses[1].getId(), statuses2[1].getId());
  201. Resolution[] resolutions2 = filter2.getResolutionFilter().getResolutions();
  202. assertEquals(2, resolutions2.length);
  203. assertEquals(resolutions[0].getId(), resolutions2[0].getId());
  204. assertEquals(resolutions[1].getId(), resolutions2[1].getId());
  205. ContentFilter contentFilter2 = filter2.getContentFilter();
  206. assertEquals("query", contentFilter2.getQueryString());
  207. assertEquals(true, contentFilter2.isSearchingComments());
  208. assertEquals(true, contentFilter2.isSearchingDescription());
  209. assertEquals(true, contentFilter2.isSearchingEnvironment());
  210. assertEquals(true, contentFilter2.isSearchingSummary());
  211. UserFilter reportedByFilter2 = filter2.getReportedByFilter();
  212. assertTrue(reportedByFilter2 instanceof SpecificUserFilter);
  213. assertEquals("reporter", ((SpecificUserFilter) reportedByFilter2).getUser());
  214. UserFilter assigneeFilter2 = filter2.getAssignedToFilter();
  215. assertTrue(assigneeFilter2 instanceof SpecificUserFilter);
  216. assertEquals("assignee", ((SpecificUserFilter) assigneeFilter2).getUser());
  217. DateFilter createdDateFilter2 = filter.getCreatedDateFilter();
  218. assertTrue(createdDateFilter2 instanceof DateRangeFilter);
  219. assertEquals(10, ((DateRangeFilter) createdDateFilter2).getFromDate().getTime());
  220. assertEquals(12, ((DateRangeFilter) createdDateFilter2).getToDate().getTime());
  221. DateFilter updatedDateFilter2 = filter.getUpdatedDateFilter();
  222. assertTrue(updatedDateFilter2 instanceof DateRangeFilter);
  223. assertEquals(20, ((DateRangeFilter) updatedDateFilter2).getFromDate().getTime());
  224. assertEquals(22, ((DateRangeFilter) updatedDateFilter2).getToDate().getTime());
  225. DateFilter dueDateFilter2 = filter.getDueDateFilter();
  226. assertTrue(dueDateFilter2 instanceof DateRangeFilter);
  227. assertEquals(30, ((DateRangeFilter) dueDateFilter2).getFromDate().getTime());
  228. assertEquals(32, ((DateRangeFilter) dueDateFilter2).getToDate().getTime());
  229. }
  230. public void testGetFilterDefinitionUnresolvedResolution() {
  231. String repositoryUrl = JiraFixture.current().getRepositoryUrl();
  232. MockJiraClient client = new MockJiraClient(repositoryUrl);
  233. FilterDefinitionConverter converter = new FilterDefinitionConverter(JiraClient.DEFAULT_CHARSET,
  234. new SimpleDateFormat(JiraLocalConfiguration.DEFAULT_DATE_PATTERN, Locale.US));
  235. FilterDefinition filter = new FilterDefinition();
  236. filter.setResolutionFilter(new ResolutionFilter(new Resolution[0]));
  237. String queryUrl = converter.toUrl(repositoryUrl, filter);
  238. filter = converter.toFilter(client, queryUrl, true);
  239. ResolutionFilter resolutionFilter = filter.getResolutionFilter();
  240. assertNotNull(resolutionFilter);
  241. assertTrue(resolutionFilter.isUnresolved());
  242. filter = new FilterDefinition();
  243. Resolution[] resolutions = new Resolution[1];
  244. resolutions[0] = new Resolution();
  245. resolutions[0].setId("123");
  246. resolutionFilter = new ResolutionFilter(resolutions);
  247. filter.setResolutionFilter(resolutionFilter);
  248. queryUrl = converter.toUrl(repositoryUrl, filter);
  249. try {
  250. filter = converter.toFilter(client, queryUrl, true);
  251. fail("Expected InvalidJiraQueryException, got: " + filter);
  252. } catch (InvalidJiraQueryException e) {
  253. }
  254. }
  255. public void testJiraCustomQueryIncompleteDateFilter() {
  256. String repositoryUrl = "http://host.net/";
  257. FilterDefinition filter = new FilterDefinition();
  258. filter.setProjectFilter(new ProjectFilter(projects));
  259. filter.setCreatedDateFilter(new DateRangeFilter(new Date(10), null));
  260. filter.setUpdatedDateFilter(new DateRangeFilter(null, new Date(22)));
  261. filter.setDueDateFilter(new DateRangeFilter(null, null));
  262. TaskRepository taskRepository = new TaskRepository(JiraCorePlugin.CONNECTOR_KIND, repositoryUrl);
  263. taskRepository.setCharacterEncoding("ASCII");
  264. IRepositoryQuery customQuery = JiraTestUtil.createQuery(taskRepository, filter);
  265. String queryUrl = customQuery.getUrl();
  266. MockJiraClient client = new MockJiraClient("");
  267. JiraClientCache cache = new JiraClientCache(client) {
  268. @Override
  269. public Project getProjectById(String id) {
  270. for (Project prj : projects) {
  271. if (prj.getId().equals(id)) {
  272. return prj;
  273. }
  274. }
  275. return null;
  276. }
  277. @Override
  278. public Project[] getProjects() {
  279. return projects;
  280. }
  281. @Override
  282. public IssueType getIssueTypeById(String id) {
  283. IssueType issueType = new IssueType();
  284. issueType.setId(id);
  285. return issueType;
  286. };
  287. @Override
  288. public JiraStatus getStatusById(String id) {
  289. JiraStatus status = new JiraStatus();
  290. status.setId(id);
  291. return status;
  292. };
  293. @Override
  294. public Resolution getResolutionById(String id) {
  295. Resolution resolution = new Resolution();
  296. resolution.setId(id);
  297. return resolution;
  298. };
  299. };
  300. client.setCache(cache);
  301. FilterDefinitionConverter converter = new FilterDefinitionConverter(taskRepository.getCharacterEncoding(),
  302. JiraUtil.getLocalConfiguration(taskRepository).getDateFormat());
  303. FilterDefinition filter2 = converter.toFilter(client, queryUrl, true);
  304. ProjectFilter projectFilter2 = filter2.getProjectFilter();
  305. assertEquals(2, projects.length);
  306. assertEquals(projects[0].getId(), projectFilter2.getProjects()[0].getId());
  307. assertEquals(projects[1].getId(), projectFilter2.getProjects()[1].getId());
  308. DateFilter createdDateFilter2 = filter.getCreatedDateFilter();
  309. assertTrue(createdDateFilter2 instanceof DateRangeFilter);
  310. assertEquals(10, ((DateRangeFilter) createdDateFilter2).getFromDate().getTime());
  311. assertNull(((DateRangeFilter) createdDateFilter2).getToDate());
  312. DateFilter updatedDateFilter2 = filter.getUpdatedDateFilter();
  313. assertTrue(updatedDateFilter2 instanceof DateRangeFilter);
  314. assertNull(((DateRangeFilter) updatedDateFilter2).getFromDate());
  315. assertEquals(22, ((DateRangeFilter) updatedDateFilter2).getToDate().getTime());
  316. DateFilter dueDateFilter2 = filter.getDueDateFilter();
  317. assertTrue(dueDateFilter2 instanceof DateRangeFilter);
  318. assertNull(((DateRangeFilter) dueDateFilter2).getFromDate());
  319. assertNull(((DateRangeFilter) dueDateFilter2).getToDate());
  320. }
  321. }