diff options
| author | Andrew Godwin <andrew@aeracode.org> | 2012-08-10 12:38:18 +0100 |
|---|---|---|
| committer | Andrew Godwin <andrew@aeracode.org> | 2012-08-10 12:38:18 +0100 |
| commit | c4b2a3262cc79383d6562cfc7e9af20135c8e0bf (patch) | |
| tree | cc6af4c914c3379c81a99c77ce9c4cead3448be0 /tests | |
| parent | b139315f1c5e3eb05c76237c2824bdf03bd689b6 (diff) | |
Add support for unique_together
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/modeltests/schema/models.py | 12 | ||||
| -rw-r--r-- | tests/modeltests/schema/tests.py | 48 |
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() |
