Skip to content

Commit

Permalink
Add union test with renames.
Browse files Browse the repository at this point in the history
  • Loading branch information
WaVEV committed Sep 7, 2024
1 parent 1079f94 commit 3554fb1
Showing 1 changed file with 34 additions and 0 deletions.
34 changes: 34 additions & 0 deletions tests/queries/test_qs_combinators.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,33 @@ def test_union_nested(self):
ordered=False,
)

def test_union_with_different_models(self):
expected_result = {
"Angel Di Maria",
"Lionel Messi",
"Emiliano Martinez",
"Gabriel Marques",
"Jorge Luis Borges",
"Umberto Eco",
}
Celebrity.objects.create(name="Angel Di Maria")
Celebrity.objects.create(name="Lionel Messi")
Celebrity.objects.create(name="Emiliano Martinez")
Celebrity.objects.create(name="Gabriel Marques")
Number.objects.filter(num__lte=1).values(alias=F("other_num"))
e1 = ExtraInfo.objects.create(value=7, info="e1")
Author.objects.create(name="Gabriel Marques", num=1, extra=e1)
Author.objects.create(name="Jorge Luis Borges", num=2, extra=e1)
Author.objects.create(name="Umberto Eco", num=3, extra=e1)
qs1 = Celebrity.objects.values(alias=F("name"))
qs2 = Author.objects.values(alias_author=F("name"))
qs_union = qs1.union(qs2).values("name").all()
self.assertEqual(set(e["name"] for e in qs_union), expected_result)
qs_union = qs1.union(qs2).all()
self.assertEqual(set(e["alias"] for e in qs_union), expected_result)
qs_union = qs2.union(qs1).all()
self.assertEqual(set(e["alias_author"] for e in qs_union), expected_result)

@skipUnlessDBFeature("supports_select_intersection")
def test_intersection_with_empty_qs(self):
qs1 = Number.objects.all()
Expand Down Expand Up @@ -462,6 +489,13 @@ def test_count_union_with_select_related(self):
qs = Author.objects.select_related("extra").order_by()
self.assertEqual(qs.union(qs).count(), 1)

def test_count_union_with_select_related_projected(self):
e1 = ExtraInfo.objects.create(value=1, info="e1")
a1 = Author.objects.create(name="a1", num=1, extra=e1)
qs = Author.objects.select_related("extra").values("pk", "name", "extra__value")
self.assertEqual(len(qs.union(qs)), 1)
self.assertEqual(qs.union(qs).first(), {"pk": a1.id, 'name': 'a1', 'extra__value': 1})

@skipUnlessDBFeature("supports_select_difference")
def test_count_difference(self):
qs1 = Number.objects.filter(num__lt=10)
Expand Down

0 comments on commit 3554fb1

Please sign in to comment.