summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorPeter Inglesby <peter.inglesby@gmail.com>2016-12-10 18:05:34 +0000
committerTim Graham <timograham@gmail.com>2016-12-24 10:38:48 -0500
commita4cac1720034920351291359d0bb2177d8c8a4d5 (patch)
tree5c766c9fc38fadac4686cf4cf3f6de7f92416ba4 /tests
parent96181080bae66ee4f4e6d52bddcd57fa420a929b (diff)
Fixed #27498 -- Fixed filtering on annotated DecimalField on SQLite.
Diffstat (limited to 'tests')
-rw-r--r--tests/lookup/models.py10
-rw-r--r--tests/lookup/test_decimalfield.py38
2 files changed, 48 insertions, 0 deletions
diff --git a/tests/lookup/models.py b/tests/lookup/models.py
index 57389e90de..e8479f11d1 100644
--- a/tests/lookup/models.py
+++ b/tests/lookup/models.py
@@ -86,3 +86,13 @@ class MyISAMArticle(models.Model):
class Meta:
db_table = 'myisam_article'
managed = False
+
+
+class Product(models.Model):
+ name = models.CharField(max_length=80)
+ qty_target = models.DecimalField(max_digits=6, decimal_places=2)
+
+
+class Stock(models.Model):
+ product = models.ForeignKey(Product, models.CASCADE)
+ qty_available = models.DecimalField(max_digits=6, decimal_places=2)
diff --git a/tests/lookup/test_decimalfield.py b/tests/lookup/test_decimalfield.py
new file mode 100644
index 0000000000..c6d17bce84
--- /dev/null
+++ b/tests/lookup/test_decimalfield.py
@@ -0,0 +1,38 @@
+from django.db.models.aggregates import Sum
+from django.db.models.expressions import F
+from django.test import TestCase
+
+from .models import Product, Stock
+
+
+class DecimalFieldLookupTests(TestCase):
+ @classmethod
+ def setUpTestData(cls):
+ cls.p1 = Product.objects.create(name='Product1', qty_target=10)
+ Stock.objects.create(product=cls.p1, qty_available=5)
+ Stock.objects.create(product=cls.p1, qty_available=6)
+ cls.p2 = Product.objects.create(name='Product2', qty_target=10)
+ Stock.objects.create(product=cls.p2, qty_available=5)
+ Stock.objects.create(product=cls.p2, qty_available=5)
+ cls.p3 = Product.objects.create(name='Product3', qty_target=10)
+ Stock.objects.create(product=cls.p3, qty_available=5)
+ Stock.objects.create(product=cls.p3, qty_available=4)
+ cls.queryset = Product.objects.annotate(
+ qty_available_sum=Sum('stock__qty_available'),
+ ).annotate(qty_needed=F('qty_target') - F('qty_available_sum'))
+
+ def test_gt(self):
+ qs = self.queryset.filter(qty_needed__gt=0)
+ self.assertCountEqual(qs, [self.p3])
+
+ def test_gte(self):
+ qs = self.queryset.filter(qty_needed__gte=0)
+ self.assertCountEqual(qs, [self.p2, self.p3])
+
+ def test_lt(self):
+ qs = self.queryset.filter(qty_needed__lt=0)
+ self.assertCountEqual(qs, [self.p1])
+
+ def test_lte(self):
+ qs = self.queryset.filter(qty_needed__lte=0)
+ self.assertCountEqual(qs, [self.p1, self.p2])