From 2c8d042cf3e6f1ef3c6cf52b618f02f59411cda5 Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Fri, 16 Apr 2010 00:12:08 +0200 Subject: [PATCH] Removed the need for the status choices to be a subclass of model_utils.Choices. --- model_utils/fields.py | 4 ++-- model_utils/tests/models.py | 6 +++++ model_utils/tests/tests.py | 46 +++++++++++++++++++++++++++++-------- 3 files changed, 45 insertions(+), 11 deletions(-) diff --git a/model_utils/fields.py b/model_utils/fields.py index 5c874d7..4b92223 100644 --- a/model_utils/fields.py +++ b/model_utils/fields.py @@ -53,8 +53,8 @@ class StatusField(models.CharField): def contribute_to_class(self, cls, name): if not cls._meta.abstract: - assert hasattr(cls, 'STATUS'), "The model '%s' doesn't have status choices set." % cls.__name__ - assert isinstance(cls.STATUS, Choices), "The status choices of model '%s' isn't a subclass of %s" % (cls.__name__, Choices) + assert hasattr(cls, 'STATUS'), \ + "The model '%s' doesn't have status choices." % cls.__name__ setattr(self, '_choices', cls.STATUS) setattr(self, 'default', tuple(cls.STATUS)[0][0]) # sets first as default super(StatusField, self).contribute_to_class(cls, name) diff --git a/model_utils/tests/models.py b/model_utils/tests/models.py index 8e49695..18fe7f7 100644 --- a/model_utils/tests/models.py +++ b/model_utils/tests/models.py @@ -25,6 +25,12 @@ class Status(StatusModel): ('on_hold', _('on hold')), ) +class Status2(StatusModel): + STATUS = ( + ('active', _('active')), + ('deleted', _('deleted')), + ('on_hold', _('on hold')), + ) class Post(models.Model): published = models.BooleanField() diff --git a/model_utils/tests/tests.py b/model_utils/tests/tests.py index aeb4c5d..2999f0a 100644 --- a/model_utils/tests/tests.py +++ b/model_utils/tests/tests.py @@ -8,7 +8,7 @@ from django.db.models.fields import FieldDoesNotExist from model_utils import ChoiceEnum, Choices from model_utils.fields import get_excerpt from model_utils.tests.models import InheritParent, InheritChild, TimeStamp, \ - Post, Article, Status, TimeFrame + Post, Article, Status, Status2, TimeFrame class GetExcerptTests(TestCase): @@ -188,21 +188,23 @@ class TimeFramedModelTests(TestCase): class StatusModelTests(TestCase): + def setUp(self): + self.model = Status def testCreated(self): - c1 = Status.objects.create() - c2 = Status.objects.create() + c1 = self.model.objects.create() + c2 = self.model.objects.create() self.assert_(c2.status_date > c1.status_date) - self.assertEquals(Status.active.count(), 2) - self.assertEquals(Status.deleted.count(), 0) + self.assertEquals(self.model.active.count(), 2) + self.assertEquals(self.model.deleted.count(), 0) def testModification(self): - t1 = Status.objects.create() + t1 = self.model.objects.create() date_created = t1.status_date t1.status = t1.STATUS.on_hold t1.save() - self.assertEquals(Status.active.count(), 0) - self.assertEquals(Status.on_hold.count(), 1) + self.assertEquals(self.model.active.count(), 0) + self.assertEquals(self.model.on_hold.count(), 1) self.assert_(t1.status_date > date_created) date_changed = t1.status_date t1.save() @@ -213,12 +215,38 @@ class StatusModelTests(TestCase): self.assert_(t1.status_date > date_active_again) def testPreviousConditon(self): - status = Status.objects.create() + status = self.model.objects.create() self.assertEquals(status.previous_status, None) status.status = status.STATUS.on_hold status.save() self.assertEquals(status.previous_status, status.STATUS.active) +class Status2ModelTests(StatusModelTests): + def setUp(self): + self.model = Status2 + + def testModification(self): + t1 = self.model.objects.create() + date_created = t1.status_date + t1.status = t1.STATUS[2][0] # boring on_hold status + t1.save() + self.assertEquals(self.model.active.count(), 0) + self.assertEquals(self.model.on_hold.count(), 1) + self.assert_(t1.status_date > date_created) + date_changed = t1.status_date + t1.save() + self.assertEquals(t1.status_date, date_changed) + date_active_again = t1.status_date + t1.status = t1.STATUS[0][0] # boring active status + t1.save() + self.assert_(t1.status_date > date_active_again) + + def testPreviousConditon(self): + status = self.model.objects.create() + self.assertEquals(status.previous_status, None) + status.status = status.STATUS[2][0] + status.save() + self.assertEquals(status.previous_status, status.STATUS[0][0]) class QueryManagerTests(TestCase): def setUp(self):