From 68f2c3fb641403022353eca5805c94bcc31d8751 Mon Sep 17 00:00:00 2001 From: Emmanuel Cazenave Date: Mon, 4 Jun 2018 16:46:07 +0200 Subject: [PATCH] allow string or boolean kind for attribute definition (#23306) --- hobo/profile/migrations/0001_initial.py | 4 +++- hobo/profile/models.py | 4 ++-- hobo/profile/views.py | 2 +- tests/test_manager.py | 23 +++++++++++++++++++++++ 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/hobo/profile/migrations/0001_initial.py b/hobo/profile/migrations/0001_initial.py index 70bff45..0a4c24b 100644 --- a/hobo/profile/migrations/0001_initial.py +++ b/hobo/profile/migrations/0001_initial.py @@ -21,7 +21,9 @@ class Migration(migrations.Migration): ('asked_on_registration', models.BooleanField(default=False, verbose_name='asked on registration')), ('user_editable', models.BooleanField(default=True, verbose_name='user editable')), ('user_visible', models.BooleanField(default=True, verbose_name='user visible')), - ('kind', models.CharField(default=b'string', max_length=16, verbose_name='kind')), + ('kind', models.CharField( + default=b'string', max_length=16, verbose_name='kind', + choices=[(b'string', 'String'), (b'boolean', 'Boolean')])), ('disabled', models.BooleanField(default=False, verbose_name='disabled')), ('order', models.PositiveIntegerField()), ('last_update_timestamp', models.DateTimeField(auto_now=True)), diff --git a/hobo/profile/models.py b/hobo/profile/models.py index 12c816b..ef2a461 100644 --- a/hobo/profile/models.py +++ b/hobo/profile/models.py @@ -33,8 +33,8 @@ class AttributeDefinition(models.Model): blank=True, default=True) user_visible = models.BooleanField(verbose_name=_('user visible'), blank=True, default=True) - kind = models.CharField(max_length=16, verbose_name=_('kind'), - default='string') + kind = models.CharField(max_length=16, verbose_name=_('kind'), default='string', + choices=(('string', _('String')), ('boolean', _('Boolean')))) disabled = models.BooleanField(verbose_name=_('disabled'), default=False) order = models.PositiveIntegerField() diff --git a/hobo/profile/views.py b/hobo/profile/views.py index b301e68..af5beca 100644 --- a/hobo/profile/views.py +++ b/hobo/profile/views.py @@ -32,7 +32,7 @@ home = HomeView.as_view() class AddAttributeView(CreateView): model = AttributeDefinition fields = ['label', 'name', 'description', 'required', 'asked_on_registration', - 'user_editable', 'user_visible', 'disabled'] + 'user_editable', 'user_visible', 'disabled', 'kind'] success_url = reverse_lazy('profile-home') add_attribute = AddAttributeView.as_view() diff --git a/tests/test_manager.py b/tests/test_manager.py index f18b1a0..c5ff0c6 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -7,6 +7,7 @@ from django.contrib.auth.models import User import pytest from webtest import TestApp +from hobo.profile import models from hobo.wsgi import application pytestmark = pytest.mark.django_db @@ -44,3 +45,25 @@ def test_logout(admin_user): app = login(TestApp(application)) app.get('/logout/') assert app.get('/', status=302).location.endswith('/login/?next=/') + + +@pytest.mark.parametrize('kind', ['boolean', 'string']) +def test_add_attribute(admin_user, kind): + app = login(TestApp(application)) + assert models.AttributeDefinition.objects.filter(kind=kind).filter(name='test').count() == 0 + page = app.get('/profile/add-attribute', status=200) + page.form['label'] = 'test' + page.form['name'] = 'test' + page.form['description'] = 'test' + page.form['required'] = True + page.form['asked_on_registration'] = False + page.form['user_editable'] = False + page.form['user_visible'] = False + page.form['disabled'] = False + page.form['kind'] = kind + page.form.submit() + assert models.AttributeDefinition.objects.filter(kind=kind).filter(name='test').count() == 1 + + +def test_attribute_kind_not_restricted_at_model_level(): + assert models.AttributeDefinition.objects.create(label='test', kind='somestring') -- 2.17.0