Merge pull request #1846 from gasman/fix/snippet-chooser

Test for correct exception in BaseChooserPanel.get_chosen_item - fixes #1834
This commit is contained in:
Karl Hobley 2015-10-21 10:24:30 +01:00
commit 65688a75d0
4 changed files with 38 additions and 6 deletions

View file

@ -12,6 +12,15 @@ def get_related_model(rel):
return rel.model
def get_related_parent_model(rel):
# In Django 1.7 and under, the parent model is accessed by doing: rel.parent_model
# This was renamed in Django 1.8 to rel.model.
if django.VERSION >= (1, 8):
return rel.model
else:
return rel.parent_model
def render_to_string(template_name, context=None, request=None, **kwargs):
if django.VERSION >= (1, 8):
return loader.render_to_string(

View file

@ -19,7 +19,7 @@ from taggit.managers import TaggableManager
from wagtail.wagtailadmin import widgets
from wagtail.wagtailcore.models import Page
from wagtail.wagtailcore.utils import camelcase_to_underscore, resolve_model_string
from wagtail.utils.compat import get_related_model
from wagtail.utils.compat import get_related_model, get_related_parent_model
# Form field properties to override whenever we encounter a model field
@ -525,7 +525,7 @@ class BaseChooserPanel(BaseFieldPanel):
def get_chosen_item(self):
field = self.instance._meta.get_field(self.field_name)
related_model = get_related_model(field.related)
related_model = get_related_parent_model(field.related)
try:
return getattr(self.instance, self.field_name)
except related_model.DoesNotExist:

View file

@ -382,6 +382,16 @@ class TestPageChooserPanel(TestCase):
'<a href="/admin/pages/%d/edit/" class="edit-link button button-small button-secondary" target="_blank">Edit this page</a>' % self.christmas_page.id,
result)
def test_render_as_empty_field(self):
test_instance = PageChooserModel()
form = self.PageChooserForm(instance=test_instance)
page_chooser_panel = self.MyPageChooserPanel(instance=test_instance, form=form)
result = page_chooser_panel.render_as_field()
self.assertIn('<p class="help">help text</p>', result)
self.assertIn('<span class="title"></span>', result)
self.assertIn('Choose a page', result)
def test_render_error(self):
form = self.PageChooserForm({'page': ''}, instance=self.test_instance)
self.assertFalse(form.is_valid())

View file

@ -255,10 +255,10 @@ class TestSnippetChooserPanel(TestCase):
test_snippet = model.objects.create(
advert=Advert.objects.create(text=self.advert_text))
edit_handler_class = get_snippet_edit_handler(model)
form_class = edit_handler_class.get_form_class(model)
form = form_class(instance=test_snippet)
edit_handler = edit_handler_class(instance=test_snippet, form=form)
self.edit_handler_class = get_snippet_edit_handler(model)
self.form_class = self.edit_handler_class.get_form_class(model)
form = self.form_class(instance=test_snippet)
edit_handler = self.edit_handler_class(instance=test_snippet, form=form)
self.snippet_chooser_panel = [
panel for panel in edit_handler.children
@ -274,6 +274,19 @@ class TestSnippetChooserPanel(TestCase):
self.assertIn("Choose advert", field_html)
self.assertIn("Choose another advert", field_html)
def test_render_as_empty_field(self):
test_snippet = SnippetChooserModel()
form = self.form_class(instance=test_snippet)
edit_handler = self.edit_handler_class(instance=test_snippet, form=form)
snippet_chooser_panel = [
panel for panel in edit_handler.children
if getattr(panel, 'field_name', None) == 'advert'][0]
field_html = snippet_chooser_panel.render_as_field()
self.assertIn("Choose advert", field_html)
self.assertIn("Choose another advert", field_html)
def test_render_js(self):
self.assertIn('createSnippetChooser("id_advert", "tests/advert");',
self.snippet_chooser_panel.render_as_field())