def test_get_query_with_modifiers(): """Check that query with modifiers is parsed correctly.""" # Relation Modifiers q_string = 'dc.anywhere any/relevant spam' query = parse(q_string) assert len(query.relation.modifiers) > 0 for mod in query.relation.modifiers: assert isinstance(mod, ModifierClause) assert str(query.relation.modifiers[0].type) == 'cql.relevant' assert str(query.relation.modifiers[0].comparison) == '' assert str(query.relation.modifiers[0].value) == '' with pytest.raises(Diagnostic): query.to_es() # Boolean modifiers q_string = 'dc.anywhere all spam and/rel.combine=sum dc.anywhere all eggs' query = parse(q_string) assert len(query.boolean.modifiers) > 0 for mod in query.boolean.modifiers: assert isinstance(mod, ModifierClause) assert str(query.boolean.modifiers[0].type) == 'rel.combine' assert str(query.boolean.modifiers[0].comparison) == '=' assert str(query.boolean.modifiers[0].value) == 'sum' with pytest.raises(Diagnostic): query.to_es()
def test_get_query_triple_with_sort(app): """Check that query with boolean is parsed correctly.""" query = parse( 'dc.anywhere all spam and dc.anywhere all eggs sortBy subtitle') # Check query instance assert isinstance(query, Triple) with pytest.raises(Diagnostic) as err: query.to_es() assert str(err.value) == 'info:srw/diagnostic/1/80 [Sort not supported]: '
def test_get_query_clause_with_relation(app): """Check that relation clause is parsed correctly.""" query = parse('year > 1999') # Check query instance assert isinstance(query, SearchClause) # Check Relation assert isinstance(query.relation, Relation) assert query.relation.value == '>' # Check Value assert isinstance(query.term, Term) assert query.term.value == '1999' es_string = query.to_es() assert es_string == 'year:>1999' query = parse('ind1 = 1 AND ind2 > 2 AND ind3 >= 3 AND ' + 'ind4 < 4 AND ind5 <= 5 AND ind6 <> 6') es_string = query.to_es() assert es_string == ('(((((ind1:1 AND ind2:>2) AND ind3:>=3) ' 'AND ind4:<4) AND ind5:<=5) AND ind6:-"6")')
def test_get_query_clause_modifiers(): """Check that relation modifiers are parsed correctly.""" query = parse('dc.anywhere all/cql.stem/rel.algorithm=okapi "spam"') assert len(query.relation.modifiers) > 0 for mod in query.relation.modifiers: assert isinstance(mod, ModifierClause) assert str(query.relation.modifiers[0].type) == 'cql.stem' assert str(query.relation.modifiers[1].type) == 'rel.algorithm' assert str(query.relation.modifiers[1].comparison) == '=' assert str(query.relation.modifiers[1].value) == 'okapi' with pytest.raises(Diagnostic): query.to_es()
def test_get_query_clause(app): """Check that simple clause is parsed correctly.""" query = parse('dc.anywhere all "spam hamm"') # Check query instance assert isinstance(query, SearchClause) # Check Index assert isinstance(query.index, Index) assert query.index.prefix == 'dc' assert query.index.value == 'anywhere' # Check Relation assert isinstance(query.relation, Relation) assert query.relation.value == 'all' # Check Value assert isinstance(query.term, Term) assert query.term.value == '"spam hamm"' es_string = query.to_es() assert es_string == '(spam AND hamm)' query = parse('((title=spam) or (subtitle=hamm)) or eggs') es_string = query.to_es() assert es_string == '((title:spam OR subtitle:hamm) OR eggs)' assert query.get_result_set_id() == ''
def test_get_query_triple(app): """Check that query with boolean is parsed correctly.""" query = parse('dc.anywhere all spam and dc.anywhere all eggs') # Check query instance assert isinstance(query, Triple) # Check left clause assert isinstance(query.left_operand, SearchClause) # remember terms get quoted during parsing assert query.left_operand.to_es() == '(spam)' # Check boolean assert isinstance(query.boolean, Boolean) assert query.boolean.value == 'and' # Check right clause assert isinstance(query.right_operand, SearchClause) # Remember terms get quoted during parsing assert query.right_operand.to_es() == '(eggs)' es_string = query.to_es() assert es_string == '((spam) AND (eggs))' query = parse("dc.anywhere prox spam") with pytest.raises(Diagnostic) as err: query.to_es() assert str(err.value) == ( 'info:srw/diagnostic/1/37 [Unsupported boolean operator]: prox') assert query.get_result_set_id() == ''
def test_get_query_clause_utf8(app): """Check that simple clause with utf8 is parsed correctly.""" query = parse('dc.anywhere any "späm h\xe4mm"') # Check query instance assert isinstance(query, SearchClause) # Check Index assert isinstance(query.index, Index) assert query.index.prefix == 'dc' assert query.index.value == 'anywhere' # Check Relation assert isinstance(query.relation, Relation) assert query.relation.value == 'any' # Check Value assert isinstance(query.term, Term) assert query.term.value == '"späm hämm"' es_string = query.to_es() assert es_string == '(späm OR hämm)'
def test_get_query_clause_with_prefix(app): """Check that simple clause with prefix is parsed correctly.""" query = parse('>cql="info:srw/cql-context-set/1/cql-v1.1" cql.anywhere ' 'cql.all "spam"') # Check query instance assert isinstance(query, SearchClause) # Check Index assert isinstance(query.index, Index) assert query.index.prefix == 'cql' assert query.index.value == 'anywhere' # Check Relation assert isinstance(query.relation, Relation) assert query.relation.value == 'all' # Check Value assert isinstance(query.term, Term) assert query.term.value == '"spam"' es_string = query.to_es() assert es_string == '(spam)'
def test_get_query_clause_with_sorting(app): """Check that simple clause with sorting is parsed correctly.""" query = parse('"cat" sortBy title') # Check query instance assert isinstance(query, SearchClause) # Check Index assert isinstance(query.index, Index) assert query.index.value == 'serverchoice' # Check Relation assert isinstance(query.relation, Relation) assert query.relation.value == '=' # Check Value assert isinstance(query.term, Term) assert query.term.value == '"cat"' with pytest.raises(Diagnostic) as err: query.to_es() assert str(err.value) == \ 'info:srw/diagnostic/1/80 [Sort not supported]: '
def test_get_query_clause_with_relation_modifier(): """Check that simple clause with relation modifier is parsed correctly.""" query = parse('anywhere all/relevant "spam"') # Check query instance assert isinstance(query, SearchClause) # Check Index assert isinstance(query.index, Index) assert query.index.value == 'anywhere' # Check Relation assert isinstance(query.relation, Relation) assert query.relation.value == 'all' # Check Value assert isinstance(query.term, Term) assert query.term.value == '"spam"' with pytest.raises(Diagnostic) as err: query.to_es() assert str(err.value).startswith( 'info:srw/diagnostic/1/21 ' '[Unsupported combination of relation modifers]')
def test_errors(): """Check errors are trown correctly.""" q_string = '' with pytest.raises(Diagnostic) as err: parse(q_string) assert str(err.value) == ('info:srw/diagnostic/1/10 [Malformed Query]: ' 'Expected Boolean or Relation but got: ') q_string = '123 456' with pytest.raises(Diagnostic) as err: parse(q_string) assert str(err.value) == ('info:srw/diagnostic/1/10 [Malformed Query]: ' 'Expected Term, got end of query.') q_string = '123 any 789 abc' with pytest.raises(Diagnostic) as err: parse(q_string) assert str(err.value) == ("info:srw/diagnostic/1/10 [Malformed Query]: " "Unprocessed tokens remain: 'abc'")