summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAndrew Godwin <andrew@aeracode.org>2012-08-10 12:38:18 +0100
committerAndrew Godwin <andrew@aeracode.org>2012-08-10 12:38:18 +0100
commitc4b2a3262cc79383d6562cfc7e9af20135c8e0bf (patch)
treecc6af4c914c3379c81a99c77ce9c4cead3448be0 /tests
parentb139315f1c5e3eb05c76237c2824bdf03bd689b6 (diff)
Add support for unique_together
Diffstat (limited to 'tests')
-rw-r--r--tests/modeltests/schema/models.py12
-rw-r--r--tests/modeltests/schema/tests.py48
2 files changed, 58 insertions, 2 deletions
diff --git a/tests/modeltests/schema/models.py b/tests/modeltests/schema/models.py
index 2362718bf3..e9eba1fc6f 100644
--- a/tests/modeltests/schema/models.py
+++ b/tests/modeltests/schema/models.py
@@ -32,3 +32,15 @@ class Book(models.Model):
class Tag(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(unique=True)
+
+ class Meta:
+ managed = False
+
+
+class UniqueTest(models.Model):
+ year = models.IntegerField()
+ slug = models.SlugField(unique=False)
+
+ class Meta:
+ managed = False
+ unique_together = ["year", "slug"]
diff --git a/tests/modeltests/schema/tests.py b/tests/modeltests/schema/tests.py
index 8708fd7c8d..52d99225f0 100644
--- a/tests/modeltests/schema/tests.py
+++ b/tests/modeltests/schema/tests.py
@@ -6,7 +6,7 @@ from django.db import connection, DatabaseError, IntegrityError
from django.db.models.fields import IntegerField, TextField, CharField, SlugField
from django.db.models.fields.related import ManyToManyField
from django.db.models.loading import cache
-from .models import Author, Book, AuthorWithM2M, Tag
+from .models import Author, Book, AuthorWithM2M, Tag, UniqueTest
class SchemaTests(TestCase):
@@ -18,7 +18,7 @@ class SchemaTests(TestCase):
as the code it is testing.
"""
- models = [Author, Book, AuthorWithM2M, Tag]
+ models = [Author, Book, AuthorWithM2M, Tag, UniqueTest]
# Utility functions
@@ -298,3 +298,47 @@ class SchemaTests(TestCase):
Tag.objects.create(title="foo", slug="foo")
self.assertRaises(IntegrityError, Tag.objects.create, title="bar", slug="foo")
connection.rollback()
+
+ def test_unique_together(self):
+ """
+ Tests removing and adding unique_together constraints on a model.
+ """
+ # Create the table
+ editor = connection.schema_editor()
+ editor.start()
+ editor.create_model(UniqueTest)
+ editor.commit()
+ # Ensure the fields are unique to begin with
+ UniqueTest.objects.create(year=2012, slug="foo")
+ UniqueTest.objects.create(year=2011, slug="foo")
+ UniqueTest.objects.create(year=2011, slug="bar")
+ self.assertRaises(IntegrityError, UniqueTest.objects.create, year=2012, slug="foo")
+ connection.rollback()
+ # Alter the model to it's non-unique-together companion
+ editor = connection.schema_editor()
+ editor.start()
+ editor.alter_unique_together(
+ UniqueTest,
+ UniqueTest._meta.unique_together,
+ [],
+ )
+ editor.commit()
+ # Ensure the fields are no longer unique
+ UniqueTest.objects.create(year=2012, slug="foo")
+ UniqueTest.objects.create(year=2012, slug="foo")
+ connection.rollback()
+ # Alter it back
+ new_new_field = SlugField(unique=True)
+ new_new_field.set_attributes_from_name("slug")
+ editor = connection.schema_editor()
+ editor.start()
+ editor.alter_unique_together(
+ UniqueTest,
+ [],
+ UniqueTest._meta.unique_together,
+ )
+ editor.commit()
+ # Ensure the fields are unique again
+ UniqueTest.objects.create(year=2012, slug="foo")
+ self.assertRaises(IntegrityError, UniqueTest.objects.create, year=2012, slug="foo")
+ connection.rollback()