Esempio n. 1
0
    def test_joint_conditions(self):
        """
        Test that joint conditions must be on the same aliased instance.

        In particular P(rel__attr1=val1, rel__attr2=val2) produces only a
        single join, so the two conditions must be jointly satisfied on the
        same database row.
        """
        self._assert_P_matches_Q(
            self.test_obj,
            p=P(m2ms__int_value=10, m2ms__char_value='bar'),
            q=Q(m2ms__int_value=10, m2ms__char_value='bar'),
        )
        self._assert_P_matches_Q(
            self.test_obj,
            p=P(m2ms__int_value=10, m2ms__char_value='foo'),
            q=Q(m2ms__int_value=10, m2ms__char_value='foo'),
        )
        self._assert_P_matches_Q(
            self.test_obj,
            p=P(m2ms__int_value=10) & OrmP(m2ms__char_value='bar'),
            q=Q(m2ms__int_value=10) & Q(m2ms__char_value='bar'),
        )

        self._assert_P_matches_Q(
            self.test_obj,
            p=P(m2ms__int_value=10) & OrmP(m2ms__char_value='foo'),
            q=Q(m2ms__int_value=10) & Q(m2ms__char_value='foo'),
        )
Esempio n. 2
0
    def test_nested_q(self):
        predicate = OrmP(Q(int_value=1))
        self.assertEqual(set(TestObj.objects.filter(predicate)), {self.obj1})
        self.assertEqual(set(predicate.filter(self.objects)), {self.obj1})

        predicate = OrmP(Q(Q(int_value=1)))
        self.assertEqual(set(TestObj.objects.filter(predicate)), {self.obj1})
        self.assertEqual(set(predicate.filter(self.objects)), {self.obj1})
Esempio n. 3
0
 def test_children_relationship_single(self):
     parent = TestObj.objects.create(int_value=100)
     TestObj.objects.bulk_create(
         [TestObj(int_value=i, parent=parent) for i in range(3)])
     self.assertIn(parent,
                   TestObj.objects.filter(OrmP(children__int_value=2)))
     pred = OrmP(children__int_value=2)
     self.assertIn(parent, pred)
Esempio n. 4
0
 def test_reverse_foreign_key_default_name(self):
     test_obj = TestObj.objects.create(int_value=20)
     fkey = ForeignKeyModel.objects.create(test_obj=test_obj, int_value=30)
     other_fkey = ForeignKeyModel.objects.create()
     self.assertIn(fkey, test_obj.foreignkeymodel_set.all())
     self.assertIn(test_obj, OrmP(foreignkeymodel=fkey))
     self.assertIn(test_obj, OrmP(foreignkeymodel__int_value=30))
     self.assertNotIn(test_obj, OrmP(foreignkeymodel=other_fkey))
Esempio n. 5
0
 def test_random_follow_relationship(self):
     make_test_objects()
     p1 = OrmP(parent__int_value__gt=10)
     obj = TestObj.objects.filter(parent__int_value__gt=10)[0]
     self.assertTrue(p1.eval(obj))
     p2 = OrmP(parent__parent__int_value__gt=10)
     obj = TestObj.objects.filter(parent__parent__int_value__gt=10)[0]
     self.assertTrue(p2.eval(obj))
Esempio n. 6
0
    def test_m2m(self):
        test_obj = TestObj.objects.create(int_value=20)
        m2m = test_obj.m2ms.create(int_value=10)
        self.assertIn(test_obj, OrmP(m2ms=m2m))
        self.assertIn(test_obj, OrmP(m2ms__int_value=10))

        m2m2 = M2MModel.objects.create(int_value=30)
        self.assertNotIn(test_obj, OrmP(m2ms=m2m2))
        self.assertNotIn(test_obj, OrmP(m2ms__int_value=30))
Esempio n. 7
0
    def test_and(self):
        p1 = OrmP(char_value__contains='hello')
        p2 = OrmP(int_value=50)
        p3 = OrmP(int_value__lt=20)
        pand1 = p1 & p2
        pand2 = p2 & p3
        self.assertTrue(pand1.eval(self.testobj))
        self.assertFalse(pand2.eval(self.testobj))

        self.assertNotIn(self.testobj, OrmP(int_value=20) & OrmP(int_value=50))
Esempio n. 8
0
    def test_reverse_one_to_one_relationships(self):
        test_obj = TestObj.objects.create()
        one_to_one = OneToOneModel.objects.create(test_obj=test_obj,
                                                  int_value=10)
        other_one_to_one = OneToOneModel.objects.create()

        self.assertNotIn(test_obj, OrmP(onetoonemodel=other_one_to_one))
        self.assertNotIn(test_obj, OrmP(onetoonemodel__int_value=20))

        self.assertIn(test_obj, OrmP(onetoonemodel=one_to_one))
        self.assertIn(test_obj, OrmP(onetoonemodel__int_value=10))
Esempio n. 9
0
    def test_direct_one_to_one_relationships(self):
        test_obj = TestObj.objects.create(int_value=1)
        other_test_obj = TestObj.objects.create(int_value=2)
        one_to_one = OneToOneModel.objects.create(test_obj=test_obj,
                                                  int_value=10)

        self.assertIn(one_to_one, OrmP(test_obj=test_obj))
        self.assertIn(one_to_one, OrmP(test_obj__int_value=1))

        self.assertNotIn(one_to_one, OrmP(test_obj=other_test_obj))
        self.assertNotIn(one_to_one, OrmP(test_obj__int_value=2))
Esempio n. 10
0
    def test_debug_orm_validations(self):
        self.assertIn(self.test_obj, P(int_value=10))
        with mock.patch('predicate.debug.original_eval',
                        return_value=False) as patched:
            with self.assertRaises(AssertionError):
                self.test_obj in OrmP(int_value=10)
        self.assertTrue(patched.called)

        with mock.patch('predicate.debug.original_eval',
                        return_value=True) as patched:
            self.assertIn(self.test_obj, OrmP(int_value=10))
        self.assertTrue(patched.called)
Esempio n. 11
0
    def test_reverse_one_to_one_relationships_custom_related_name(self):
        test_obj = TestObj.objects.create()
        custom_one_to_one = CustomRelatedNameOneToOneModel.objects.create(
            test_obj=test_obj, int_value=10)
        other_custom_one_to_one = CustomRelatedNameOneToOneModel.objects.create(
        )

        self.assertNotIn(test_obj,
                         OrmP(custom_one_to_one=other_custom_one_to_one))
        self.assertNotIn(test_obj, OrmP(custom_one_to_one__int_value=20))

        self.assertIn(test_obj, OrmP(custom_one_to_one=custom_one_to_one))
        self.assertIn(test_obj, OrmP(custom_one_to_one__int_value=10))
Esempio n. 12
0
    def test_nested_q(self):
        predicate = OrmP(Q(int_value=1))
        self.assertEqual(set(TestObj.objects.filter(predicate)), {self.obj1})
        self.assertEqual(set(predicate.filter(self.objects)), {self.obj1})

        predicate = OrmP(Q(Q(int_value=1)))
        self.assertEqual(set(TestObj.objects.filter(predicate)), {self.obj1})
        self.assertEqual(set(predicate.filter(self.objects)), {self.obj1})
Esempio n. 13
0
 def test_random_follow_relationship(self):
     make_test_objects()
     p1 = OrmP(parent__int_value__gt=10)
     obj = TestObj.objects.filter(parent__int_value__gt=10)[0]
     self.assertTrue(p1.eval(obj))
     p2 = OrmP(parent__parent__int_value__gt=10)
     obj = TestObj.objects.filter(parent__parent__int_value__gt=10)[0]
     self.assertTrue(p2.eval(obj))
Esempio n. 14
0
    def test_filter(self):
        predicate = OrmP(int_value=3)
        self.assertEqual(set(TestObj.objects.filter(predicate)), set())
        self.assertEqual(set(predicate.filter(self.objects)), set())

        predicate = OrmP(int_value=1)
        self.assertEqual(set(TestObj.objects.filter(predicate)), {self.obj1})
        self.assertEqual(set(predicate.filter(self.objects)), {self.obj1})

        predicate = OrmP(int_value=2)
        self.assertEqual(set(TestObj.objects.filter(predicate)), {self.obj2})
        self.assertEqual(set(predicate.filter(self.objects)), {self.obj2})

        predicate = OrmP(int_value__in=[1, 2])
        self.assertEqual(
            set(TestObj.objects.filter(predicate)), {self.obj1, self.obj2})
        self.assertEqual(
            set(predicate.filter(self.objects)), {self.obj1, self.obj2})
Esempio n. 15
0
    def test_dates(self):
        self.assertTrue(
            OrmP(date_value__year=self.date_obj.year).eval(self.testobj))
        self.assertTrue(
            OrmP(date_value__month=self.date_obj.month).eval(self.testobj))
        self.assertTrue(
            OrmP(date_value__day=self.date_obj.day).eval(self.testobj))

        orm_week_day = self.date_obj.isoweekday() % 7 + 1

        self.assertTrue(
            OrmP(date_value__week_day=orm_week_day).eval(self.testobj))

        self.assertFalse(
            OrmP(date_value__year=self.date_obj.year + 1).eval(self.testobj))
        self.assertFalse(
            OrmP(date_value__month=self.date_obj.month + 1).eval(self.testobj))
        self.assertFalse(
            OrmP(date_value__day=self.date_obj.day + 1).eval(self.testobj))
        self.assertFalse(
            P(date_value__week_day=orm_week_day + 1).eval(self.testobj))
Esempio n. 16
0
 def test_get_return_value(self):
     predicate = OrmP(int_value=1)
     self.assertEqual(TestObj.objects.get(predicate), self.obj1)
     self.assertEqual(predicate.get(self.objects), self.obj1)
Esempio n. 17
0
 def test_not(self):
     self.assertIn(self.testobj, OrmP(int_value=self.testobj.int_value))
     self.assertNotIn(self.testobj, ~OrmP(int_value=self.testobj.int_value))
Esempio n. 18
0
    def test_or(self):
        self.testobj.m2ms.create(int_value=10)
        p1 = OrmP(char_value__contains='hello', int_value=50)
        p2 = OrmP(int_value__gt=80)
        p3 = OrmP(int_value__lt=20)
        por1 = p1 | p2
        por2 = p2 | p3
        self.assertTrue(por1.eval(self.testobj))
        self.assertFalse(por2.eval(self.testobj))

        self.assertIn(self.testobj,
                      OrmP(char_value='hello world') | OrmP(int_value=50))
        self.assertIn(self.testobj,
                      OrmP(char_value='hello world') | ~OrmP(int_value=50))
        self.assertNotIn(
            self.testobj,
            ~(OrmP(char_value='hello world') | OrmP(int_value=50)))

        self.assertIn(self.testobj, OrmP(m2ms__int_value=10))
        self.assertIn(
            self.testobj,
            OrmP(char_value='hello world') | OrmP(m2ms__int_value=10))
        self.assertIn(
            self.testobj,
            OrmP(m2ms__int_value=10) | OrmP(char_value='hello world'))
        self.assertIn(
            self.testobj,
            OrmP(m2ms__int_value=10) | OrmP(char_value='something else'))
        self.assertIn(
            self.testobj,
            OrmP(char_value='something else') | OrmP(m2ms__int_value=10))

        self.assertIn(self.testobj, OrmP(int_value__in=[50, 20]))
        self.assertIn(self.testobj, OrmP(int_value=50) | OrmP(int_value=20))
Esempio n. 19
0
 def test_lte(self):
     self.assertFalse(OrmP(int_value__lte=20).eval(self.testobj))
     self.assertTrue(OrmP(int_value__lte=50).eval(self.testobj))
Esempio n. 20
0
    def test_exclude(self):
        predicate = OrmP(int_value=3)
        self.assertEqual(set(TestObj.objects.exclude(predicate)),
                         {self.obj1, self.obj2})
        self.assertEqual(set(predicate.exclude(self.objects)),
                         {self.obj1, self.obj2})

        predicate = OrmP(int_value=1)
        self.assertEqual(set(TestObj.objects.exclude(predicate)), {self.obj2})
        self.assertEqual(set(predicate.exclude(self.objects)), {self.obj2})

        predicate = OrmP(int_value=2)
        self.assertEqual(set(TestObj.objects.exclude(predicate)), {self.obj1})
        self.assertEqual(set(predicate.exclude(self.objects)), {self.obj1})

        predicate = OrmP(int_value__in=[1, 2])
        self.assertEqual(set(TestObj.objects.exclude(predicate)), set())
        self.assertEqual(set(predicate.exclude(self.objects)), set())
Esempio n. 21
0
 def test_get_return_value(self):
     predicate = OrmP(int_value=1)
     self.assertEqual(TestObj.objects.get(predicate), self.obj1)
     self.assertEqual(predicate.get(self.objects), self.obj1)
Esempio n. 22
0
 def test_in_operator(self):
     p = OrmP(int_value__in=[50, 60])
     p2 = OrmP(int_value__in=[60, 70])
     self.assertTrue(self.testobj in p)
     self.assertFalse(self.testobj in p2)
Esempio n. 23
0
 def test_iregex(self):
     self.assertTrue(OrmP(char_value__iregex='Hel*o').eval(self.testobj))
Esempio n. 24
0
 def test_get_no_objects(self):
     predicate = OrmP(int_value=3)
     with self.assertRaises(ObjectDoesNotExist):
         TestObj.objects.get(predicate)
     with self.assertRaises(ObjectDoesNotExist):
         predicate.get(self.objects)
Esempio n. 25
0
 def test_null(self):
     self.assertTrue(OrmP(parent__isnull=True).eval(self.testobj))
     self.assertFalse(OrmP(parent__isnull=False).eval(self.testobj))
Esempio n. 26
0
 def test_iendswith(self):
     self.assertFalse(
         OrmP(char_value__iendswith='hello').eval(self.testobj))
     self.assertTrue(OrmP(char_value__iendswith='World').eval(self.testobj))
Esempio n. 27
0
 def test_istartswith(self):
     self.assertTrue(
         OrmP(char_value__istartswith='heLLo').eval(self.testobj))
     self.assertFalse(
         OrmP(char_value__startswith='world').eval(self.testobj))
Esempio n. 28
0
 def test_get_no_objects(self):
     predicate = OrmP(int_value=3)
     with self.assertRaises(ObjectDoesNotExist):
         TestObj.objects.get(predicate)
     with self.assertRaises(ObjectDoesNotExist):
         predicate.get(self.objects)
Esempio n. 29
0
 def test_case_sensitive_lookups_are_case_sensitive(self):
     self.assertFalse(OrmP(char_value='Hello world').eval(self.testobj))
     self.assertFalse(OrmP(char_value__contains='heLLo').eval(self.testobj))
     self.assertFalse(
         OrmP(char_value__startswith='Hello').eval(self.testobj))
     self.assertFalse(OrmP(char_value__endswith='World').eval(self.testobj))
Esempio n. 30
0
    def test_datetime_cast(self):
        """
        Tests that the Django ORM casting rules are obeyed in filtering by
        dates and times.
        """
        self.assertIn(
            self.testobj,
            OrmP(datetime_value__gt=self.date_obj - timedelta(days=1)))
        self.assertIn(
            self.testobj,
            OrmP(datetime_value__gte=self.date_obj - timedelta(days=1)))
        self.assertNotIn(
            self.testobj,
            OrmP(datetime_value__lte=self.date_obj - timedelta(days=1)))
        self.assertNotIn(
            self.testobj,
            OrmP(datetime_value__lt=self.date_obj - timedelta(days=1)))

        self.assertNotIn(
            self.testobj,
            OrmP(datetime_value__gt=self.date_obj + timedelta(days=1)))
        self.assertNotIn(
            self.testobj,
            OrmP(datetime_value__gte=self.date_obj + timedelta(days=1)))
        self.assertIn(
            self.testobj,
            OrmP(datetime_value__lte=self.date_obj + timedelta(days=1)))
        self.assertIn(
            self.testobj,
            OrmP(datetime_value__lt=self.date_obj + timedelta(days=1)))

        self.assertNotIn(
            self.testobj,
            OrmP(datetime_value__gt=self.datetime_obj + timedelta(seconds=1)))
        self.assertNotIn(
            self.testobj,
            OrmP(datetime_value__gte=self.datetime_obj + timedelta(seconds=1)))
        self.assertIn(
            self.testobj,
            OrmP(datetime_value__lte=self.datetime_obj + timedelta(seconds=1)))
        self.assertIn(
            self.testobj,
            OrmP(datetime_value__lt=self.datetime_obj + timedelta(seconds=1)))

        self.assertIn(
            self.testobj,
            OrmP(date_value__gt=self.datetime_obj - timedelta(days=1)))
        self.assertIn(
            self.testobj,
            OrmP(date_value__gte=self.datetime_obj - timedelta(days=1)))
        self.assertNotIn(
            self.testobj,
            OrmP(date_value__lte=self.datetime_obj - timedelta(days=1)))
        self.assertNotIn(
            self.testobj,
            OrmP(date_value__lt=self.datetime_obj - timedelta(days=1)))

        self.assertNotIn(
            self.testobj,
            OrmP(date_value__gt=self.datetime_obj + timedelta(days=1)))
        self.assertNotIn(
            self.testobj,
            OrmP(date_value__gte=self.datetime_obj + timedelta(days=1)))
        self.assertIn(
            self.testobj,
            OrmP(date_value__lte=self.datetime_obj + timedelta(days=1)))
        self.assertIn(
            self.testobj,
            OrmP(date_value__lt=self.datetime_obj + timedelta(days=1)))
Esempio n. 31
0
 def test_get_multiple_objects(self):
     predicate = OrmP(int_value__in=[1, 2])
     with self.assertRaises(MultipleObjectsReturned):
         TestObj.objects.get(predicate)
     with self.assertRaises(MultipleObjectsReturned):
         predicate.get(self.objects)
Esempio n. 32
0
 def test_get_multiple_objects(self):
     predicate = OrmP(int_value__in=[1, 2])
     with self.assertRaises(MultipleObjectsReturned):
         TestObj.objects.get(predicate)
     with self.assertRaises(MultipleObjectsReturned):
         predicate.get(self.objects)
Esempio n. 33
0
 def test_pk_casting_queryset(self):
     qs = TestObj.objects.all()
     self.assertIn(self.testobj, TestObj.objects.filter(pk__in=qs))
     self.assertIn(self.testobj, OrmP(pk__in=qs))
Esempio n. 34
0
 def test_lt(self):
     self.assertFalse(OrmP(int_value__lt=20).eval(self.testobj))
     self.assertTrue(OrmP(int_value__lt=80).eval(self.testobj))
     self.assertFalse(OrmP(int_value__lt=20.0).eval(self.testobj))
     self.assertTrue(OrmP(int_value__lt=80.0).eval(self.testobj))
     self.assertFalse(OrmP(int_value__lt=50).eval(self.testobj))
Esempio n. 35
0
 def test_regex(self):
     self.assertTrue(OrmP(char_value__regex='hel*o').eval(self.testobj))
     self.assertFalse(OrmP(char_value__regex='Hel*o').eval(self.testobj))
Esempio n. 36
0
 def test_pk_casting_flat(self):
     pk_values_list = TestObj.objects.values_list('pk', flat=True)
     self.assertIn(self.testobj,
                   TestObj.objects.filter(pk__in=pk_values_list))
     self.assertIn(self.testobj, OrmP(pk__in=pk_values_list))