From cce804da4ef78852e82326333313c5d2b9aa750a Mon Sep 17 00:00:00 2001 From: Felipe Prenholato Date: Thu, 21 Feb 2013 17:08:15 -0300 Subject: [PATCH] Assert that StatusField respects default arguments. --- model_utils/fields.py | 3 ++- model_utils/tests/models.py | 12 +++++++++++- model_utils/tests/tests.py | 13 ++++++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/model_utils/fields.py b/model_utils/fields.py index dff44b0..670da34 100644 --- a/model_utils/fields.py +++ b/model_utils/fields.py @@ -60,7 +60,8 @@ class StatusField(models.CharField): "To use StatusField, the model '%s' must have a STATUS choices class attribute." \ % cls.__name__ setattr(self, '_choices', cls.STATUS) - setattr(self, 'default', tuple(cls.STATUS)[0][0]) # sets first as default + if not self.has_default(): + 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 c901878..9e2cfe7 100644 --- a/model_utils/tests/models.py +++ b/model_utils/tests/models.py @@ -4,7 +4,7 @@ from django.utils.translation import ugettext_lazy as _ from model_utils.models import TimeStampedModel, StatusModel, TimeFramedModel from model_utils.tracker import ModelTracker from model_utils.managers import QueryManager, InheritanceManager, PassThroughManager -from model_utils.fields import SplitField, MonitorField +from model_utils.fields import SplitField, MonitorField, StatusField from model_utils import Choices @@ -241,3 +241,13 @@ class TrackedMultiple(models.Model): name_tracker = ModelTracker(fields=['name']) number_tracker = ModelTracker(fields=['number']) + + +class StatusFieldDefaultFilled(models.Model): + STATUS = Choices((0, "no", "No"), (1, "yes", "Yes")) + status = StatusField(default=STATUS.yes) + + +class StatusFieldDefaultNotFilled(models.Model): + STATUS = Choices((0, "no", "No"), (1, "yes", "Yes")) + status = StatusField() diff --git a/model_utils/tests/tests.py b/model_utils/tests/tests.py index c8add86..3037518 100644 --- a/model_utils/tests/tests.py +++ b/model_utils/tests/tests.py @@ -19,7 +19,8 @@ from model_utils.tests.models import ( InheritanceManagerTestChild2, TimeStamp, Post, Article, Status, StatusPlainTuple, TimeFrame, Monitored, StatusManagerAdded, TimeFrameManagerAdded, Dude, SplitFieldAbstractParent, Car, Spot, - Tracked, TrackedNotDefault, TrackedMultiple) + Tracked, TrackedNotDefault, TrackedMultiple, StatusFieldDefaultFilled, + StatusFieldDefaultNotFilled) @@ -164,6 +165,16 @@ class MonitorFieldTests(TestCase): self.assertRaises(TypeError, MonitorField) +class StatusFieldTests(TestCase): + + def test_status_with_default_filled(self): + instance = StatusFieldDefaultFilled() + self.assertEquals(instance.status, instance.STATUS.yes) + + def test_status_with_default_not_filled(self): + instance = StatusFieldDefaultNotFilled() + self.assertEquals(instance.status, instance.STATUS.no) + class ChoicesTests(TestCase): def setUp(self):