@Test public void testTerminalClauseOneSearchHandler() throws Exception { final TerminalClause input = new TerminalClauseImpl("field", Operator.EQUALS, "Value"); final SearchHandlerManager manager = mockController.getMock(SearchHandlerManager.class); final ClausePermissionHandler permissionHandler = mockController.getMock(ClausePermissionHandler.class); EasyMock.expect(permissionHandler.sanitise(null, input)).andReturn(input); final ClauseHandler handler = new MockClauseHandler(null, null, permissionHandler, null); EasyMock.expect(manager.getClauseHandler((User) null, "field")) .andReturn(Collections.singletonList(handler)); final JqlOperandResolver jqlOperandResolver = mockController.getMock(JqlOperandResolver.class); mockController.replay(); ClauseSanitisingVisitor visitor = new ClauseSanitisingVisitor(manager, jqlOperandResolver, null) { @Override TerminalClause sanitiseOperands(final TerminalClause clause) { return clause; } }; final Clause clause = input.accept(visitor); assertSame(clause, input); mockController.verify(); }
@Test public void testTerminalClauseTwoSearchHandlersDifferent() throws Exception { final TerminalClause input1 = new TerminalClauseImpl("field", Operator.EQUALS, "Value1"); final TerminalClause input2 = new TerminalClauseImpl("field", Operator.EQUALS, "Value2"); final SearchHandlerManager manager = mockController.getMock(SearchHandlerManager.class); final ClausePermissionHandler permissionHandler = mockController.getMock(ClausePermissionHandler.class); EasyMock.expect(permissionHandler.sanitise(null, input1)).andReturn(input1); EasyMock.expect(permissionHandler.sanitise(null, input1)).andReturn(input2); final ClauseHandler handler1 = new MockClauseHandler(null, null, permissionHandler, null); final ClauseHandler handler2 = new MockClauseHandler(null, null, permissionHandler, null); EasyMock.expect(manager.getClauseHandler((User) null, "field")) .andReturn(CollectionBuilder.newBuilder(handler1, handler2).asList()); final JqlOperandResolver jqlOperandResolver = mockController.getMock(JqlOperandResolver.class); mockController.replay(); ClauseSanitisingVisitor visitor = new ClauseSanitisingVisitor(manager, jqlOperandResolver, null) { @Override TerminalClause sanitiseOperands(final TerminalClause clause) { return clause; } }; final Clause expected = new OrClause(input1, input2); final Clause clause = input1.accept(visitor); assertEquals(expected, clause); mockController.verify(); }
private boolean stringValueExists( PossibleValuesHolder possibleValuesHolder, User searcher, String fieldName, String rawValue) { final String valuePrefix = ""; final Collection<ClauseHandler> clauseHandlers = searchHandlerManager.getClauseHandler(searcher, fieldName); if (clauseHandlers != null && clauseHandlers.size() == 1) { ClauseHandler clauseHandler = clauseHandlers.iterator().next(); if (clauseHandler instanceof ValueGeneratingClauseHandler) { if (possibleValuesHolder.getCurrentValues() == null) { final ClauseValuesGenerator.Results generatorResults = ((ValueGeneratingClauseHandler) (clauseHandler)) .getClauseValuesGenerator() .getPossibleValues( searcher, jqlChangeItemMapping.mapJqlClauseToFieldName(fieldName), valuePrefix, Integer.MAX_VALUE); final List<ClauseValuesGenerator.Result> list = generatorResults.getResults(); final Set<String> possibleValues = new HashSet<String>(list.size()); for (ClauseValuesGenerator.Result result : list) { possibleValues.add(result.getValue().toLowerCase()); } possibleValuesHolder.setCurrentValues(possibleValues); } if (!possibleValuesHolder.getCurrentValues().contains(rawValue.toLowerCase())) { if (possibleValuesHolder.getHistoricalValues() == null) { final Set<String> possibleValuesSet = findAllPossibleFieldTerms(searcher, fieldName.toLowerCase()); possibleValuesHolder.setHistoricalValues(possibleValuesSet); } return possibleValuesHolder.getHistoricalValues().contains(rawValue.toLowerCase()); } return possibleValuesHolder.getCurrentValues().contains(rawValue.toLowerCase()); } } return false; }