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

/jira-project/jira-components/jira-plugins/jira-core-reports-plugin/src/test/java/com/atlassian/jira/plugin/corereports/charts/report/AbstractChartReportTestCase.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 241 lines | 174 code | 45 blank | 22 comment | 0 complexity | 9b83524f28ccc350d132209a3a95827f MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.plugin.corereports.charts.report;
  2. import com.atlassian.core.util.map.EasyMap;
  3. import com.atlassian.jira.bc.JiraServiceContext;
  4. import com.atlassian.jira.bc.filter.SearchRequestService;
  5. import com.atlassian.jira.charts.ChartFactory;
  6. import com.atlassian.jira.charts.report.AbstractChartReport;
  7. import com.atlassian.jira.config.properties.APKeys;
  8. import com.atlassian.jira.config.properties.ApplicationProperties;
  9. import com.atlassian.jira.junit.rules.AvailableInContainer;
  10. import com.atlassian.jira.junit.rules.MockitoMocksInContainer;
  11. import com.atlassian.jira.project.Project;
  12. import com.atlassian.jira.project.ProjectManager;
  13. import com.atlassian.jira.security.JiraAuthenticationContext;
  14. import com.atlassian.jira.security.PermissionManager;
  15. import com.atlassian.jira.security.plugin.ProjectPermissionKey;
  16. import com.atlassian.jira.user.ApplicationUser;
  17. import com.atlassian.jira.user.UserProjectHistoryManager;
  18. import com.atlassian.jira.web.action.ProjectActionSupport;
  19. import org.junit.Assert;
  20. import org.junit.Rule;
  21. import org.junit.rules.RuleChain;
  22. import org.mockito.Mock;
  23. import java.util.ArrayList;
  24. import java.util.Collection;
  25. import java.util.Map;
  26. import static org.mockito.Matchers.any;
  27. import static org.mockito.Matchers.anyLong;
  28. import static org.mockito.Matchers.eq;
  29. import static org.mockito.Mockito.when;
  30. public abstract class AbstractChartReportTestCase {
  31. @Mock
  32. @AvailableInContainer
  33. protected ProjectManager projectManager;
  34. @Mock
  35. @AvailableInContainer
  36. protected PermissionManager permissionManager;
  37. @Mock
  38. protected Project projectMock;
  39. protected boolean projectAvailable = true;
  40. protected Collection<Project> accessibleProjects;
  41. @Mock
  42. @AvailableInContainer
  43. protected SearchRequestService searchRequestService;
  44. @Mock
  45. @AvailableInContainer
  46. protected ApplicationProperties applicationProperties;
  47. @Mock
  48. @AvailableInContainer
  49. protected UserProjectHistoryManager userProjectHistoryManager;
  50. protected AbstractChartReport report;
  51. private ProjectActionSupport action;
  52. private static final String VALID_PROJECT_ID = "10000";
  53. private static final String MAX_DAYS_PREVIOUS = String.valueOf(Integer.MAX_VALUE);
  54. private static final String MAX_PROJECT_OR_FILTER_ID = String.valueOf(Long.MAX_VALUE);
  55. @AvailableInContainer
  56. @Mock
  57. private JiraAuthenticationContext authContext;
  58. @Rule
  59. public RuleChain ruleChain = MockitoMocksInContainer.forTest(this);
  60. protected void setUp() throws Exception {
  61. accessibleProjects = new ArrayList<Project>();
  62. accessibleProjects.add((Project) projectMock);
  63. when(projectManager.getProjectObj(anyLong())).thenReturn(projectMock);
  64. when(permissionManager.getProjects(any(ProjectPermissionKey.class), any(ApplicationUser.class))).thenReturn(accessibleProjects);
  65. when(applicationProperties.getDefaultBackedString(APKeys.JIRA_CHART_DAYS_PREVIOUS_LIMIT_PREFIX + ChartFactory.PeriodName.daily)).thenReturn("300");
  66. when(applicationProperties.getDefaultBackedString(APKeys.JIRA_CHART_DAYS_PREVIOUS_LIMIT_PREFIX + ChartFactory.PeriodName.monthly)).thenReturn("7500");
  67. action = new ProjectActionSupport(null, null) {
  68. public String getText(final String key) {
  69. return key;
  70. }
  71. public String getText(final String key, final String value1) {
  72. return key;
  73. }
  74. public String getText(final String key, final Object value1) {
  75. return key;
  76. }
  77. public Collection<Project> getBrowsableProjects() {
  78. return accessibleProjects;
  79. }
  80. public Project getSelectedProjectObject() {
  81. return (projectAvailable) ? (Project) projectMock : null;
  82. }
  83. @Override
  84. public ApplicationUser getLoggedInApplicationUser() {
  85. return null;
  86. }
  87. };
  88. report = getChartReport();
  89. }
  90. /**
  91. * This is used to initialise {@link #report} to the instance of the extending {@link AbstractChartReport}
  92. * so that the tests defined in this test case can be re-used.
  93. *
  94. * @return {@link AbstractChartReport} instance of the extending report.
  95. */
  96. public abstract AbstractChartReport getChartReport();
  97. public void _testDaysPreviousValidation() {
  98. //setup valid projectOrFilterId so its not included in the errors
  99. Map params = EasyMap.build("projectOrFilterId", "project-" + VALID_PROJECT_ID);
  100. params.put("periodName", "daily");
  101. //null
  102. params.put("daysprevious", null);
  103. validateAndAssertOnlyErrorForFieldIs(params, "daysprevious", "report.error.days.previous.not.a.number");
  104. //no input
  105. params.put("daysprevious", "");
  106. validateAndAssertOnlyErrorForFieldIs(params, "daysprevious", "report.error.days.previous.not.a.number");
  107. //negative
  108. params.put("daysprevious", "-1");
  109. validateAndAssertOnlyErrorForFieldIs(params, "daysprevious", "report.error.days.previous");
  110. //overflow
  111. params.put("daysprevious", MAX_DAYS_PREVIOUS + "0");
  112. validateAndAssertOnlyErrorForFieldIs(params, "daysprevious", "report.error.days.previous.not.a.number");
  113. //max valid value for daily period
  114. params.put("daysprevious", "300");
  115. validateAndAssertNoErrorForField(params);
  116. params.put("daysprevious", "301");
  117. validateAndAssertOnlyErrorForFieldIs(params, "daysprevious", "report.error.days.previous.period");
  118. //now try a nother period
  119. params.put("daysprevious", "301");
  120. params.put("periodName", "monthly");
  121. validateAndAssertNoErrorForField(params);
  122. //exceed the monthly limit
  123. params.put("daysprevious", "17000");
  124. params.put("periodName", "monthly");
  125. validateAndAssertOnlyErrorForFieldIs(params, "daysprevious", "report.error.days.previous.period");
  126. params.put("daysprevious", "30");
  127. validateAndAssertNoErrorForField(params);
  128. }
  129. public void _testProjectOrFilterIdValidation() {
  130. //setup valid projectOrFilterId so its not included in the errors
  131. Map params = EasyMap.build("daysprevious", "30", "periodName", "daily");
  132. params.put("projectOrFilterId", null);
  133. validateAndAssertOnlyErrorForFieldIs(params, "projectOrFilterId", "report.error.no.filter.or.project");
  134. params.put("projectOrFilterId", "");
  135. validateAndAssertOnlyErrorForFieldIs(params, "projectOrFilterId", "report.error.no.filter.or.project");
  136. params.put("projectOrFilterId", "-");
  137. validateAndAssertOnlyErrorForFieldIs(params, "projectOrFilterId", "report.error.no.filter.or.project");
  138. params.put("projectOrFilterId", "random");
  139. validateAndAssertOnlyErrorForFieldIs(params, "projectOrFilterId", "report.error.no.filter.or.project");
  140. params.put("projectOrFilterId", "random-");
  141. validateAndAssertOnlyErrorForFieldIs(params, "projectOrFilterId", "report.error.no.filter.or.project");
  142. params.put("projectOrFilterId", "random-1000");
  143. validateAndAssertOnlyErrorForFieldIs(params, "projectOrFilterId", "report.error.no.filter.or.project");
  144. }
  145. public void _testFilterIdValidation() {
  146. //setup valid projectOrFilterId so its not included in the errors
  147. Map params = EasyMap.build("daysprevious", "30", "periodName", "daily");
  148. params.put("projectOrFilterId", "filter");
  149. validateAndAssertOnlyErrorForFieldIs(params, "projectOrFilterId", "report.error.no.filter.or.project");
  150. params.put("projectOrFilterId", "filter-");
  151. validateAndAssertOnlyErrorForFieldIs(params, "projectOrFilterId", "report.error.no.filter.or.project");
  152. //invalid filter (ie. filter is null)
  153. String filterId = "10000";
  154. params.put("projectOrFilterId", "filter-" + filterId);
  155. when(searchRequestService.getFilter(any(JiraServiceContext.class), eq(new Long(filterId)))).thenReturn(null);
  156. validateAndAssertOnlyErrorForFieldIs(params, "projectOrFilterId", "report.error.no.filter");
  157. //filter id overflow
  158. filterId = MAX_PROJECT_OR_FILTER_ID + "0";
  159. params.put("projectOrFilterId", "filter-" + filterId);
  160. validateAndAssertOnlyErrorForFieldIs(params, "projectOrFilterId", "report.error.filter.id.not.a.number");
  161. }
  162. public void _testProjectIdValidation() {
  163. //setup valid projectOrFilterId so its not included in the errors
  164. Map params = EasyMap.build("daysprevious", "30", "periodName", "daily");
  165. params.put("projectOrFilterId", "project");
  166. validateAndAssertOnlyErrorForFieldIs(params, "projectOrFilterId", "report.error.no.filter.or.project");
  167. params.put("projectOrFilterId", "project-");
  168. validateAndAssertOnlyErrorForFieldIs(params, "projectOrFilterId", "report.error.no.filter.or.project");
  169. //invalid filter (ie. filter is null)
  170. String projectId = "10000";
  171. params.put("projectOrFilterId", "project-" + projectId);
  172. projectAvailable = false;
  173. validateAndAssertOnlyErrorForFieldIs(params, "projectOrFilterId", "report.error.project.id.not.found");
  174. //filter id overflow
  175. projectId = MAX_PROJECT_OR_FILTER_ID + "0";
  176. params.put("projectOrFilterId", "project-" + projectId);
  177. validateAndAssertOnlyErrorForFieldIs(params, "projectOrFilterId", "report.error.project.id.not.a.number");
  178. action.getErrors().clear();//clear the errors for the next test
  179. //valid project id
  180. projectId = "10000";
  181. params.put("projectOrFilterId", "project-" + projectId);
  182. projectAvailable = true;
  183. validateAndAssertNoErrorForField(params);
  184. }
  185. private void validateAndAssertOnlyErrorForFieldIs(Map params, String field, String expectedErrorMsg) {
  186. report.validate(action, params);
  187. Assert.assertEquals(1, action.getErrors().size());
  188. Assert.assertEquals(expectedErrorMsg, action.getErrors().get(field));
  189. action.getErrors().clear();//clear the errors for the next test
  190. }
  191. private void validateAndAssertNoErrorForField(Map params) {
  192. report.validate(action, params);
  193. Assert.assertTrue(action.getErrors().isEmpty());
  194. Assert.assertFalse(action.hasAnyErrors());
  195. }
  196. }