mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #30913 -- Added support for covering indexes on PostgreSQL 11+.
This commit is contained in:
committed by
Mariusz Felisiak
parent
f997b5e6ae
commit
8c7992f658
@@ -8,7 +8,8 @@ from django.test import SimpleTestCase, TestCase, skipUnlessDBFeature
|
||||
|
||||
from .models import (
|
||||
ChildModel, Product, UniqueConstraintConditionProduct,
|
||||
UniqueConstraintDeferrable, UniqueConstraintProduct,
|
||||
UniqueConstraintDeferrable, UniqueConstraintInclude,
|
||||
UniqueConstraintProduct,
|
||||
)
|
||||
|
||||
|
||||
@@ -181,6 +182,20 @@ class UniqueConstraintTests(TestCase):
|
||||
self.assertEqual(constraint_1, constraint_1)
|
||||
self.assertNotEqual(constraint_1, constraint_2)
|
||||
|
||||
def test_eq_with_include(self):
|
||||
constraint_1 = models.UniqueConstraint(
|
||||
fields=['foo', 'bar'],
|
||||
name='include',
|
||||
include=['baz_1'],
|
||||
)
|
||||
constraint_2 = models.UniqueConstraint(
|
||||
fields=['foo', 'bar'],
|
||||
name='include',
|
||||
include=['baz_2'],
|
||||
)
|
||||
self.assertEqual(constraint_1, constraint_1)
|
||||
self.assertNotEqual(constraint_1, constraint_2)
|
||||
|
||||
def test_repr(self):
|
||||
fields = ['foo', 'bar']
|
||||
name = 'unique_fields'
|
||||
@@ -214,6 +229,18 @@ class UniqueConstraintTests(TestCase):
|
||||
"deferrable=Deferrable.IMMEDIATE>",
|
||||
)
|
||||
|
||||
def test_repr_with_include(self):
|
||||
constraint = models.UniqueConstraint(
|
||||
fields=['foo', 'bar'],
|
||||
name='include_fields',
|
||||
include=['baz_1', 'baz_2'],
|
||||
)
|
||||
self.assertEqual(
|
||||
repr(constraint),
|
||||
"<UniqueConstraint: fields=('foo', 'bar') name='include_fields' "
|
||||
"include=('baz_1', 'baz_2')>",
|
||||
)
|
||||
|
||||
def test_deconstruction(self):
|
||||
fields = ['foo', 'bar']
|
||||
name = 'unique_fields'
|
||||
@@ -250,6 +277,20 @@ class UniqueConstraintTests(TestCase):
|
||||
'deferrable': models.Deferrable.DEFERRED,
|
||||
})
|
||||
|
||||
def test_deconstruction_with_include(self):
|
||||
fields = ['foo', 'bar']
|
||||
name = 'unique_fields'
|
||||
include = ['baz_1', 'baz_2']
|
||||
constraint = models.UniqueConstraint(fields=fields, name=name, include=include)
|
||||
path, args, kwargs = constraint.deconstruct()
|
||||
self.assertEqual(path, 'django.db.models.UniqueConstraint')
|
||||
self.assertEqual(args, ())
|
||||
self.assertEqual(kwargs, {
|
||||
'fields': tuple(fields),
|
||||
'name': name,
|
||||
'include': tuple(include),
|
||||
})
|
||||
|
||||
def test_database_constraint(self):
|
||||
with self.assertRaises(IntegrityError):
|
||||
UniqueConstraintProduct.objects.create(name=self.p1.name, color=self.p1.color)
|
||||
@@ -333,3 +374,21 @@ class UniqueConstraintTests(TestCase):
|
||||
name='name_invalid',
|
||||
deferrable='invalid',
|
||||
)
|
||||
|
||||
@skipUnlessDBFeature(
|
||||
'supports_table_check_constraints',
|
||||
'supports_covering_indexes',
|
||||
)
|
||||
def test_include_database_constraint(self):
|
||||
UniqueConstraintInclude.objects.create(name='p1', color='red')
|
||||
with self.assertRaises(IntegrityError):
|
||||
UniqueConstraintInclude.objects.create(name='p1', color='blue')
|
||||
|
||||
def test_invalid_include_argument(self):
|
||||
msg = 'UniqueConstraint.include must be a list or tuple.'
|
||||
with self.assertRaisesMessage(ValueError, msg):
|
||||
models.UniqueConstraint(
|
||||
name='uniq_include',
|
||||
fields=['field'],
|
||||
include='other',
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user