示例#1
0
def test_field():
    q1 = SearchHelper(INDEX, search_client=SEARCH_CLIENT)
    # Single field and return value test
    assert isinstance(q1._field("mdf.source_name", "oqmd"), SearchHelper)
    assert q1._SearchHelper__query["q"] == "(mdf.source_name:oqmd"
    # Multi-field and grouping test
    q1._and_join(close_group=True)._field("dc.title", "sample")
    assert q1._SearchHelper__query[
        "q"] == "(mdf.source_name:oqmd) AND (dc.title:sample"
    # Negation test
    q1._negate()
    assert q1._SearchHelper__query[
        "q"] == "(mdf.source_name:oqmd) AND (dc.title:sample NOT "
    # Explicit operator test
    # Makes invalid query for this case
    q1._operator("NOT")
    assert q1._SearchHelper__query[
        "q"] == "(mdf.source_name:oqmd) AND (dc.title:sample NOT  NOT "
    # Ensure advanced is set
    assert q1._SearchHelper__query["advanced"] is True

    # Test noop on blanks
    q2 = SearchHelper(INDEX, search_client=SEARCH_CLIENT)
    assert q2._SearchHelper__query["q"] == "("
    q2._field(field="", value="value")
    assert q2._SearchHelper__query["q"] == "("
    q2._field(field="field", value="")
    assert q2._SearchHelper__query["q"] == "("
    q2._field(field="", value="")
    assert q2._SearchHelper__query["q"] == "("
    q2._field(field="field", value="value")
    assert q2._SearchHelper__query["q"] == "(field:value"

    # Test auto-quote
    q3 = SearchHelper(INDEX, search_client=SEARCH_CLIENT)
    q3._field("dc.descriptions.description", "With Spaces")
    assert q3._SearchHelper__query[
        "q"] == '(dc.descriptions.description:"With Spaces"'
    q3._and_join(close_group=True)._field("dc.title", "Mark's")
    assert q3._SearchHelper__query["q"] == (
        '(dc.descriptions.description:"With Spaces") AND ('
        'dc.title:"Mark\'s"')
    q3._or_join(close_group=False)._field("dc.title", "The\nLarch")
    assert q3._SearchHelper__query["q"] == (
        '(dc.descriptions.description:"With Spaces") AND ('
        'dc.title:"Mark\'s" OR dc.title:"The\nLarch"')
    # No auto-quote on ranges
    q3._and_join(close_group=True)._field("block.range", "[5 TO 6]")
    assert q3._SearchHelper__query["q"] == (
        '(dc.descriptions.description:"With Spaces") AND ('
        'dc.title:"Mark\'s" OR dc.title:"The\nLarch") AND ('
        'block.range:[5 TO 6]')
示例#2
0
def test_operator():
    q = SearchHelper(INDEX, search_client=SEARCH_CLIENT)
    assert q._SearchHelper__query["q"] == "("
    # Add bad operator
    with pytest.raises(ValueError):
        assert q._operator("FOO") == q
    assert q._SearchHelper__query["q"] == "("
    # Test operator cleaning
    q._operator("   and ")
    assert q._SearchHelper__query["q"] == "( AND "
    # Test close_group
    q._operator("OR", close_group=True)
    assert q._SearchHelper__query["q"] == "( AND ) OR ("