Exemple #1
0
class TestMagicFilter(unittest.TestCase):
    def setUp(self):
        self.m = Magic()

    def test_filter_and_or(self):
        self.m.set_data([0, 1, 2, 3, 5, 7])
        self.m.filter(__lt=5, __gt=2)._or(__eq=1)

        self.assertEqual(self.m.get_filter_data(), [1, 3])

    def test_filter_with_object(self):
        m1 = Magic()
        m1.filter(__lt=5, __gt=2)._or(__eq=1)

        self.m.set_data([0, 1, 2, 3, 5, 7])
        self.m.filter(m1)

        self.assertEqual(self.m.get_filter_data(), [1, 3])

    def test_filter_with_objects(self):
        m1 = Magic()
        m1.filter(__lt=5, __gt=2)

        m2 = Magic()
        m2.filter(__in=[3])

        self.m.set_data([0, 1, 2, 3, 4, 5, 7])
        self.m.filter(m1)._not(m2)

        self.assertEqual(self.m.get_filter_data(), [4])

    def test_filter_and_not(self):
        self.m.set_data(range(15))
        self.m.filter(__gt=5)._not(__gte=7, __lte=11)

        self.assertEqual(self.m.get_filter_data(), [6, 12, 13, 14])

    def test_filter_and_or_not(self):
        self.m.set_data(range(100))
        self.m.filter(__gt=3).filter(__lte=5)._or(__lt=20,
                                                  __gt=14)._not(__eq=15)

        self.assertEqual(self.m.get_filter_data(), [4, 5, 16, 17, 18, 19])

    def test_filter_object_and_gt(self):
        class Square:
            def __init__(self, a, b):
                self.a = a
                self.b = b

        data = []
        for i in range(10):
            data.append(Square(i, i**2))

        self.m.set_data(data)
        self.m.filter(a__gt=5)

        self.assertEqual(len(self.m.get_filter_data()), 4)

    def test_filter_object_and_gt_lte_same_attr(self):
        class Square:
            def __init__(self, a, b):
                self.a = a
                self.b = b

        data = []
        for i in range(10):
            data.append(Square(i, i**2))

        self.m.set_data(data)
        self.m.filter(a__gt=5, a__lte=8)

        self.assertEqual(len(self.m.get_filter_data()), 3)

    def test_filter_object_and_gt_lte_diff_attr(self):
        class Square:
            def __init__(self, a, b):
                self.a = a
                self.b = b

        data = []
        for i in range(10):
            data.append(Square(i, i**2))

        self.m.set_data(data)
        self.m.filter(a__gt=5, b__gte=49)

        self.assertEqual(len(self.m.get_filter_data()), 3)

    def test_filter_object_and_not_gt_lte_diff_attr(self):
        class Square:
            def __init__(self, a, b):
                self.a = a
                self.b = b

        data = []
        for i in range(10):
            data.append(Square(i, i**2))

        self.m.set_data(data)
        self.m.filter(a__gt=5, b__gte=49)._not(a__eq=7)

        self.assertEqual(len(self.m.get_filter_data()), 2)

    def test_filter_object_error_attr(self):
        class Square:
            def __init__(self, a, b):
                self.a = a
                self.b = b

        data = []
        for i in range(10):
            data.append(Square(i, i**2))

        self.m.set_data(data)
        self.m.filter(a__gt=5, b__gte=49).filter(c__eq=7)

        self.assertEqual(len(self.m.get_filter_data()), 0)