mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
@@ -28,6 +28,7 @@ from .models import (
|
||||
CategoryRelationship, Ticket21203Parent, Ticket21203Child, Person,
|
||||
Company, Employment)
|
||||
|
||||
|
||||
class BaseQuerysetTest(TestCase):
|
||||
def assertValueQuerysetEqual(self, qs, values):
|
||||
return self.assertQuerysetEqual(qs, values, transform=lambda x: x)
|
||||
@@ -827,7 +828,7 @@ class Queries1Tests(BaseQuerysetTest):
|
||||
qs = Tag.objects.values_list('id', flat=True).order_by('id')
|
||||
qs.query.bump_prefix(qs.query)
|
||||
first = qs[0]
|
||||
self.assertEqual(list(qs), list(range(first, first+5)))
|
||||
self.assertEqual(list(qs), list(range(first, first + 5)))
|
||||
|
||||
def test_ticket8439(self):
|
||||
# Complex combinations of conjunctions, disjunctions and nullable
|
||||
@@ -1262,6 +1263,7 @@ class Queries3Tests(BaseQuerysetTest):
|
||||
Item.objects.datetimes, 'name', 'month'
|
||||
)
|
||||
|
||||
|
||||
class Queries4Tests(BaseQuerysetTest):
|
||||
def setUp(self):
|
||||
generic = NamedCategory.objects.create(name="Generic")
|
||||
@@ -1445,8 +1447,8 @@ class Queries4Tests(BaseQuerysetTest):
|
||||
c0 = SimpleCategory.objects.create(name="cat0")
|
||||
c1 = SimpleCategory.objects.create(name="category1")
|
||||
|
||||
OneToOneCategory.objects.create(category = c1, new_name="new1")
|
||||
OneToOneCategory.objects.create(category = c0, new_name="new2")
|
||||
OneToOneCategory.objects.create(category=c1, new_name="new1")
|
||||
OneToOneCategory.objects.create(category=c0, new_name="new2")
|
||||
|
||||
CategoryItem.objects.create(category=c)
|
||||
ci2 = CategoryItem.objects.create(category=c0)
|
||||
@@ -1461,8 +1463,8 @@ class Queries4Tests(BaseQuerysetTest):
|
||||
c0 = SimpleCategory.objects.create(name="cat0")
|
||||
c1 = SimpleCategory.objects.create(name="category1")
|
||||
|
||||
OneToOneCategory.objects.create(category = c1, new_name="new1")
|
||||
OneToOneCategory.objects.create(category = c0, new_name="new2")
|
||||
OneToOneCategory.objects.create(category=c1, new_name="new1")
|
||||
OneToOneCategory.objects.create(category=c0, new_name="new2")
|
||||
|
||||
ci1 = CategoryItem.objects.create(category=c)
|
||||
CategoryItem.objects.create(category=c0)
|
||||
@@ -1477,8 +1479,8 @@ class Queries4Tests(BaseQuerysetTest):
|
||||
c0 = SimpleCategory.objects.create(name="cat0")
|
||||
c1 = SimpleCategory.objects.create(name="category1")
|
||||
|
||||
OneToOneCategory.objects.create(category = c1, new_name="new1")
|
||||
OneToOneCategory.objects.create(category = c0, new_name="new2")
|
||||
OneToOneCategory.objects.create(category=c1, new_name="new1")
|
||||
OneToOneCategory.objects.create(category=c0, new_name="new2")
|
||||
|
||||
ci1 = CategoryItem.objects.create(category=c)
|
||||
CategoryItem.objects.create(category=c0)
|
||||
@@ -1493,8 +1495,8 @@ class Queries4Tests(BaseQuerysetTest):
|
||||
c0 = SimpleCategory.objects.create(name="cat0")
|
||||
c1 = SimpleCategory.objects.create(name="category1")
|
||||
|
||||
OneToOneCategory.objects.create(category = c1, new_name="new1")
|
||||
OneToOneCategory.objects.create(category = c0, new_name="new2")
|
||||
OneToOneCategory.objects.create(category=c1, new_name="new1")
|
||||
OneToOneCategory.objects.create(category=c0, new_name="new2")
|
||||
|
||||
CategoryItem.objects.create(category=c)
|
||||
ci2 = CategoryItem.objects.create(category=c0)
|
||||
@@ -2019,6 +2021,7 @@ class CloneTests(TestCase):
|
||||
else:
|
||||
opts_class.__deepcopy__ = note_deepcopy
|
||||
|
||||
|
||||
class EmptyQuerySetTests(TestCase):
|
||||
def test_emptyqueryset_values(self):
|
||||
# #14366 -- Calling .values() on an empty QuerySet and then cloning
|
||||
@@ -2224,12 +2227,12 @@ class ConditionalTests(BaseQuerysetTest):
|
||||
self.assertRaisesMessage(
|
||||
FieldError,
|
||||
'Infinite loop caused by ordering.',
|
||||
lambda: list(LoopX.objects.all()) # Force queryset evaluation with list()
|
||||
lambda: list(LoopX.objects.all()) # Force queryset evaluation with list()
|
||||
)
|
||||
self.assertRaisesMessage(
|
||||
FieldError,
|
||||
'Infinite loop caused by ordering.',
|
||||
lambda: list(LoopZ.objects.all()) # Force queryset evaluation with list()
|
||||
lambda: list(LoopZ.objects.all()) # Force queryset evaluation with list()
|
||||
)
|
||||
|
||||
# Note that this doesn't cause an infinite loop, since the default
|
||||
@@ -2353,6 +2356,7 @@ class DefaultValuesInsertTest(TestCase):
|
||||
except TypeError:
|
||||
self.fail("Creation of an instance of a model with only the PK field shouldn't error out after bulk insert refactoring (#17056)")
|
||||
|
||||
|
||||
class ExcludeTests(TestCase):
|
||||
def setUp(self):
|
||||
f1 = Food.objects.create(name='apples')
|
||||
@@ -2504,6 +2508,7 @@ class ExcludeTest17600(TestCase):
|
||||
Order.objects.exclude(~Q(items__status=1)).distinct(),
|
||||
['<Order: 1>'])
|
||||
|
||||
|
||||
class Exclude15786(TestCase):
|
||||
"""Regression test for #15786"""
|
||||
def test_ticket15786(self):
|
||||
@@ -2562,6 +2567,7 @@ class NullInExcludeTest(TestCase):
|
||||
'IS NOT NULL',
|
||||
str(NullableName.objects.filter(~~Q(name='i1')).query))
|
||||
|
||||
|
||||
class EmptyStringsAsNullTest(TestCase):
|
||||
"""
|
||||
Test that filtering on non-null character fields works as expected.
|
||||
@@ -2591,6 +2597,7 @@ class EmptyStringsAsNullTest(TestCase):
|
||||
[foo.pk], attrgetter('pk')
|
||||
)
|
||||
|
||||
|
||||
class ProxyQueryCleanupTest(TestCase):
|
||||
def test_evaluated_proxy_count(self):
|
||||
"""
|
||||
@@ -2603,6 +2610,7 @@ class ProxyQueryCleanupTest(TestCase):
|
||||
str(qs.query)
|
||||
self.assertEqual(qs.count(), 1)
|
||||
|
||||
|
||||
class WhereNodeTest(TestCase):
|
||||
class DummyNode(object):
|
||||
def as_sql(self, qn, connection):
|
||||
@@ -2768,6 +2776,7 @@ class NullJoinPromotionOrTest(TestCase):
|
||||
self.assertQuerysetEqual(
|
||||
qs.order_by('name'), [r2, r1], lambda x: x)
|
||||
|
||||
|
||||
class ReverseJoinTrimmingTest(TestCase):
|
||||
def test_reverse_trimming(self):
|
||||
# Check that we don't accidentally trim reverse joins - we can't know
|
||||
@@ -2778,6 +2787,7 @@ class ReverseJoinTrimmingTest(TestCase):
|
||||
self.assertIn('INNER JOIN', str(qs.query))
|
||||
self.assertEqual(list(qs), [])
|
||||
|
||||
|
||||
class JoinReuseTest(TestCase):
|
||||
"""
|
||||
Test that the queries reuse joins sensibly (for example, direct joins
|
||||
@@ -2811,6 +2821,7 @@ class JoinReuseTest(TestCase):
|
||||
qs = Author.objects.filter(report__name='r4').filter(report__name='r1')
|
||||
self.assertEqual(str(qs.query).count('JOIN'), 2)
|
||||
|
||||
|
||||
class DisjunctionPromotionTests(TestCase):
|
||||
def test_disjuction_promotion_select_related(self):
|
||||
fk1 = FK1.objects.create(f1='f1', f2='f2')
|
||||
@@ -2986,6 +2997,7 @@ class ManyToManyExcludeTest(TestCase):
|
||||
self.assertIn(b2, q)
|
||||
self.assertIn(b3, q)
|
||||
|
||||
|
||||
class RelabelCloneTest(TestCase):
|
||||
def test_ticket_19964(self):
|
||||
my1 = MyObject.objects.create(data='foo')
|
||||
@@ -3000,6 +3012,7 @@ class RelabelCloneTest(TestCase):
|
||||
self.assertEqual(list(children), [my2])
|
||||
self.assertEqual(list(parents), [my1])
|
||||
|
||||
|
||||
class Ticket20101Tests(TestCase):
|
||||
def test_ticket_20101(self):
|
||||
"""
|
||||
@@ -3016,6 +3029,7 @@ class Ticket20101Tests(TestCase):
|
||||
self.assertFalse(n in qs2)
|
||||
self.assertTrue(n in (qs1 | qs2))
|
||||
|
||||
|
||||
class EmptyStringPromotionTests(TestCase):
|
||||
def test_empty_string_promotion(self):
|
||||
qs = RelatedObject.objects.filter(single__name='')
|
||||
@@ -3024,6 +3038,7 @@ class EmptyStringPromotionTests(TestCase):
|
||||
else:
|
||||
self.assertNotIn('LEFT OUTER JOIN', str(qs.query))
|
||||
|
||||
|
||||
class ValuesSubqueryTests(TestCase):
|
||||
def test_values_in_subquery(self):
|
||||
# Check that if a values() queryset is used, then the given values
|
||||
@@ -3041,6 +3056,7 @@ class ValuesSubqueryTests(TestCase):
|
||||
Order.objects.filter(items__in=OrderItem.objects.values_list('status')),
|
||||
[o1.pk], lambda x: x.pk)
|
||||
|
||||
|
||||
class DoubleInSubqueryTests(TestCase):
|
||||
def test_double_subquery_in(self):
|
||||
lfa1 = LeafA.objects.create(data='foo')
|
||||
@@ -3055,6 +3071,7 @@ class DoubleInSubqueryTests(TestCase):
|
||||
self.assertQuerysetEqual(
|
||||
qs, [lfb1], lambda x: x)
|
||||
|
||||
|
||||
class Ticket18785Tests(TestCase):
|
||||
def test_ticket_18785(self):
|
||||
# Test join trimming from ticket18785
|
||||
@@ -3085,6 +3102,7 @@ class Ticket20788Tests(TestCase):
|
||||
self.assertQuerysetEqual(
|
||||
sentences_not_in_pub, [book2], lambda x: x)
|
||||
|
||||
|
||||
class Ticket12807Tests(TestCase):
|
||||
def test_ticket_12807(self):
|
||||
p1 = Paragraph.objects.create()
|
||||
@@ -3111,6 +3129,7 @@ class RelatedLookupTypeTests(TestCase):
|
||||
ObjectB.objects.filter(objecta__in=[wrong_type]),
|
||||
[ob], lambda x: x)
|
||||
|
||||
|
||||
class Ticket14056Tests(TestCase):
|
||||
def test_ticket_14056(self):
|
||||
s1 = SharedConnection.objects.create(data='s1')
|
||||
@@ -3126,6 +3145,7 @@ class Ticket14056Tests(TestCase):
|
||||
expected_ordering, lambda x: x
|
||||
)
|
||||
|
||||
|
||||
class Ticket20955Tests(TestCase):
|
||||
def test_ticket_20955(self):
|
||||
jack = Staff.objects.create(name='jackstaff')
|
||||
@@ -3146,6 +3166,7 @@ class Ticket20955Tests(TestCase):
|
||||
self.assertEqual(task_select_related.owner.staffuser.staff,
|
||||
task_get.owner.staffuser.staff)
|
||||
|
||||
|
||||
class Ticket21203Tests(TestCase):
|
||||
def test_ticket_21203(self):
|
||||
p = Ticket21203Parent.objects.create(parent_bool=True)
|
||||
@@ -3154,6 +3175,7 @@ class Ticket21203Tests(TestCase):
|
||||
self.assertQuerysetEqual(qs, [c], lambda x: x)
|
||||
self.assertIs(qs[0].parent.parent_bool, True)
|
||||
|
||||
|
||||
class ValuesJoinPromotionTests(TestCase):
|
||||
def test_values_no_promotion_for_existing(self):
|
||||
qs = Node.objects.filter(parent__parent__isnull=False)
|
||||
|
||||
Reference in New Issue
Block a user