1
0
mirror of https://github.com/django/django.git synced 2025-07-07 19:29:12 +00:00

[soc2009/model-validation] Tests for Model._get_unique_checks

git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/model-validation@10883 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Honza Král 2009-06-02 00:37:23 +00:00
parent d484d021f2
commit ea52757c10
3 changed files with 47 additions and 2 deletions

View File

@ -621,7 +621,7 @@ class Model(object):
def _get_unique_checks(self): def _get_unique_checks(self):
from django.db.models.fields import FieldDoesNotExist, Field as ModelField from django.db.models.fields import FieldDoesNotExist, Field as ModelField
unique_checks = self._meta.unique_together[:] unique_checks = list(self._meta.unique_together)
# these are checks for the unique_for_<date/year/month> # these are checks for the unique_for_<date/year/month>
date_checks = [] date_checks = []

View File

@ -15,3 +15,25 @@ class ModelToValidate(models.Model):
if self.number == 11: if self.number == 11:
raise ValidationError('Invalid number supplied!') raise ValidationError('Invalid number supplied!')
class UniqueFieldsModel(models.Model):
unique_charfield = models.CharField(max_length=100, unique=True)
unique_integerfield = models.IntegerField(unique=True)
non_unique_field = models.IntegerField()
class CustomPKModel(models.Model):
my_pk_field = models.CharField(max_length=100, primary_key=True)
class UniqueTogetherModel(models.Model):
cfield = models.CharField(max_length=100)
ifield = models.IntegerField()
efield = models.EmailField()
class Meta:
unique_together = (('ifield', 'cfield',),('ifield', 'efield'), )
class UniqueForDateModel(models.Model):
start_date = models.DateField()
end_date = models.DateTimeField()
count = models.IntegerField(unique_for_date="start_date", unique_for_year="end_date")
order = models.IntegerField(unique_for_month="end_date")
name = models.CharField(max_length=100)

View File

@ -1,7 +1,8 @@
from django.core.exceptions import ValidationError, NON_FIELD_ERRORS from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
from django.test import TestCase from django.test import TestCase
from django.db import models
from models import ModelToValidate from models import *
class BaseModelValidationTests(TestCase): class BaseModelValidationTests(TestCase):
def test_missing_required_field_raises_error(self): def test_missing_required_field_raises_error(self):
@ -37,3 +38,25 @@ class BaseModelValidationTests(TestCase):
mtv=ModelToValidate(number=10, name='Some Name', parent_id=parent.pk) mtv=ModelToValidate(number=10, name='Some Name', parent_id=parent.pk)
self.assertEqual(None, mtv.clean()) self.assertEqual(None, mtv.clean())
class GetUniqueCheckTests(TestCase):
def test_unique_fields_get_collected(self):
m = UniqueFieldsModel()
self.assertEqual(([('id',), ('unique_charfield',), ('unique_integerfield',)], []), m._get_unique_checks())
def test_unique_together_gets_picked_up(self):
m = UniqueTogetherModel()
self.assertEqual(([('ifield', 'cfield',),('ifield', 'efield'), ('id',), ], []), m._get_unique_checks())
def test_primary_key_is_considered_unique(self):
m = CustomPKModel()
self.assertEqual(([('my_pk_field',)], []), m._get_unique_checks())
def test_unique_for_date_gets_picked_up(self):
m = UniqueForDateModel()
self.assertEqual((
[('id',)],
[('date', 'count', 'start_date'), ('year', 'count', 'end_date'), ('month', 'order', 'end_date')]
), m._get_unique_checks()
)