2019-08-20 15:54:41 +08:00
|
|
|
from django.db.models import F, Sum
|
2016-12-11 02:05:34 +08:00
|
|
|
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])
|