PageRenderTime 41ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/jira-project/jira-components/jira-tests-parent/jira-tests-unit/src/test/java/com/atlassian/jira/issue/search/searchers/util/TestDefaultWorkRatioSearcherInputHelper.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 249 lines | 192 code | 51 blank | 6 comment | 0 complexity | 4402acc117b3e9cc6f4c311993e65a3b MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.issue.search.searchers.util;
  2. import com.atlassian.jira.JiraDataTypes;
  3. import com.atlassian.jira.issue.search.constants.SimpleFieldSearchConstants;
  4. import com.atlassian.jira.jql.operand.JqlOperandResolver;
  5. import com.atlassian.jira.jql.operand.QueryLiteral;
  6. import com.atlassian.jira.jql.validator.MockJqlOperandResolver;
  7. import com.atlassian.jira.junit.rules.MockitoMocksInContainer;
  8. import com.atlassian.jira.user.ApplicationUser;
  9. import com.atlassian.jira.user.MockApplicationUser;
  10. import com.atlassian.query.clause.AndClause;
  11. import com.atlassian.query.clause.Clause;
  12. import com.atlassian.query.clause.TerminalClause;
  13. import com.atlassian.query.clause.TerminalClauseImpl;
  14. import com.atlassian.query.operand.EmptyOperand;
  15. import com.atlassian.query.operand.MultiValueOperand;
  16. import com.atlassian.query.operand.Operand;
  17. import com.atlassian.query.operand.SingleValueOperand;
  18. import com.atlassian.query.operator.Operator;
  19. import org.junit.Rule;
  20. import org.junit.Test;
  21. import org.junit.rules.TestRule;
  22. import java.util.Collections;
  23. import java.util.HashMap;
  24. import java.util.List;
  25. import java.util.Map;
  26. import static com.atlassian.query.operator.Operator.LESS_THAN_EQUALS;
  27. import static java.util.Collections.singletonList;
  28. import static org.junit.Assert.assertEquals;
  29. import static org.junit.Assert.assertNotNull;
  30. import static org.junit.Assert.assertNull;
  31. import static org.mockito.Mockito.mock;
  32. import static org.mockito.Mockito.when;
  33. /**
  34. * @since v4.0
  35. */
  36. public class TestDefaultWorkRatioSearcherInputHelper {
  37. @Rule
  38. public TestRule container = MockitoMocksInContainer.forTest(this);
  39. private static final ApplicationUser USER = new MockApplicationUser("test");
  40. @Test
  41. public void testNullQuery() throws Exception {
  42. SimpleFieldSearchConstants constants = new SimpleFieldSearchConstants("test", Collections.<Operator>emptySet(), JiraDataTypes.NUMBER);
  43. JqlOperandResolver operandResolver = mock(JqlOperandResolver.class);
  44. final DefaultWorkRatioSearcherInputHelper helper = new DefaultWorkRatioSearcherInputHelper(constants, operandResolver);
  45. assertInvalidResult(helper, null);
  46. }
  47. @Test
  48. public void testStructureCheckFails() throws Exception {
  49. final Long fromInput = 30L;
  50. final String fieldId = "test";
  51. final TerminalClauseImpl clause = new TerminalClauseImpl(fieldId, Operator.GREATER_THAN_EQUALS, fromInput);
  52. SimpleFieldSearchConstants constants = new SimpleFieldSearchConstants(fieldId, Collections.<Operator>emptySet(), JiraDataTypes.NUMBER);
  53. JqlOperandResolver operandResolver = mock(JqlOperandResolver.class);
  54. final DefaultWorkRatioSearcherInputHelper helper = new DefaultWorkRatioSearcherInputHelper(constants, operandResolver) {
  55. @Override
  56. List<TerminalClause> validateClauseStructure(final Clause clause) {
  57. return null;
  58. }
  59. };
  60. assertInvalidResult(helper, clause);
  61. }
  62. @Test
  63. public void testLowerBounds() {
  64. final Long input = 30L;
  65. final String fieldId = "workratio";
  66. final TerminalClauseImpl clause = new TerminalClauseImpl(fieldId, Operator.GREATER_THAN_EQUALS, input);
  67. Map<String, String> expectedHolder = new HashMap<String, String>();
  68. expectedHolder.put("workratio:min", "30");
  69. DefaultWorkRatioSearcherInputHelper helper = createHelper(fieldId);
  70. assertValidResult(helper, clause, expectedHolder);
  71. }
  72. @Test
  73. public void testUpperBounds() {
  74. final Long input = 30L;
  75. final String fieldId = "workratio";
  76. final TerminalClauseImpl clause = new TerminalClauseImpl(fieldId, Operator.LESS_THAN_EQUALS, input);
  77. Map<String, String> expectedHolder = new HashMap<String, String>();
  78. expectedHolder.put("workratio:max", "30");
  79. DefaultWorkRatioSearcherInputHelper helper = createHelper(fieldId);
  80. assertValidResult(helper, clause, expectedHolder);
  81. }
  82. @Test
  83. public void testLowerAndUpperBoundsOfQuery() {
  84. final Long maxInput = 1000L;
  85. final String maxOutput = "1000";
  86. final String minInput = "500";
  87. final String minOutput = "500";
  88. final String fieldId = "workratio";
  89. final AndClause clause = new AndClause(
  90. new TerminalClauseImpl(fieldId, Operator.LESS_THAN_EQUALS, maxInput),
  91. new TerminalClauseImpl(fieldId, Operator.GREATER_THAN_EQUALS, minInput)
  92. );
  93. Map<String, String> expectedHolder = new HashMap<String, String>();
  94. expectedHolder.put("workratio:min", minOutput);
  95. expectedHolder.put("workratio:max", maxOutput);
  96. DefaultWorkRatioSearcherInputHelper helper = createHelper(fieldId);
  97. assertValidResult(helper, clause, expectedHolder);
  98. }
  99. @Test
  100. public void testTooManyMinimums() {
  101. final Long minInput1 = 10L;
  102. final Long minInput2 = 20L;
  103. final String fieldId = "workratio";
  104. final AndClause clause = new AndClause(
  105. new TerminalClauseImpl(fieldId, Operator.GREATER_THAN_EQUALS, minInput1),
  106. new TerminalClauseImpl(fieldId, Operator.GREATER_THAN_EQUALS, minInput2),
  107. new TerminalClauseImpl(fieldId, Operator.LESS_THAN_EQUALS, "44")
  108. );
  109. DefaultWorkRatioSearcherInputHelper helper = createHelper(fieldId);
  110. assertInvalidResult(helper, clause);
  111. }
  112. @Test
  113. public void testTooManyMaximums() {
  114. final Long maxInput1 = 10L;
  115. final Long maxInput2 = 20L;
  116. final String fieldId = "workratio";
  117. final AndClause clause = new AndClause(
  118. new TerminalClauseImpl(fieldId, Operator.LESS_THAN_EQUALS, maxInput1),
  119. new TerminalClauseImpl(fieldId, Operator.LESS_THAN_EQUALS, maxInput2),
  120. new TerminalClauseImpl(fieldId, Operator.GREATER_THAN_EQUALS, "44")
  121. );
  122. DefaultWorkRatioSearcherInputHelper helper = createHelper(fieldId);
  123. assertInvalidResult(helper, clause);
  124. }
  125. @Test
  126. public void testQueryWithABadOperandDoesNotCompute() {
  127. final Operand operand = new SingleValueOperand("xxx");
  128. final String fieldId = "field1";
  129. final TerminalClauseImpl clause = new TerminalClauseImpl(fieldId, Operator.LESS_THAN_EQUALS, operand);
  130. final JqlOperandResolver jqlOperandResolver = mock(JqlOperandResolver.class);
  131. when(jqlOperandResolver.isEmptyOperand(operand)).thenReturn(false);
  132. when(jqlOperandResolver.getValues(USER, operand, clause)).thenReturn(Collections.singletonList(new QueryLiteral(new SingleValueOperand("blarg"), (String) null)));
  133. DefaultWorkRatioSearcherInputHelper helper = createHelper(fieldId, jqlOperandResolver);
  134. assertInvalidResult(helper, clause);
  135. }
  136. @Test
  137. public void testQueryWithoutValue() {
  138. final Operand operand = new SingleValueOperand("xxx");
  139. final String fieldId = "field1";
  140. final TerminalClauseImpl clause = new TerminalClauseImpl(fieldId, LESS_THAN_EQUALS, operand);
  141. final JqlOperandResolver jqlOperandResolver = mock(JqlOperandResolver.class);
  142. when(jqlOperandResolver.isEmptyOperand(operand)).thenReturn(false);
  143. when(jqlOperandResolver.getValues(USER, operand, clause)).thenReturn(singletonList(new QueryLiteral()));
  144. DefaultWorkRatioSearcherInputHelper helper = createHelper(fieldId, jqlOperandResolver);
  145. assertInvalidResult(helper, clause);
  146. }
  147. @Test
  148. public void testQueryWithEmptyOperand() {
  149. final Operand operand = new EmptyOperand();
  150. final String fieldId = "field1";
  151. final TerminalClauseImpl clause = new TerminalClauseImpl(fieldId, LESS_THAN_EQUALS, operand);
  152. final JqlOperandResolver jqlOperandResolver = mock(JqlOperandResolver.class);
  153. when(jqlOperandResolver.isEmptyOperand(operand)).thenReturn(true);
  154. DefaultWorkRatioSearcherInputHelper helper = createHelper(fieldId);
  155. assertInvalidResult(helper, clause);
  156. }
  157. @Test
  158. public void testQueryWithInvalidOperand() {
  159. final String badRatio = "13/13/2008";
  160. final String fieldId = "field1";
  161. final TerminalClauseImpl clause = new TerminalClauseImpl(fieldId, Operator.LESS_THAN_EQUALS, badRatio);
  162. Map<String, String> expectedHolder = new HashMap<String, String>();
  163. expectedHolder.put("field1:max", badRatio);
  164. DefaultWorkRatioSearcherInputHelper helper = createHelper(fieldId);
  165. assertValidResult(helper, clause, expectedHolder);
  166. }
  167. @Test
  168. public void testNoWorkRatio() {
  169. final String fieldId = "notTestName";
  170. final TerminalClauseImpl clause = new TerminalClauseImpl(fieldId, Operator.EQUALS, "something");
  171. DefaultWorkRatioSearcherInputHelper helper = createHelper(fieldId + "NOT");
  172. assertInvalidResult(helper, clause);
  173. }
  174. /**
  175. * Test what happens when the operand returns multiple ratios. We don't support this.
  176. */
  177. @Test
  178. public void testMultiValueOperand() {
  179. final String fieldId = "created2";
  180. final TerminalClauseImpl clause = new TerminalClauseImpl(fieldId, Operator.LESS_THAN_EQUALS, new MultiValueOperand("something", "more"));
  181. DefaultWorkRatioSearcherInputHelper helper = createHelper(fieldId);
  182. assertInvalidResult(helper, clause);
  183. }
  184. private static DefaultWorkRatioSearcherInputHelper createHelper(final String fieldId) {
  185. return createHelper(fieldId, MockJqlOperandResolver.createSimpleSupport());
  186. }
  187. private static DefaultWorkRatioSearcherInputHelper createHelper(final String fieldId, final JqlOperandResolver simpleSupport) {
  188. return new DefaultWorkRatioSearcherInputHelper(new SimpleFieldSearchConstants(fieldId, Collections.<Operator>emptySet(), JiraDataTypes.NUMBER), simpleSupport);
  189. }
  190. private static void assertInvalidResult(DefaultWorkRatioSearcherInputHelper helper, final Clause clause) {
  191. assertNull(helper.convertClause(clause, USER));
  192. }
  193. private static void assertValidResult(DefaultWorkRatioSearcherInputHelper helper, final Clause clause, Map<String, String> expectedValues) {
  194. final Map<String, String> actualResult = helper.convertClause(clause, null);
  195. assertNotNull(actualResult);
  196. assertEquals(expectedValues, actualResult);
  197. }
  198. }