diff --git a/CHANGELOG.rst b/CHANGELOG.rst index fb1e4abf..dd9fe866 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,7 +5,8 @@ ChangeLog master (unreleased) =================== -Nothing here yet. +* Renamed exception class for unknown access (#166) +* Added str() methods to models (#167) Release 0.6.0 (2017-01-17) ========================== diff --git a/demo/tests/test_models.py b/demo/tests/test_models.py new file mode 100644 index 00000000..29cbab97 --- /dev/null +++ b/demo/tests/test_models.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- + +from __future__ import unicode_literals + +from django.test import TestCase + +from formidable import constants +from formidable.forms import fields, FormidableForm + + +class FormTest(FormidableForm): + title = fields.TitleField(label='Jedi Onboarding') + helptext = fields.HelpTextField(text='youhou') + mytext = fields.CharField(label='Name', accesses={ + 'padawan': constants.EDITABLE, + 'jedi': constants.REQUIRED, + 'jedi-master': constants.HIDDEN, + 'human': constants.EDITABLE, + }) + dropdown = fields.ChoiceField( + choices=(('tutu', 'toto'), ('foo', 'bar')), + accesses={'jedi': 'EDITABLE'} + ) + + +class UnicodeTestCase(TestCase): + + def setUp(self): + super(UnicodeTestCase, self).setUp() + self.formidable = FormTest.to_formidable(label='label') + + def test_formidable(self): + self.assertEqual(str(self.formidable), 'label') + + def test_field(self): + field = self.formidable.fields.get(slug='title') + self.assertEqual(str(field), 'Jedi Onboarding') + + def test_default(self): + field = self.formidable.fields.get(slug='title') + default = field.defaults.create(value='Value') + self.assertEqual(str(default), 'Value') + + def test_item(self): + field = self.formidable.fields.get(slug='dropdown') + self.assertEqual(field.items.all().count(), 2) + tutu, foo = field.items.all() + self.assertEqual(str(tutu), 'toto: tutu') + self.assertEqual(str(foo), 'bar: foo') + + def test_access(self): + field = self.formidable.fields.get(slug='mytext') + self.assertEqual(field.accesses.all().count(), 4) + + human, jedi, jedi_master, padawan = field.accesses.all().order_by('access_id') # noqa + self.assertEqual(str(human), 'human: EDITABLE') + self.assertEqual(str(jedi), 'jedi: REQUIRED') + self.assertEqual(str(jedi_master), 'jedi-master: HIDDEN') + self.assertEqual(str(padawan), 'padawan: EDITABLE') + + def test_validation(self): + field = self.formidable.fields.get(slug='dropdown') + validation = field.validations.create(value='Value', type='Type') + self.assertEqual(str(validation), 'Value: Type') + + def test_preset(self): + preset = self.formidable.presets.create(slug='slug') + self.assertEqual(str(preset), 'slug') + + def test_preset_argument(self): + preset = self.formidable.presets.create(slug='slug') + + argument = preset.arguments.create(slug='slug', value='Value') + self.assertEqual(str(argument), 'slug: value Value') + + argument.field_id = '12345' + self.assertEqual(str(argument), 'slug: field #12345') diff --git a/formidable/models.py b/formidable/models.py index 731c157b..14fc335f 100644 --- a/formidable/models.py +++ b/formidable/models.py @@ -54,6 +54,9 @@ def from_json(definition_schema, **kwargs): raise ValidationError(serializer.errors) + def __str__(self): + return '{formidable.label}'.format(formidable=self) + class Field(models.Model): @@ -80,12 +83,18 @@ def get_next_order(self): agg = self.items.aggregate(models.Max('order')) return agg['order__max'] + 1 if agg['order__max'] is not None else 0 + def __str__(self): + return '{field.label}'.format(field=self) + class Default(models.Model): value = models.CharField(max_length=256) field = models.ForeignKey(Field, related_name='defaults') + def __str__(self): + return '{default.value}'.format(default=self) + class Item(models.Model): field = models.ForeignKey(Field, related_name='items') @@ -94,8 +103,8 @@ class Item(models.Model): order = models.IntegerField() help_text = models.TextField(blank=True, null=True) - def __unicode__(self): - return '{item.key}: {item.value}'.format(item=self) + def __str__(self): + return '{item.label}: {item.value}'.format(item=self) class Access(models.Model): @@ -114,6 +123,10 @@ class Meta: ('TABLE', 'Table'), )) + def __str__(self): + return '{access.access_id}: {access.level}'.format( + access=self) + class Validation(models.Model): field = models.ForeignKey(Field, related_name='validations') @@ -121,12 +134,19 @@ class Validation(models.Model): type = models.CharField(max_length=256) message = models.TextField(blank=True, null=True) + def __str__(self): + return '{validation.value}: {validation.type}'.format( + validation=self) + class Preset(models.Model): form = models.ForeignKey(Formidable, related_name='presets') slug = models.CharField(max_length=128) message = models.TextField(null=True, blank=True) + def __str__(self): + return '{preset.slug}'.format(preset=self) + class PresetArg(models.Model): preset = models.ForeignKey(Preset, related_name='arguments') @@ -134,7 +154,7 @@ class PresetArg(models.Model): value = models.CharField(max_length=128, null=True, blank=True) field_id = models.CharField(max_length=128, null=True, blank=True) - def __unicode__(self): + def __str__(self): if self.field_id: return '{preset_arg.slug}: field #{preset_arg.field_id}'.format( preset_arg=self)