Skip to content

Commit 887dd0c

Browse files
WaVEVtimgraham
authored andcommitted
Added QuerySet.union() test with renames.
1 parent 270b6bd commit 887dd0c

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

tests/queries/test_qs_combinators.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from django.test import TestCase, skipIfDBFeature, skipUnlessDBFeature
1515
from django.test.utils import CaptureQueriesContext
1616

17-
from .models import Author, Celebrity, ExtraInfo, Number, ReservedName
17+
from .models import Author, Celebrity, ExtraInfo, Number, Report, ReservedName
1818

1919

2020
@skipUnlessDBFeature("supports_select_union")
@@ -132,6 +132,31 @@ def test_union_nested(self):
132132
ordered=False,
133133
)
134134

135+
def test_union_with_different_models(self):
136+
expected_result = {
137+
"Angel",
138+
"Lionel",
139+
"Emiliano",
140+
"Demetrio",
141+
"Daniel",
142+
"Javier",
143+
}
144+
Celebrity.objects.create(name="Angel")
145+
Celebrity.objects.create(name="Lionel")
146+
Celebrity.objects.create(name="Emiliano")
147+
Celebrity.objects.create(name="Demetrio")
148+
Report.objects.create(name="Demetrio")
149+
Report.objects.create(name="Daniel")
150+
Report.objects.create(name="Javier")
151+
qs1 = Celebrity.objects.values(alias=F("name"))
152+
qs2 = Report.objects.values(alias_author=F("name"))
153+
qs3 = qs1.union(qs2).values("name")
154+
self.assertCountEqual((e["name"] for e in qs3), expected_result)
155+
qs4 = qs1.union(qs2)
156+
self.assertCountEqual((e["alias"] for e in qs4), expected_result)
157+
qs5 = qs2.union(qs1)
158+
self.assertCountEqual((e["alias_author"] for e in qs5), expected_result)
159+
135160
@skipUnlessDBFeature("supports_select_intersection")
136161
def test_intersection_with_empty_qs(self):
137162
qs1 = Number.objects.all()
@@ -500,6 +525,16 @@ def test_count_intersection(self):
500525
qs2 = Number.objects.filter(num__lte=5)
501526
self.assertEqual(qs1.intersection(qs2).count(), 1)
502527

528+
@skipUnlessDBFeature("supports_slicing_ordering_in_compound")
529+
def test_count_union_with_select_related_projected(self):
530+
e1 = ExtraInfo.objects.create(value=1, info="e1")
531+
a1 = Author.objects.create(name="a1", num=1, extra=e1)
532+
qs = Author.objects.select_related("extra").values("pk", "name", "extra__value")
533+
self.assertEqual(len(qs.union(qs)), 1)
534+
self.assertEqual(
535+
qs.union(qs).first(), {"pk": a1.id, "name": "a1", "extra__value": 1}
536+
)
537+
503538
def test_exists_union(self):
504539
qs1 = Number.objects.filter(num__gte=5)
505540
qs2 = Number.objects.filter(num__lte=5)

0 commit comments

Comments
 (0)