general: add support for boolean json cell parameters (#17433)

"foobar": {
      "url": "https://...",
      "cache_duration": 86400,
      "name": "Test",
      "form": [
        {
          "varname": "identifier",
          "type": "string",
          "label": "Identifier"
        },
        {
          "varname": "details",
          "type": "bool",
          "label": "Include details",
          "required": false
        }
      ]
    },
This commit is contained in:
Frédéric Péters 2017-07-07 10:41:54 +02:00
parent e2dbaa52fc
commit 819066421e
2 changed files with 18 additions and 2 deletions

View File

@ -92,9 +92,16 @@ class ConfigJsonForm(forms.ModelForm):
# additional fields.
kwargs['instance'].parameters = None
super(ConfigJsonForm, self).__init__(*args, **kwargs)
field_classes = {
'string': forms.CharField,
'boolean': forms.BooleanField,
}
for field in self.formdef:
self.fields[field['varname']] = forms.CharField(
field_class = field_classes.get(field['type'], forms.CharField)
self.fields[field['varname']] = field_class(
label=field['label'],
required=field.get('required', True),
initial=parameters.get(field['varname']))
def clean(self):

View File

@ -511,7 +511,13 @@ def test_edit_config_json_cell(app, admin_user):
'label': 'Test',
'type': 'string',
'varname': 'test',
}
},
{
'label': 'Test bool',
'type': 'boolean',
'varname': 'test2',
'required': False,
},
]}}):
resp = app.get('/manage/pages/%s/' % page.id)
assert not 'There are no options for this cell.' in resp.form.text
@ -523,16 +529,19 @@ def test_edit_config_json_cell(app, admin_user):
resp = app.get('/manage/pages/%s/' % page.id)
assert resp.form['c%s-test' % cells[0].get_reference()].value == 'Hello world'
assert resp.form['c%s-test2' % cells[0].get_reference()].checked is False
resp = app.get('/manage/pages/%s/' % page.id)
assert ('data-cell-reference="%s"' % cells[0].get_reference()) in resp.body
resp.forms[0]['c%s-test' % cells[0].get_reference()].value = 'World Hello'
resp.forms[0]['c%s-test2' % cells[0].get_reference()].checked = True
resp = resp.form.submit(xhr=True)
assert resp.status_int == 200
assert resp.body.startswith('<p><label')
resp = app.get('/manage/pages/%s/' % page.id)
assert resp.form['c%s-test' % cells[0].get_reference()].value == 'World Hello'
assert resp.form['c%s-test2' % cells[0].get_reference()].checked is True
def test_logout(app, admin_user):