PageRenderTime 50ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/jira-project/jira-components/jira-tests-parent/jira-tests-unit/src/test/java/com/atlassian/jira/jql/context/TestIssueTypeClauseContextFactory.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 282 lines | 203 code | 76 blank | 3 comment | 0 complexity | 2af33757931a94920f46c40f27fb75cc MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.jql.context;
  2. import com.atlassian.jira.config.ConstantsManager;
  3. import com.atlassian.jira.issue.search.constants.SystemSearchConstants;
  4. import com.atlassian.jira.jql.operand.JqlOperandResolver;
  5. import com.atlassian.jira.jql.operand.QueryLiteral;
  6. import com.atlassian.jira.jql.resolver.IssueTypeResolver;
  7. import com.atlassian.jira.jql.validator.MockJqlOperandResolver;
  8. import com.atlassian.jira.user.ApplicationUser;
  9. import com.atlassian.jira.util.collect.CollectionBuilder;
  10. import com.atlassian.query.clause.TerminalClause;
  11. import com.atlassian.query.clause.TerminalClauseImpl;
  12. import com.atlassian.query.operand.EmptyOperand;
  13. import com.atlassian.query.operand.MultiValueOperand;
  14. import com.atlassian.query.operand.Operand;
  15. import com.atlassian.query.operand.SingleValueOperand;
  16. import com.atlassian.query.operator.Operator;
  17. import org.junit.Before;
  18. import org.junit.Rule;
  19. import org.junit.Test;
  20. import org.mockito.Mock;
  21. import org.mockito.junit.MockitoJUnit;
  22. import org.mockito.junit.MockitoRule;
  23. import java.util.Collections;
  24. import java.util.List;
  25. import static com.atlassian.jira.jql.operand.SimpleLiteralFactory.createLiteral;
  26. import static org.junit.Assert.assertEquals;
  27. import static org.mockito.Mockito.mock;
  28. import static org.mockito.Mockito.when;
  29. /**
  30. * @since v4.0
  31. */
  32. public class TestIssueTypeClauseContextFactory {
  33. @Rule
  34. public MockitoRule mockito = MockitoJUnit.rule();
  35. @Mock
  36. private IssueTypeResolver issueTypeResolver;
  37. @Mock
  38. private ConstantsManager constantsManager;
  39. private MockJqlOperandResolver jqlOperandResolver;
  40. private IssueTypeClauseContextFactory factory;
  41. @Before
  42. public void setUp() throws Exception {
  43. jqlOperandResolver = MockJqlOperandResolver.createSimpleSupport();
  44. factory = new IssueTypeClauseContextFactory(issueTypeResolver, jqlOperandResolver, constantsManager);
  45. }
  46. @Test
  47. public void testGetClauseContextSingleIssueTypeEquals() throws Exception {
  48. final SingleValueOperand operand = new SingleValueOperand("it1");
  49. final TerminalClause clause = new TerminalClauseImpl(SystemSearchConstants.forIssueType().getJqlClauseNames().getPrimaryName(), Operator.EQUALS, operand);
  50. final IssueTypeClauseContextFactory factory = createNoopIssueTypeClauseContextFactory();
  51. final ClauseContext result = factory.getClauseContext(null, clause);
  52. ClauseContext expectedResult = new ClauseContextImpl(CollectionBuilder.<ProjectIssueTypeContext>newBuilder(
  53. new ProjectIssueTypeContextImpl(AllProjectsContext.INSTANCE, new IssueTypeContextImpl("it1"))
  54. ).asSet());
  55. assertEquals(expectedResult, result);
  56. }
  57. @Test
  58. public void testGetClauseContextMultiIssueTypeEquals() throws Exception {
  59. final MultiValueOperand operand = new MultiValueOperand("it2", "it1");
  60. TerminalClause clause = new TerminalClauseImpl(SystemSearchConstants.forIssueType().getJqlClauseNames().getPrimaryName(), Operator.EQUALS, operand);
  61. final IssueTypeClauseContextFactory factory = createNoopIssueTypeClauseContextFactory();
  62. final ClauseContext result = factory.getClauseContext(null, clause);
  63. ClauseContext expectedResult = new ClauseContextImpl(CollectionBuilder.<ProjectIssueTypeContext>newBuilder(
  64. new ProjectIssueTypeContextImpl(AllProjectsContext.INSTANCE, new IssueTypeContextImpl("it1")),
  65. new ProjectIssueTypeContextImpl(AllProjectsContext.INSTANCE, new IssueTypeContextImpl("it2"))
  66. ).asSet());
  67. assertEquals(expectedResult, result);
  68. }
  69. @Test
  70. public void testGetClauseContextMultiIssueTypeWithEmptyEquals() throws Exception {
  71. final MultiValueOperand operand = new MultiValueOperand("it1", "it2");
  72. TerminalClause clause = new TerminalClauseImpl(SystemSearchConstants.forIssueType().getJqlClauseNames().getPrimaryName(), Operator.EQUALS, operand);
  73. final IssueTypeClauseContextFactory factory = createNoopIssueTypeClauseContextFactory();
  74. final ClauseContext result = factory.getClauseContext(null, clause);
  75. ClauseContext expectedResult = new ClauseContextImpl(CollectionBuilder.<ProjectIssueTypeContext>newBuilder(
  76. new ProjectIssueTypeContextImpl(AllProjectsContext.INSTANCE, new IssueTypeContextImpl("it1")),
  77. new ProjectIssueTypeContextImpl(AllProjectsContext.INSTANCE, new IssueTypeContextImpl("it2"))
  78. ).asSet());
  79. assertEquals(expectedResult, result);
  80. }
  81. @Test
  82. public void testGetClauseContextSingleIssueTypeNotEquals() throws Exception {
  83. final SingleValueOperand operand = new SingleValueOperand("it1");
  84. TerminalClause clause = new TerminalClauseImpl(SystemSearchConstants.forIssueType().getJqlClauseNames().getPrimaryName(), Operator.NOT_EQUALS, operand);
  85. when(constantsManager.getAllIssueTypeIds()).thenReturn(CollectionBuilder.newBuilder("it1", "it2").asList());
  86. final IssueTypeClauseContextFactory factory = createNoopIssueTypeClauseContextFactory();
  87. final ClauseContext result = factory.getClauseContext(null, clause);
  88. ClauseContext expectedResult = new ClauseContextImpl(CollectionBuilder.<ProjectIssueTypeContext>newBuilder(
  89. new ProjectIssueTypeContextImpl(AllProjectsContext.INSTANCE, new IssueTypeContextImpl("it2"))
  90. ).asSet());
  91. assertEquals(expectedResult, result);
  92. }
  93. @Test
  94. public void testGetClauseContextMultiIssueTypeNotEquals() throws Exception {
  95. final Operand operand = new MultiValueOperand("it1");
  96. TerminalClause clause = new TerminalClauseImpl(SystemSearchConstants.forIssueType().getJqlClauseNames().getPrimaryName(), Operator.NOT_EQUALS, operand);
  97. when(constantsManager.getAllIssueTypeIds()).thenReturn(CollectionBuilder.newBuilder("it1", "it2", "it4").asList());
  98. IssueTypeClauseContextFactory factory = createNoopIssueTypeClauseContextFactory();
  99. final ClauseContext result = factory.getClauseContext(null, clause);
  100. ClauseContext expectedResult = new ClauseContextImpl(CollectionBuilder.<ProjectIssueTypeContext>newBuilder(
  101. new ProjectIssueTypeContextImpl(AllProjectsContext.INSTANCE, new IssueTypeContextImpl("it2")),
  102. new ProjectIssueTypeContextImpl(AllProjectsContext.INSTANCE, new IssueTypeContextImpl("it4"))
  103. ).asSet());
  104. assertEquals(expectedResult, result);
  105. }
  106. @Test
  107. public void testGetClauseContextForNullLiterals() throws Exception {
  108. final EmptyOperand operand = EmptyOperand.EMPTY;
  109. TerminalClause clause = new TerminalClauseImpl(SystemSearchConstants.forIssueType().getJqlClauseNames().getPrimaryName(), Operator.IS, operand);
  110. JqlOperandResolver mockJqlOperandResolver = mock(JqlOperandResolver.class);
  111. when(mockJqlOperandResolver.getValues((ApplicationUser) null, operand, clause)).thenReturn(null);
  112. factory = new IssueTypeClauseContextFactory(issueTypeResolver, mockJqlOperandResolver, constantsManager);
  113. final ClauseContext result = factory.getClauseContext(null, clause);
  114. ClauseContext expectedResult = ClauseContextImpl.createGlobalClauseContext();
  115. assertEquals(expectedResult, result);
  116. }
  117. @Test
  118. public void testGetClauseContextForEmpty() throws Exception {
  119. final EmptyOperand operand = EmptyOperand.EMPTY;
  120. TerminalClause clause = new TerminalClauseImpl(SystemSearchConstants.forIssueType().getJqlClauseNames().getPrimaryName(), Operator.IS, operand);
  121. final IssueTypeClauseContextFactory factory = createNoopIssueTypeClauseContextFactory();
  122. final ClauseContext result = factory.getClauseContext(null, clause);
  123. ClauseContext expectedResult = ClauseContextImpl.createGlobalClauseContext();
  124. assertEquals(expectedResult, result);
  125. }
  126. @Test
  127. public void testGetClauseContextForNotEmpty() throws Exception {
  128. final TerminalClause clause = new TerminalClauseImpl(SystemSearchConstants.forIssueType().getJqlClauseNames().getPrimaryName(), Operator.IS_NOT, EmptyOperand.EMPTY);
  129. final IssueTypeClauseContextFactory factory = createNoopIssueTypeClauseContextFactory();
  130. final ClauseContext result = factory.getClauseContext(null, clause);
  131. ClauseContext expectedResult = ClauseContextImpl.createGlobalClauseContext();
  132. assertEquals(expectedResult, result);
  133. }
  134. @Test
  135. public void testGetClauseContextForNotEmptyOnlyInList() throws Exception {
  136. final TerminalClause clause = new TerminalClauseImpl(SystemSearchConstants.forIssueType().getJqlClauseNames().getPrimaryName(), Operator.IS_NOT, new MultiValueOperand(EmptyOperand.EMPTY));
  137. final IssueTypeClauseContextFactory factory = createNoopIssueTypeClauseContextFactory();
  138. final ClauseContext result = factory.getClauseContext(null, clause);
  139. ClauseContext expectedResult = ClauseContextImpl.createGlobalClauseContext();
  140. assertEquals(expectedResult, result);
  141. }
  142. @Test
  143. public void testGetClauseContextForEmptyInList() throws Exception {
  144. final TerminalClause clause = new TerminalClauseImpl(SystemSearchConstants.forIssueType().getJqlClauseNames().getPrimaryName(), Operator.IN, new MultiValueOperand(EmptyOperand.EMPTY, new SingleValueOperand("it2")));
  145. final IssueTypeClauseContextFactory factory = createNoopIssueTypeClauseContextFactory();
  146. final ClauseContext actualResult = factory.getClauseContext(null, clause);
  147. final ClauseContext expectedResult = new ClauseContextImpl(
  148. Collections.<ProjectIssueTypeContext>singleton(
  149. new ProjectIssueTypeContextImpl(AllProjectsContext.INSTANCE, new IssueTypeContextImpl("it2")
  150. )));
  151. assertEquals(expectedResult, actualResult);
  152. }
  153. @Test
  154. public void testGetClauseContextForNotEmptyInList() throws Exception {
  155. final TerminalClause clause = new TerminalClauseImpl(SystemSearchConstants.forIssueType().getJqlClauseNames().getPrimaryName(), Operator.NOT_IN, new MultiValueOperand(EmptyOperand.EMPTY, new SingleValueOperand("it2")));
  156. final IssueTypeClauseContextFactory factory = createNoopIssueTypeClauseContextFactory();
  157. when(constantsManager.getAllIssueTypeIds()).thenReturn(CollectionBuilder.newBuilder("it1", "it2", "it4").asList());
  158. final ClauseContext actualResult = factory.getClauseContext(null, clause);
  159. final ClauseContext expectedResult = new ClauseContextImpl(
  160. CollectionBuilder.<ProjectIssueTypeContext>newBuilder(
  161. new ProjectIssueTypeContextImpl(AllProjectsContext.INSTANCE, new IssueTypeContextImpl("it1")),
  162. new ProjectIssueTypeContextImpl(AllProjectsContext.INSTANCE, new IssueTypeContextImpl("it4"))
  163. ).asSet());
  164. assertEquals(expectedResult, actualResult);
  165. }
  166. @Test
  167. public void testGetClauseContextForNotInAll() throws Exception {
  168. final TerminalClause clause = new TerminalClauseImpl(SystemSearchConstants.forIssueType().getJqlClauseNames().getPrimaryName(), Operator.NOT_IN, new MultiValueOperand("it1", "it2", "it4"));
  169. final IssueTypeClauseContextFactory factory = createNoopIssueTypeClauseContextFactory();
  170. when(constantsManager.getAllIssueTypeIds()).thenReturn(CollectionBuilder.newBuilder("it1", "it2", "it4").asList());
  171. final ClauseContext actualResult = factory.getClauseContext(null, clause);
  172. final ClauseContext expectedResult = ClauseContextImpl.createGlobalClauseContext();
  173. assertEquals(expectedResult, actualResult);
  174. }
  175. @Test
  176. public void testGetClauseContextBadOperator() throws Exception {
  177. final EmptyOperand operand = EmptyOperand.EMPTY;
  178. TerminalClause clause = new TerminalClauseImpl(SystemSearchConstants.forIssueType().getJqlClauseNames().getPrimaryName(), Operator.LESS_THAN, operand);
  179. final IssueTypeClauseContextFactory factory = createNoopIssueTypeClauseContextFactory();
  180. final ClauseContext result = factory.getClauseContext(null, clause);
  181. ClauseContext expectedResult = ClauseContextImpl.createGlobalClauseContext();
  182. assertEquals(expectedResult, result);
  183. }
  184. @Test
  185. public void testGetIdStringValue() throws Exception {
  186. final List<String> ids = CollectionBuilder.newBuilder("name").asList();
  187. when(issueTypeResolver.getIdsFromName("name")).thenReturn(ids);
  188. QueryLiteral literal = createLiteral("name");
  189. assertEquals(ids, factory.getIds(literal));
  190. }
  191. @Test
  192. public void testGetIdLongValue() throws Exception {
  193. final List<String> ids = CollectionBuilder.newBuilder("10").asList();
  194. when(issueTypeResolver.idExists(10L)).thenReturn(true);
  195. QueryLiteral literal = createLiteral(10L);
  196. assertEquals(ids, factory.getIds(literal));
  197. }
  198. private IssueTypeClauseContextFactory createNoopIssueTypeClauseContextFactory() {
  199. return new IssueTypeClauseContextFactory(issueTypeResolver, jqlOperandResolver, constantsManager) {
  200. @Override
  201. List<String> getIds(final QueryLiteral value) {
  202. return CollectionBuilder.newBuilder(value.getStringValue()).asList();
  203. }
  204. };
  205. }
  206. }