kopia lustrzana https://github.com/wagtail/wagtail
Ensure snippet forms allow file uploads
rodzic
44198daaf6
commit
9c670c646b
|
@ -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='')),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -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()
|
||||
|
|
|
@ -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 }}
|
||||
|
||||
|
|
|
@ -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 }}
|
||||
|
||||
|
|
|
@ -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']
|
||||
|
||||
|
|
|
@ -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,
|
||||
})
|
||||
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue