PageRenderTime 24ms CodeModel.GetById 67ms RepoModel.GetById 1ms app.codeStats 0ms

/jira-project/jira-components/jira-tests-parent/jira-tests-unit/src/test/java/com/atlassian/jira/jql/query/TestActualValueRelationalQueryFactory.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 153 lines | 127 code | 23 blank | 3 comment | 10 complexity | 12960d717c24b20d5f1161bd52cb8236 MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.jql.query;
  2. import com.atlassian.jira.jql.operand.QueryLiteral;
  3. import com.atlassian.jira.jql.util.IndexValueConverter;
  4. import com.atlassian.query.operator.Operator;
  5. import org.junit.Test;
  6. import org.mockito.Mockito;
  7. import java.util.Collections;
  8. import static com.atlassian.jira.jql.operand.SimpleLiteralFactory.createLiteral;
  9. import static org.junit.Assert.assertEquals;
  10. import static org.junit.Assert.assertFalse;
  11. import static org.junit.Assert.assertNotNull;
  12. /**
  13. * @since v4.0
  14. */
  15. public class TestActualValueRelationalQueryFactory {
  16. private static final String FIELD_NAME = "durationField";
  17. @Test
  18. public void testDoesNotSupportOperators() throws Exception {
  19. _testDoesNotSupportOperator(Operator.EQUALS);
  20. _testDoesNotSupportOperator(Operator.NOT_EQUALS);
  21. _testDoesNotSupportOperator(Operator.LIKE);
  22. _testDoesNotSupportOperator(Operator.IN);
  23. _testDoesNotSupportOperator(Operator.IS);
  24. }
  25. private void _testDoesNotSupportOperator(Operator operator) throws Exception {
  26. final ActualValueRelationalQueryFactory factory = createFactory(FIELD_NAME);
  27. final QueryFactoryResult result = factory.createQueryForSingleValue("testField", operator, Collections.singletonList(createLiteral(1000L)));
  28. assertEquals(QueryFactoryResult.createFalseResult(), result);
  29. }
  30. @Test
  31. public void testCreateForMultipleValues() throws Exception {
  32. final ActualValueRelationalQueryFactory factory = createFactory(FIELD_NAME);
  33. final QueryFactoryResult result = factory.createQueryForMultipleValues("testField", Operator.IN, Collections.singletonList(createLiteral(1000L)));
  34. QueryFactoryResult expectedResult = QueryFactoryResult.createFalseResult();
  35. assertEquals(expectedResult, result);
  36. }
  37. @Test
  38. public void testCreateForEmptyOperand() throws Exception {
  39. final ActualValueRelationalQueryFactory factory = createFactory(FIELD_NAME);
  40. final QueryFactoryResult result = factory.createQueryForEmptyOperand("testField", Operator.IN);
  41. QueryFactoryResult expectedResult = QueryFactoryResult.createFalseResult();
  42. assertEquals(expectedResult, result);
  43. }
  44. @Test
  45. public void testCreateForSingleValueEmptyLiteral() throws Exception {
  46. final ActualValueRelationalQueryFactory factory = createFactory(FIELD_NAME);
  47. final QueryFactoryResult result = factory.createQueryForSingleValue("testField", Operator.LESS_THAN, Collections.singletonList(new QueryLiteral()));
  48. QueryFactoryResult expectedResult = QueryFactoryResult.createFalseResult();
  49. assertEquals(expectedResult, result);
  50. }
  51. @Test
  52. public void testCreateForSingleValueNoIndexValues() throws Exception {
  53. final ActualValueRelationalQueryFactory factory = new ActualValueRelationalQueryFactory(Mockito.mock(IndexValueConverter.class), FIELD_NAME);
  54. final QueryFactoryResult result = factory.createQueryForSingleValue("testField", Operator.LESS_THAN, Collections.singletonList(createLiteral("XX")));
  55. QueryFactoryResult expectedResult = QueryFactoryResult.createFalseResult();
  56. assertEquals(expectedResult, result);
  57. }
  58. @Test
  59. public void testLessThanWithEmptyIndexValue() throws Exception {
  60. assertQueryHappy("-1", Operator.LESS_THAN, "+durationField:[* TO 1800} -durationField:-1", 30L);
  61. assertQueryHappy("-1", Operator.LESS_THAN, "+durationField:[* TO 1800} -durationField:-1", "30");
  62. assertQueryHappy("-1", Operator.LESS_THAN, "+durationField:[* TO -1800} -durationField:-1", -30L);
  63. assertQueryHappy("-1", Operator.LESS_THAN, "+durationField:[* TO -1800} -durationField:-1", "-30");
  64. }
  65. @Test
  66. public void testLessThan() throws Exception {
  67. assertQueryHappy(Operator.LESS_THAN, "durationField:[* TO 1800}", 30L);
  68. assertQueryHappy(Operator.LESS_THAN, "durationField:[* TO 1800}", "30");
  69. assertQueryHappy(Operator.LESS_THAN, "durationField:[* TO -1800}", -30L);
  70. assertQueryHappy(Operator.LESS_THAN, "durationField:[* TO -1800}", "-30");
  71. }
  72. @Test
  73. public void testLessThanEquals() throws Exception {
  74. assertQueryHappy(Operator.LESS_THAN_EQUALS, "durationField:[* TO 1800]", 30L);
  75. assertQueryHappy(Operator.LESS_THAN_EQUALS, "durationField:[* TO 1800]", "30");
  76. assertQueryHappy(Operator.LESS_THAN_EQUALS, "durationField:[* TO -1800]", -30L);
  77. assertQueryHappy(Operator.LESS_THAN_EQUALS, "durationField:[* TO -1800]", "-30");
  78. }
  79. @Test
  80. public void testGreaterThan() throws Exception {
  81. assertQueryHappy(Operator.GREATER_THAN, "durationField:{1800 TO *]", 30L);
  82. assertQueryHappy(Operator.GREATER_THAN, "durationField:{1800 TO *]", "30");
  83. assertQueryHappy(Operator.GREATER_THAN, "durationField:{-1800 TO *]", -30L);
  84. assertQueryHappy(Operator.GREATER_THAN, "durationField:{-1800 TO *]", "-30");
  85. }
  86. @Test
  87. public void testGreaterThanEquals() throws Exception {
  88. assertQueryHappy(Operator.GREATER_THAN_EQUALS, "durationField:[1800 TO *]", 30L);
  89. assertQueryHappy(Operator.GREATER_THAN_EQUALS, "durationField:[1800 TO *]", "30");
  90. assertQueryHappy(Operator.GREATER_THAN_EQUALS, "durationField:[-1800 TO *]", -30L);
  91. assertQueryHappy(Operator.GREATER_THAN_EQUALS, "durationField:[-1800 TO *]", "-30");
  92. }
  93. private void assertQueryHappy(Operator op, String luceneQuery, final Object value) {
  94. assertQueryHappy(null, op, luceneQuery, value);
  95. }
  96. private void assertQueryHappy(final String emptyIndexValue, Operator op, String luceneQuery, final Object value) {
  97. final ActualValueRelationalQueryFactory factory = createFactory(emptyIndexValue);
  98. QueryFactoryResult query = factory.createQueryForSingleValue(FIELD_NAME, op, Collections.singletonList(createQL(value)));
  99. assertFalse(query.mustNotOccur());
  100. assertNotNull(query.getLuceneQuery());
  101. assertEquals(luceneQuery, query.getLuceneQuery().toString());
  102. }
  103. private QueryLiteral createQL(Object value) {
  104. if (value instanceof String) {
  105. return createLiteral((String) value);
  106. } else if (value instanceof Long) {
  107. return createLiteral((Long) value);
  108. }
  109. throw new IllegalArgumentException();
  110. }
  111. private static ActualValueRelationalQueryFactory createFactory(final String emptyIndexValue) {
  112. return new ActualValueRelationalQueryFactory(new MockIndexValueConverter(), emptyIndexValue);
  113. }
  114. private static class MockIndexValueConverter implements IndexValueConverter {
  115. @Override
  116. public String convertToIndexValue(QueryLiteral rawValue) {
  117. Long value = rawValue.getLongValue();
  118. if (value == null) {
  119. if (rawValue.getStringValue() != null) {
  120. value = new Long(rawValue.getStringValue());
  121. }
  122. }
  123. if (value != null) {
  124. return String.valueOf(value * 60);
  125. } else {
  126. return null;
  127. }
  128. }
  129. }
  130. }