def test_query_builder():
    qb = search_parser.query_builder()
    ex = {"$exists":True}
    tests = [
        (lambda x: x.tag("tag1"),
            {"tags__tag1":ex}),
        (lambda x: x.tag("tag1").tag("tag2"),
            {"tags__tag1":ex,
             "tags__tag2":ex}),
        (lambda x:x.keyword("key1"),
            {'description__ngram_prob__1__key1':ex}),
        (lambda x:x.year("1998"),
            {"published_on__gt":datetime.datetime(1998,1,1)}),
        (lambda x:x.tag("tag1").tag("tag2").keyword('key1').keyword('key2').year('1998'),
            {"published_on__gt":datetime.datetime(1998,1,1),
             'description__ngram_prob__1__key1':ex,
             'description__ngram_prob__1__key2':ex,
             "tags__tag1":ex,
             "tags__tag2":ex})]
    for (f,v) in tests:
        q = f(search_parser.query_builder()).get()
        assert v==q, "Expected: %s, got %s" % (str(v),str(q))
def test_parse_query():
    qb = search_parser.query_builder()
    q1 = qb.tag("foo").keyword("bar").get()
    q2 = search_parser.parse_query("t:foo bar")
    assert q1==q2, "Expected: %s, got %s" % (str(v),str(q))