1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
from django.db.models.expressions import F
from django.test import TestCase
from django_cte import CTE, with_cte
from .models import (
OrderFromLT40,
OrderCustomManagerNQuery,
LT40QuerySet,
)
class TestCTE(TestCase):
def test_cte_queryset_with_from_queryset(self):
self.assertEqual(type(OrderFromLT40.objects.all()), LT40QuerySet)
cte = CTE(
OrderFromLT40.objects
.annotate(region_parent=F("region__parent_id"))
.filter(region__parent_id="sun")
)
orders = with_cte(
cte,
select=cte.queryset()
.lt40() # custom queryset method
.order_by("region_id", "amount")
)
print(orders.query)
data = [(x.region_id, x.amount, x.region_parent) for x in orders]
self.assertEqual(data, [
("earth", 30, "sun"),
("earth", 31, "sun"),
("earth", 32, "sun"),
("earth", 33, "sun"),
('mercury', 10, 'sun'),
('mercury', 11, 'sun'),
('mercury', 12, 'sun'),
('venus', 20, 'sun'),
('venus', 21, 'sun'),
('venus', 22, 'sun'),
('venus', 23, 'sun'),
])
def test_cte_queryset_with_custom_queryset(self):
cte = CTE(
OrderCustomManagerNQuery.objects
.annotate(region_parent=F("region__parent_id"))
.filter(region__parent_id="sun")
)
orders = with_cte(
cte,
select=cte.queryset()
.lt25() # custom queryset method
.order_by("region_id", "amount")
)
print(orders.query)
data = [(x.region_id, x.amount, x.region_parent) for x in orders]
self.assertEqual(data, [
('mercury', 10, 'sun'),
('mercury', 11, 'sun'),
('mercury', 12, 'sun'),
('venus', 20, 'sun'),
('venus', 21, 'sun'),
('venus', 22, 'sun'),
('venus', 23, 'sun'),
])
def test_cte_queryset_with_deferred_loading(self):
cte = CTE(
OrderCustomManagerNQuery.objects.order_by("id").only("id")[:1]
)
orders = with_cte(cte, select=cte)
print(orders.query)
self.assertEqual([x.id for x in orders], [1])
|