summaryrefslogtreecommitdiff
path: root/tests/constraints
diff options
context:
space:
mode:
Diffstat (limited to 'tests/constraints')
-rw-r--r--tests/constraints/models.py17
-rw-r--r--tests/constraints/tests.py25
2 files changed, 28 insertions, 14 deletions
diff --git a/tests/constraints/models.py b/tests/constraints/models.py
index fb6ef620f0..d207de6e73 100644
--- a/tests/constraints/models.py
+++ b/tests/constraints/models.py
@@ -2,12 +2,13 @@ from django.db import models
class Product(models.Model):
- name = models.CharField(max_length=255)
- color = models.CharField(max_length=32, null=True)
price = models.IntegerField(null=True)
discounted_price = models.IntegerField(null=True)
class Meta:
+ required_db_features = {
+ 'supports_table_check_constraints',
+ }
constraints = [
models.CheckConstraint(
check=models.Q(price__gt=models.F('discounted_price')),
@@ -17,6 +18,15 @@ class Product(models.Model):
check=models.Q(price__gt=0),
name='%(app_label)s_%(class)s_price_gt_0',
),
+ ]
+
+
+class UniqueConstraintProduct(models.Model):
+ name = models.CharField(max_length=255)
+ color = models.CharField(max_length=32, null=True)
+
+ class Meta:
+ constraints = [
models.UniqueConstraint(fields=['name', 'color'], name='name_color_uniq'),
models.UniqueConstraint(
fields=['name'],
@@ -31,6 +41,9 @@ class AbstractModel(models.Model):
class Meta:
abstract = True
+ required_db_features = {
+ 'supports_table_check_constraints',
+ }
constraints = [
models.CheckConstraint(
check=models.Q(age__gte=18),
diff --git a/tests/constraints/tests.py b/tests/constraints/tests.py
index 7ac478a89f..3b28c99e7f 100644
--- a/tests/constraints/tests.py
+++ b/tests/constraints/tests.py
@@ -3,7 +3,7 @@ from django.db import IntegrityError, connection, models
from django.db.models.constraints import BaseConstraint
from django.test import SimpleTestCase, TestCase, skipUnlessDBFeature
-from .models import ChildModel, Product
+from .models import ChildModel, Product, UniqueConstraintProduct
def get_constraints(table):
@@ -69,9 +69,9 @@ class CheckConstraintTests(TestCase):
@skipUnlessDBFeature('supports_table_check_constraints')
def test_database_constraint(self):
- Product.objects.create(name='Valid', price=10, discounted_price=5)
+ Product.objects.create(price=10, discounted_price=5)
with self.assertRaises(IntegrityError):
- Product.objects.create(name='Invalid', price=10, discounted_price=20)
+ Product.objects.create(price=10, discounted_price=20)
@skipUnlessDBFeature('supports_table_check_constraints', 'can_introspect_check_constraints')
def test_name(self):
@@ -92,9 +92,9 @@ class CheckConstraintTests(TestCase):
class UniqueConstraintTests(TestCase):
@classmethod
def setUpTestData(cls):
- cls.p1, cls.p2 = Product.objects.bulk_create([
- Product(name='p1', color='red'),
- Product(name='p2'),
+ cls.p1, cls.p2 = UniqueConstraintProduct.objects.bulk_create([
+ UniqueConstraintProduct(name='p1', color='red'),
+ UniqueConstraintProduct(name='p2'),
])
def test_eq(self):
@@ -177,19 +177,20 @@ class UniqueConstraintTests(TestCase):
def test_database_constraint(self):
with self.assertRaises(IntegrityError):
- Product.objects.create(name=self.p1.name, color=self.p1.color)
+ UniqueConstraintProduct.objects.create(name=self.p1.name, color=self.p1.color)
def test_model_validation(self):
- with self.assertRaisesMessage(ValidationError, 'Product with this Name and Color already exists.'):
- Product(name=self.p1.name, color=self.p1.color).validate_unique()
+ msg = 'Unique constraint product with this Name and Color already exists.'
+ with self.assertRaisesMessage(ValidationError, msg):
+ UniqueConstraintProduct(name=self.p1.name, color=self.p1.color).validate_unique()
def test_model_validation_with_condition(self):
"""Partial unique constraints are ignored by Model.validate_unique()."""
- Product(name=self.p1.name, color='blue').validate_unique()
- Product(name=self.p2.name).validate_unique()
+ UniqueConstraintProduct(name=self.p1.name, color='blue').validate_unique()
+ UniqueConstraintProduct(name=self.p2.name).validate_unique()
def test_name(self):
- constraints = get_constraints(Product._meta.db_table)
+ constraints = get_constraints(UniqueConstraintProduct._meta.db_table)
expected_name = 'name_color_uniq'
self.assertIn(expected_name, constraints)