Exemplo n.º 1
0
    def test_combination_inverted(self):
        c = ~((C('foo') == 'bar') & (C('bar') > 5))
        ast = c.get_ast()

        self.assertEqual(
            ast, {
                'name': 'not',
                'val': {
                    'name':
                    'join_and',
                    'val': [{
                        'name':
                        'cond_eq',
                        'val': [{
                            'name': 'prop',
                            'val': 'foo'
                        }, {
                            'name': 'val',
                            'val': 'bar'
                        }]
                    }, {
                        'name':
                        'cond_gt',
                        'val': [{
                            'name': 'prop',
                            'val': 'bar'
                        }, {
                            'name': 'val',
                            'val': 5
                        }]
                    }]
                }
            })
Exemplo n.º 2
0
    def test_property_xor(self):
        c = (C('foo') == 'bar') ^ (C('bar') > 5)
        ast = c.get_ast()

        self.assertEqual(
            ast, {
                'name':
                'join_xor',
                'val': [{
                    'name':
                    'cond_eq',
                    'val': [{
                        'name': 'prop',
                        'val': 'foo'
                    }, {
                        'name': 'val',
                        'val': 'bar'
                    }]
                }, {
                    'name':
                    'cond_gt',
                    'val': [{
                        'name': 'prop',
                        'val': 'bar'
                    }, {
                        'name': 'val',
                        'val': 5
                    }]
                }]
            })
Exemplo n.º 3
0
    def test_complex_condition(self):
        c1 = (C('foo') == 'bar') & (C('bar') > 5)
        c2 = (C('foo') == 'bar') & (C('bar') > 5)
        c = c1 & c2
        ast = c.get_ast()

        self.assertEqual(
            ast, {
                'name':
                'join_and',
                'val': [{
                    'name':
                    'join_and',
                    'val': [{
                        'name':
                        'cond_eq',
                        'val': [{
                            'name': 'prop',
                            'val': 'foo'
                        }, {
                            'name': 'val',
                            'val': 'bar'
                        }]
                    }, {
                        'name':
                        'cond_gt',
                        'val': [{
                            'name': 'prop',
                            'val': 'bar'
                        }, {
                            'name': 'val',
                            'val': 5
                        }]
                    }]
                }, {
                    'name':
                    'join_and',
                    'val': [{
                        'name':
                        'cond_eq',
                        'val': [{
                            'name': 'prop',
                            'val': 'foo'
                        }, {
                            'name': 'val',
                            'val': 'bar'
                        }]
                    }, {
                        'name':
                        'cond_gt',
                        'val': [{
                            'name': 'prop',
                            'val': 'bar'
                        }, {
                            'name': 'val',
                            'val': 5
                        }]
                    }]
                }]
            })
Exemplo n.º 4
0
    def test_query_get_one(self):
        expected = {'foo': 'bar'}
        attrs = {
            'find_elements.return_value': [expected]
        }
        self.feature.configure_mock(**attrs)

        result = self.query.all().get(C('foo'))

        self.assertEqual(result, expected)

        self.feature.find_elements.assert_called_with([
            {
                'name': 'get',
                'val': {
                    'name': 'cond_exists',
                    'val': [
                        {
                            'name': 'prop',
                            'val': 'foo'
                        },
                        {
                            'name': 'val',
                            'val': True
                        }
                    ]
                }
            }
        ])
Exemplo n.º 5
0
    def test_query_get_none(self):
        attrs = {
            'find_elements.return_value': []
        }
        self.feature.configure_mock(**attrs)

        result = self.query.all().get(C('foo'))

        self.assertIsNone(result)

        self.feature.find_elements.assert_called_with([
            {
                'name': 'get',
                'val': {
                    'name': 'cond_exists',
                    'val': [
                        {
                            'name': 'prop',
                            'val': 'foo'
                        },
                        {
                            'name': 'val',
                            'val': True
                        }
                    ]
                }
            }
        ])
Exemplo n.º 6
0
    def test_query_count(self):
        attrs = {
            'count_elements.return_value': 3
        }
        self.feature.configure_mock(**attrs)

        result = self.query.all().filter(C('foo') == 'bar').count()

        self.assertEqual(result, 3)

        self.feature.count_elements.assert_called_with([{
            'name': 'filter',
            'val': {
                'name': 'cond_eq',
                'val': [
                    {
                        'name': 'prop',
                        'val': 'foo'
                    },
                    {
                        'name': 'val',
                        'val': 'bar'
                    }
                ]
            }
        }])
Exemplo n.º 7
0
    def _get_filter(self):
        """
        Convert data to filter matching the data.

        :returns: Filter
        :rtype: C or CombinedCondition
        """

        condition = None

        for key, val in iteritems(self.data):
            if condition is None:
                condition = C(key) == val

            else:
                condition = condition & (C(key) == val)

        return condition
Exemplo n.º 8
0
    def test_property_andor(self):
        c = ((C('foo') == 'bar') & (C('bar') > 5)) | (~C('baz'))
        ast = c.get_ast()

        self.assertEqual(
            ast, {
                'name':
                'join_or',
                'val': [{
                    'name':
                    'join_and',
                    'val': [{
                        'name':
                        'cond_eq',
                        'val': [{
                            'name': 'prop',
                            'val': 'foo'
                        }, {
                            'name': 'val',
                            'val': 'bar'
                        }]
                    }, {
                        'name':
                        'cond_gt',
                        'val': [{
                            'name': 'prop',
                            'val': 'bar'
                        }, {
                            'name': 'val',
                            'val': 5
                        }]
                    }]
                }, {
                    'name':
                    'cond_exists',
                    'val': [{
                        'name': 'prop',
                        'val': 'baz'
                    }, {
                        'name': 'val',
                        'val': False
                    }]
                }]
            })
Exemplo n.º 9
0
    def test_in_condition(self):
        c = C('prop1') == E('prop2')
        ast = c.get_ast()

        self.assertEqual(
            ast, {
                'name':
                'cond_eq',
                'val': [{
                    'name': 'prop',
                    'val': 'prop1'
                }, {
                    'name': 'ref',
                    'val': 'prop2'
                }]
            })

        c = C('prop1') == (E('prop2') + E('prop3'))
        ast = c.get_ast()

        self.assertEqual(
            ast, {
                'name':
                'cond_eq',
                'val': [{
                    'name': 'prop',
                    'val': 'prop1'
                }, {
                    'name':
                    'op_add',
                    'val': [{
                        'name': 'ref',
                        'val': 'prop2'
                    }, {
                        'name': 'ref',
                        'val': 'prop3'
                    }]
                }]
            })
Exemplo n.º 10
0
    def test_property_greater_than_or_equal(self):
        c = C('i') >= 5
        ast = c.get_ast()

        self.assertEqual(
            ast, {
                'name': 'cond_gte',
                'val': [{
                    'name': 'prop',
                    'val': 'i'
                }, {
                    'name': 'val',
                    'val': 5
                }]
            })
Exemplo n.º 11
0
    def test_property_less_than(self):
        c = C('i') < 5
        ast = c.get_ast()

        self.assertEqual(
            ast, {
                'name': 'cond_lt',
                'val': [{
                    'name': 'prop',
                    'val': 'i'
                }, {
                    'name': 'val',
                    'val': 5
                }]
            })
Exemplo n.º 12
0
    def test_property_exists(self):
        c = C('prop')
        ast = c.get_ast()

        self.assertEqual(
            ast, {
                'name':
                'cond_exists',
                'val': [{
                    'name': 'prop',
                    'val': 'prop'
                }, {
                    'name': 'val',
                    'val': True
                }]
            })
Exemplo n.º 13
0
    def test_property_equal(self):
        c = C('foo') == 'bar'
        ast = c.get_ast()

        self.assertEqual(
            ast, {
                'name':
                'cond_eq',
                'val': [{
                    'name': 'prop',
                    'val': 'foo'
                }, {
                    'name': 'val',
                    'val': 'bar'
                }]
            })
Exemplo n.º 14
0
    def test_property_like(self):
        c = C('foo') % r'bar.*'
        ast = c.get_ast()

        self.assertEqual(
            ast, {
                'name':
                'cond_like',
                'val': [{
                    'name': 'prop',
                    'val': 'foo'
                }, {
                    'name': 'val',
                    'val': r'bar.*'
                }]
            })
Exemplo n.º 15
0
    def test_to_ast(self):
        expected = [
            {
                'name': 'filter',
                'val': {
                    'name': 'cond_eq',
                    'val': [
                        {
                            'name': 'prop',
                            'val': 'foo'
                        },
                        {
                            'name': 'val',
                            'val': 'bar'
                        }
                    ]
                }
            }
        ]

        q = self.query.all().filter(C('foo') == 'bar')

        self.assertEqual(q.to_ast(), expected)
Exemplo n.º 16
0
    def test_query_exclude(self):
        expected = [
            {'_id': 'some id 1', 'foo': 'baz'},
            {'_id': 'some id 2', 'foo': 'baz'},
            {'_id': 'some id 3', 'foo': 'baz'}
        ]
        attrs = {
            'find_elements.return_value': expected
        }
        self.feature.configure_mock(**attrs)

        result = self.query.all().exclude(C('foo') == 'bar')

        self.assertIsInstance(result, Query)

        result = list(result)
        self.assertEqual(result, expected)

        self.feature.find_elements.assert_called_with([
            {
                'name': 'exclude',
                'val': {
                    'name': 'cond_eq',
                    'val': [
                        {
                            'name': 'prop',
                            'val': 'foo'
                        },
                        {
                            'name': 'val',
                            'val': 'bar'
                        }
                    ]
                }
            }
        ])
Exemplo n.º 17
0
 def test_wrong_combination(self):
     with self.assertRaises(TypeError):
         C('foo') & 5