Example #1
0
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()
Example #2
0
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]: '
Example #3
0
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")')
Example #4
0
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()
Example #5
0
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() == ''
Example #6
0
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() == ''
Example #7
0
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)'
Example #8
0
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)'
Example #9
0
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]: '
Example #10
0
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]')
Example #11
0
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'")