Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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)
==========================
Expand Down
77 changes: 77 additions & 0 deletions demo/tests/test_models.py
Original file line number Diff line number Diff line change
@@ -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')
26 changes: 23 additions & 3 deletions formidable/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):

Expand All @@ -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')
Expand All @@ -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):
Expand All @@ -114,27 +123,38 @@ 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')
value = models.CharField(max_length=256)
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')
slug = models.CharField(max_length=128)
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)
Expand Down