Ensure snippet forms allow file uploads

pull/2518/head
Tim Heap 2016-03-30 18:07:27 +11:00 zatwierdzone przez Matt Westcott
rodzic 44198daaf6
commit 9c670c646b
6 zmienionych plików z 109 dodań i 36 usunięć

Wyświetl plik

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.4 on 2016-03-31 00:30
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('snippetstests', '0003_fancysnippet_standardsnippet'),
]
operations = [
migrations.CreateModel(
name='FileUploadSnippet',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('file', models.FileField(upload_to='')),
],
),
]

Wyświetl plik

@ -66,3 +66,8 @@ class StandardSnippet(models.Model):
@register_snippet
class FancySnippet(models.Model):
base_form_class = FancySnippetForm
@register_snippet
class FileUploadSnippet(models.Model):
file = models.FileField()

Wyświetl plik

@ -5,7 +5,7 @@
{% trans "New" as new_str %}
{% include "wagtailadmin/shared/header.html" with title=new_str subtitle=model_opts.verbose_name icon="snippet" tabbed=1 merged=1 %}
<form action="{% url 'wagtailsnippets:add' model_opts.app_label model_opts.model_name %}" method="POST">
<form action="{% url 'wagtailsnippets:add' model_opts.app_label model_opts.model_name %}" method="POST"{% if form.is_multipart %} enctype="multipart/form-data"{% endif %}>
{% csrf_token %}
{{ edit_handler.render_form_content }}

Wyświetl plik

@ -5,7 +5,7 @@
{% trans "Editing" as editing_str %}
{% include "wagtailadmin/shared/header.html" with title=editing_str subtitle=instance icon="snippet" usage_object=instance tabbed=1 merged=1 %}
<form action="{% url 'wagtailsnippets:edit' model_opts.app_label model_opts.model_name instance.id %}" method="POST">
<form action="{% url 'wagtailsnippets:edit' model_opts.app_label model_opts.model_name instance.id %}" method="POST"{% if form.is_multipart %} enctype="multipart/form-data"{% endif %}>
{% csrf_token %}
{{ edit_handler.render_form_content }}

Wyświetl plik

@ -3,6 +3,8 @@ from __future__ import absolute_import, unicode_literals
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Permission
from django.core.exceptions import ImproperlyConfigured
from django.core.files.base import ContentFile
from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.urlresolvers import reverse
from django.test import TestCase
from django.test.utils import override_settings
@ -10,8 +12,8 @@ from taggit.models import Tag
from wagtail.tests.snippets.forms import FancySnippetForm
from wagtail.tests.snippets.models import (
AlphaSnippet, FancySnippet, RegisterDecorator, RegisterFunction, SearchableSnippet,
StandardSnippet, ZuluSnippet)
AlphaSnippet, FancySnippet, FileUploadSnippet, RegisterDecorator, RegisterFunction,
SearchableSnippet, StandardSnippet, ZuluSnippet)
from wagtail.tests.testapp.models import Advert, AdvertWithTabbedInterface, SnippetChooserModel
from wagtail.tests.utils import WagtailTestUtils
from wagtail.wagtailadmin.forms import WagtailAdminModelForm
@ -117,15 +119,13 @@ class TestSnippetCreateView(TestCase, WagtailTestUtils):
def setUp(self):
self.login()
def get(self, params={}):
return self.client.get(reverse('wagtailsnippets:add',
args=('tests', 'advert')),
params)
def get(self, params={}, model=Advert):
args = (model._meta.app_label, model._meta.model_name)
return self.client.get(reverse('wagtailsnippets:add', args=args), params)
def post(self, post_data={}):
return self.client.post(reverse('wagtailsnippets:add',
args=('tests', 'advert')),
post_data)
def post(self, post_data={}, model=Advert):
args = (model._meta.app_label, model._meta.model_name)
return self.client.post(reverse('wagtailsnippets:add', args=args), post_data)
def test_simple(self):
response = self.get()
@ -176,24 +176,40 @@ class TestSnippetCreateView(TestCase, WagtailTestUtils):
list(snippet.tags.order_by('name')),
expected_tags)
def test_create_file_upload_multipart(self):
response = self.get(model=FileUploadSnippet)
self.assertContains(response, 'enctype="multipart/form-data"')
class TestSnippetEditView(TestCase, WagtailTestUtils):
response = self.post(model=FileUploadSnippet, post_data={
'file': SimpleUploadedFile('test.txt', b"Uploaded file")})
self.assertRedirects(response, reverse('wagtailsnippets:list',
args=('snippetstests', 'fileuploadsnippet')))
snippet = FileUploadSnippet.objects.get()
self.assertEqual(snippet.file.read(), b"Uploaded file")
class BaseTestSnippetEditView(TestCase, WagtailTestUtils):
def get(self, params={}):
snippet = self.test_snippet
args = (snippet._meta.app_label, snippet._meta.model_name, snippet.id)
return self.client.get(reverse('wagtailsnippets:edit', args=args), params)
def post(self, post_data={}):
snippet = self.test_snippet
args = (snippet._meta.app_label, snippet._meta.model_name, snippet.id)
return self.client.post(reverse('wagtailsnippets:edit', args=args), post_data)
def setUp(self):
self.login()
class TestSnippetEditView(BaseTestSnippetEditView):
fixtures = ['test.json']
def setUp(self):
super(TestSnippetEditView, self).setUp()
self.test_snippet = Advert.objects.get(id=1)
self.test_snippet_with_tabbed_interface = AdvertWithTabbedInterface.objects.get(id=1)
self.login()
def get(self, params={}):
return self.client.get(reverse('wagtailsnippets:edit',
args=('tests', 'advert', self.test_snippet.id)),
params)
def post(self, post_data={}):
return self.client.post(reverse('wagtailsnippets:edit',
args=('tests', 'advert', self.test_snippet.id)),
post_data)
def test_simple(self):
response = self.get()
@ -203,16 +219,6 @@ class TestSnippetEditView(TestCase, WagtailTestUtils):
self.assertNotContains(response, '<a href="#advert" class="active">Advert</a>', html=True)
self.assertNotContains(response, '<a href="#other" class="">Other</a>', html=True)
def test_snippet_with_tabbed_interface(self):
reverse_args = ('tests', 'advertwithtabbedinterface', self.test_snippet_with_tabbed_interface.id)
response = self.client.get(reverse('wagtailsnippets:edit', args=reverse_args))
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'wagtailsnippets/snippets/edit.html')
self.assertContains(response, '<ul class="tab-nav merged">')
self.assertContains(response, '<a href="#advert" class="active">Advert</a>', html=True)
self.assertContains(response, '<a href="#other" class="">Other</a>', html=True)
def test_non_existant_model(self):
response = self.client.get(reverse('wagtailsnippets:edit', args=('tests', 'foo', self.test_snippet.id)))
self.assertEqual(response.status_code, 404)
@ -253,6 +259,44 @@ class TestSnippetEditView(TestCase, WagtailTestUtils):
expected_tags)
class TestEditTabbedSnippet(BaseTestSnippetEditView):
def setUp(self):
super(TestEditTabbedSnippet, self).setUp()
self.test_snippet = AdvertWithTabbedInterface.objects.create(
text="test_advert",
url="http://www.example.com",
something_else="Model with tabbed interface")
def test_snippet_with_tabbed_interface(self):
response = self.get()
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'wagtailsnippets/snippets/edit.html')
self.assertContains(response, '<ul class="tab-nav merged">')
self.assertContains(response, '<a href="#advert" class="active">Advert</a>', html=True)
self.assertContains(response, '<a href="#other" class="">Other</a>', html=True)
class TestEditFileUploadSnippet(BaseTestSnippetEditView):
def setUp(self):
super(TestEditFileUploadSnippet, self).setUp()
self.test_snippet = FileUploadSnippet.objects.create(
file=ContentFile(b"Simple text document", 'test.txt'))
def test_edit_file_upload_multipart(self):
response = self.get()
self.assertContains(response, 'enctype="multipart/form-data"')
response = self.post(post_data={
'file': SimpleUploadedFile('replacement.txt', b"Replacement document")})
self.assertRedirects(response, reverse('wagtailsnippets:list',
args=('snippetstests', 'fileuploadsnippet')))
snippet = FileUploadSnippet.objects.get()
self.assertEqual(snippet.file.read(), b"Replacement document")
class TestSnippetDelete(TestCase, WagtailTestUtils):
fixtures = ['test.json']

Wyświetl plik

@ -157,6 +157,7 @@ def create(request, app_label, model_name):
return render(request, 'wagtailsnippets/snippets/create.html', {
'model_opts': model._meta,
'edit_handler': edit_handler,
'form': form,
})
@ -200,7 +201,8 @@ def edit(request, app_label, model_name, id):
return render(request, 'wagtailsnippets/snippets/edit.html', {
'model_opts': model._meta,
'instance': instance,
'edit_handler': edit_handler
'edit_handler': edit_handler,
'form': form,
})