def test_update_query(self):
        qb = Builder(collection=None)

        qb.update(multi=True) \
            .field('foo').equals('bar').set('buzz') \
            .field('totals').gt(10) \
            .field('counter').inc(1) \
            .field('some_list').push({'name': 'testing', 'value': 'cool'})

        query_parts = qb.build().query

        assert {'foo': 'bar', 'totals': {'$gt': 10}} == query_parts['query']

        assert {
            '$set': {
                'foo': 'buzz'
            },
            '$inc': {
                'counter': 1
            },
            '$push': {
                'some_list': {
                    'name': 'testing',
                    'value': 'cool'
                }
            }
        } == query_parts['newObj']
    def test_basic_fluent_api(self):
        qb = Builder(collection=None)

        qb.field('name').equals('foobar').field('fizz').ne(None)

        query_list = qb.get_query_list()

        assert query_list == {'name': 'foobar', 'fizz': {'$ne': None}}
    def test_basic_fluent_api(self):
        qb = Builder(collection=None)

        qb.field('name').equals('foobar').field('fizz').ne(None)

        query_list = qb.get_query_list()

        assert query_list == {'name': 'foobar', 'fizz': {'$ne': None}}
    def test_find_query(self):
        qb = Builder(collection=None)
        qb.field('name').is_not_in(['Matthew', 'Boris']) \
            .field('age').gte(21) \
            .field('attributes').is_type('object')

        query_list = qb.get_query_list()

        assert {'name': {'$nin': ['Matthew', 'Boris']},
                'age': {'$gte': 21},
                'attributes': {'$type': 3}} == query_list
    def test_count_query(self):
        qb = Builder(collection=None)

        qb.count() \
            .field('name').ne('awesome') \
            .field('age').lte(45)

        query_list = qb.get_query_list()

        assert {'name': {'$ne': 'awesome'},
                'age': {'$lte': 45}} == query_list

        assert qb.build().query['type'] == QueryTypes.TYPE_COUNT
    def test_insert_query(self):
        qb = Builder(collection=None)

        qb.insert() \
            .field('name').set('awesome') \
            .field('age').set(21) \
            .field('attributes').set([0, 1, 2, 3])

        insert_query = qb.build().query['newObj']

        assert {'name': 'awesome',
                'age': 21,
                'attributes': [0, 1, 2, 3]} == insert_query
    def test_insert_query(self):
        qb = Builder(collection=None)

        qb.insert() \
            .field('name').set('awesome') \
            .field('age').set(21) \
            .field('attributes').set([0, 1, 2, 3])

        insert_query = qb.build().query['newObj']

        assert {
            'name': 'awesome',
            'age': 21,
            'attributes': [0, 1, 2, 3]
        } == insert_query
    def test_update_query(self):
        qb = Builder(collection=None)

        qb.update(multi=True) \
            .field('foo').equals('bar').set('buzz') \
            .field('totals').gt(10) \
            .field('counter').inc(1) \
            .field('some_list').push({'name': 'testing', 'value': 'cool'})

        query_parts = qb.build().query

        assert {'foo': 'bar',
                'totals': {'$gt': 10}} == query_parts['query']

        assert {'$set': {'foo': 'buzz'},
                '$inc': {'counter': 1},
                '$push': {'some_list': {'name': 'testing', 'value': 'cool'}}} == query_parts['newObj']
    def test_basic_fluent_api(self):
        qb = Builder(collection=None)

        qb.field('name').equals('foobar').field('fizz').ne(None).field(
            'number').range(1, 20)

        query_list = qb.get_query_list()

        assert query_list == {
            'name': 'foobar',
            'fizz': {
                '$ne': None
            },
            'number': {
                '$gte': 1,
                '$lt': 20
            }
        }
    def test_find_query(self):
        qb = Builder(collection=None)
        qb.field('name').is_not_in(['Matthew', 'Boris']) \
            .field('age').gte(21) \
            .field('attributes').is_type('object')

        query_list = qb.get_query_list()

        assert {
            'name': {
                '$nin': ['Matthew', 'Boris']
            },
            'age': {
                '$gte': 21
            },
            'attributes': {
                '$type': 3
            }
        } == query_list
    def test_count_query(self):
        qb = Builder(collection=None)

        qb.count() \
            .field('name').ne('awesome') \
            .field('age').lte(45)

        query_list = qb.get_query_list()

        assert {'name': {'$ne': 'awesome'}, 'age': {'$lte': 45}} == query_list

        assert qb.build().query['type'] == QueryTypes.TYPE_COUNT