Ensure setting forms allow file uploads

This commit is contained in:
Tim Heap 2016-03-30 18:06:35 +11:00 committed by Matt Westcott
parent 228088d33d
commit 44198daaf6
5 changed files with 49 additions and 9 deletions

View file

@ -26,7 +26,7 @@
</div>
</header>
<form action="{% url 'wagtailsettings:edit' opts.app_label opts.model_name site.pk %}" method="POST">
<form action="{% url 'wagtailsettings:edit' opts.app_label opts.model_name site.pk %}" method="POST"{% if form.is_multipart %} enctype="multipart/form-data"{% endif %}>
{% csrf_token %}
{{ edit_handler.render_form_content }}

View file

@ -7,7 +7,7 @@ from django.test import TestCase
from django.utils.text import capfirst
from wagtail.contrib.settings.registry import SettingMenuItem
from wagtail.tests.testapp.models import IconSetting, TestSetting
from wagtail.tests.testapp.models import FileUploadSetting, IconSetting, TestSetting
from wagtail.tests.utils import WagtailTestUtils
from wagtail.wagtailcore import hooks
from wagtail.wagtailcore.models import Page, Site
@ -45,16 +45,17 @@ class TestSettingMenu(TestCase, WagtailTestUtils):
class BaseTestSettingView(TestCase, WagtailTestUtils):
def get(self, site_pk=1, params={}):
url = self.edit_url('tests', 'testsetting', site_pk=site_pk)
def get(self, site_pk=1, params={}, setting=TestSetting):
url = self.edit_url(setting=setting, site_pk=site_pk)
return self.client.get(url, params)
def post(self, site_pk=1, post_data={}):
url = self.edit_url('tests', 'testsetting', site_pk=site_pk)
def post(self, site_pk=1, post_data={}, setting=TestSetting):
url = self.edit_url(setting=setting, site_pk=site_pk)
return self.client.post(url, post_data)
def edit_url(self, app, model, site_pk=1):
return reverse('wagtailsettings:edit', args=[app, model, site_pk])
def edit_url(self, setting, site_pk=1):
args = [setting._meta.app_label, setting._meta.model_name, site_pk]
return reverse('wagtailsettings:edit', args=args)
class TestSettingCreateView(BaseTestSettingView):
@ -82,6 +83,11 @@ class TestSettingCreateView(BaseTestSettingView):
self.assertEqual(setting.title, 'Edited site title')
self.assertEqual(setting.email, 'test@example.com')
def test_file_upload_multipart(self):
response = self.get(setting=FileUploadSetting)
# Ensure the form supports file uploads
self.assertContains(response, 'enctype="multipart/form-data"')
class TestSettingEditView(BaseTestSettingView):
def setUp(self):
@ -102,7 +108,7 @@ class TestSettingEditView(BaseTestSettingView):
self.assertContains(response, "menu-active")
def test_non_existant_model(self):
response = self.client.get(self.edit_url('test', 'foo'))
response = self.client.get(reverse('wagtailsettings:edit', args=['test', 'foo', 1]))
self.assertEqual(response.status_code, 404)
def test_edit_invalid(self):

View file

@ -84,6 +84,7 @@ def edit(request, app_name, model_name, site_pk):
'setting_type_name': setting_type_name,
'instance': instance,
'edit_handler': edit_handler,
'form': form,
'site': site,
'site_switcher': site_switcher,
})

View file

@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.4 on 2016-03-31 00:31
from __future__ import unicode_literals
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wagtailcore', '0028_merge'),
('tests', '0003_onetoonepage'),
]
operations = [
migrations.CreateModel(
name='FileUploadSetting',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('file', models.FileField(upload_to='')),
('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
],
options={
'abstract': False,
},
),
]

View file

@ -560,6 +560,11 @@ class NotYetRegisteredSetting(BaseSetting):
pass
@register_setting
class FileUploadSetting(BaseSetting):
file = models.FileField()
class BlogCategory(models.Model):
name = models.CharField(unique=True, max_length=80)