def test_direct_form_field_overrides(self): # Test that field overrides defined through DIRECT_FORM_FIELD_OVERRIDES # are applied SimplePageForm = get_form_for_model(SimplePage, form_class=WagtailAdminPageForm) simple_form = SimplePageForm() # plain TextFields should use AdminAutoHeightTextInput as the widget self.assertEqual(type(simple_form.fields['content'].widget), AdminAutoHeightTextInput) # This override should NOT be applied to subclasses of TextField such as # RichTextField - they should retain their default widgets EventPageForm = get_form_for_model(EventPage, form_class=WagtailAdminPageForm) event_form = EventPageForm() self.assertEqual(type(event_form.fields['body'].widget), DraftailRichTextArea)
def setUp(self): if WagtailVersion > (2, 13, 0): self.FIELD_CONTENT = """ <div data-contentpath="num_days"> {} {} </div> """.format(self.FIELDSET_CONTENT, self.COMMENT_CONTROL_CONTENT) else: self.FIELD_CONTENT = self.FIELDSET_CONTENT self.maxDiff = None self.home = getPage("/home/") self.user = User.objects.create_superuser('i', '*****@*****.**', 's3(r3t') self.calendar = CalendarPage(owner=self.user, slug="events", title="Events") self.home.add_child(instance=self.calendar) self.calendar.save_revision().publish() self.event = RecurringEventPage(slug="leaders-meeting", title="Leaders' Meeting", repeat=Recurrence(dtstart=dt.date( 2016, 2, 16), freq=MONTHLY, byweekday=[TU(3)]), time_from=dt.time(19), tz="Asia/Tokyo") self.calendar.add_child(instance=self.event) self.event.save_revision().publish() Form = get_form_for_model(RecurringEventPage, form_class=RecurringEventPageForm) self.form = Form(instance=self.event, parent_page=self.calendar)
def setUp(self): self.EventPageForm = get_form_for_model( EventPage, form_class=WagtailAdminPageForm, formsets=[]) self.event = EventPage(title='Abergavenny sheepdog trials', date_from=date(2014, 7, 20), date_to=date(2014, 7, 21)) self.EndDatePanel = FieldPanel('date_to', classname='full-width').bind_to_model(EventPage)
def test_detecting_multiple_duplicate_postcodes(self): data = self.get_page_form_data({ **self.response_data(i=0, postcodes="W1A 1AA, SW1A 1AA, BX4 7SB"), **self.response_data(i=1, postcodes="DH99 1NS, DE99 3GG, XM4 5HQ, SW1A 1AA, W1A 1AA"), "responses-TOTAL_FORMS": "2", }) MyLookupPageForm = get_form_for_model(LookupPage, form_class=LookupPageForm) form = MyLookupPageForm(data) self.assertFalse(form.is_valid()) self.assertIn( form.errors["__all__"], [ # We don't sort the error message, because it might be long [ "The postcodes SW1A 1AA, W1A 1AA appear in multiple responses" ], [ "The postcodes W1A 1AA, SW1A 1AA appear in multiple responses" ], ], )
def test_detecting_duplicate_postcodes_across_multiple_entries(self): data = self.get_page_form_data({ **self.response_data(i=0, postcodes="W1A 1AA, SW1A 1AA"), **self.response_data(i=1, postcodes="DH99 1NS, DE99 3GG"), **self.response_data(i=2, postcodes="XM4 5HQ, E17 1AA"), **self.response_data(i=3, postcodes="N1 1AA"), **self.response_data(i=4, postcodes="EH99 1SP, G58 1SB"), **self.response_data(i=5, postcodes="BX4 7SB, E17 1AA"), **self.response_data(i=6, postcodes="SW1A 2AA, XM4 5HQ"), "responses-TOTAL_FORMS": "7", }) MyLookupPageForm = get_form_for_model(LookupPage, form_class=LookupPageForm) form = MyLookupPageForm(data) self.assertFalse(form.is_valid()) self.assertIn( form.errors["__all__"], [ # We don't sort the error message, because it might be long [ "The postcodes E17 1AA, XM4 5HQ appear in multiple responses" ], [ "The postcodes XM4 5HQ, E17 1AA appear in multiple responses" ], ], )
def test_get_form_for_model_with_widget_overides_by_instance(self): EventPageForm = get_form_for_model( EventPage, form_class=WagtailAdminPageForm, widgets={'date_from': forms.PasswordInput()}) form = EventPageForm() self.assertEqual(type(form.fields['date_from']), forms.DateField) self.assertEqual(type(form.fields['date_from'].widget), forms.PasswordInput)
def setUp(self): self.form_page = make_form_page() self.FormPageForm = get_form_for_model(FormPage, form_class=WagtailAdminPageForm) submissions_panel = FormSubmissionsPanel().bind_to_model(FormPage) self.panel = submissions_panel(self.form_page, self.FormPageForm())
def setUp(self): self.EventPageForm = get_form_for_model( EventPage, form_class=WagtailAdminPageForm, formsets=[]) self.event = EventPage(title='Abergavenny sheepdog trials', date_from=date(2014, 7, 19), date_to=date(2014, 7, 21)) self.dates_panel = FieldRowPanel([ FieldPanel('date_from'), ImageChooserPanel('feed_image'), ]).bind_to_model(EventPage)
def setUp(self): self.EventPageForm = get_form_for_model( EventPage, form_class=WagtailAdminPageForm, formsets=[]) self.event = EventPage(title='Abergavenny sheepdog trials', date_from=date(2014, 7, 20), date_to=date(2014, 7, 21)) self.DatesPanel = FieldRowPanel([ FieldPanel('date_from', classname='col4'), FieldPanel('date_to', classname='coltwo'), ]).bind_to_model(EventPage)
def setUp(self): self.EventPageForm = get_form_for_model( EventPage, form_class=WagtailAdminPageForm, formsets=[]) self.event = EventPage(title='Abergavenny sheepdog trials', date_from=date(2014, 7, 20), date_to=date(2014, 7, 21)) self.dates_panel = FieldRowPanel([ FieldPanel('date_from', classname='col4'), FieldPanel('date_to', classname='coltwo'), ]).bind_to_model(EventPage)
def setUp(self): self.form_page = make_form_page() self.FormPageForm = get_form_for_model( FormPage, form_class=WagtailAdminPageForm ) submissions_panel = FormSubmissionsPanel().bind_to_model(FormPage) self.panel = submissions_panel(self.form_page, self.FormPageForm())
def testBindExceptionTZ25(self): cancellation = CancellationPage(owner = self.user, overrides = self.event, except_date = dt.date(2019,1,21)) Form = get_form_for_model(CancellationPage, form_class=CancellationPageForm) form = Form(instance=cancellation, parent_page=self.event) panel = ExceptionDatePanel('except_date', classname='full-width') panel = panel.bind_to(instance=cancellation) panel = panel.bind_to(request=self._getRequest()) panel = panel.bind_to(form=form) self.assertEqual(panel.exceptionTZ, "Asia/Tokyo")
def testBindWithoutOverrides25(self): cancellation = CancellationPage(owner = self.user, except_date = dt.date(2019,1,21)) Form = get_form_for_model(CancellationPage, form_class=CancellationPageForm) form = Form(instance=cancellation, parent_page=self.event) panel = ExceptionDatePanel('except_date', classname='full-width') panel = panel.bind_to(instance=cancellation) panel = panel.bind_to(request=self._getRequest()) panel = panel.bind_to(form=form) self.assertIsNotNone(panel.form) self.assertIsNone(panel.instance.overrides)
def setUp(self): self.request = RequestFactory().get('/') user = AnonymousUser() # technically, Anonymous users cannot access the admin self.request.user = user self.EventPageForm = get_form_for_model( EventPage, form_class=WagtailAdminPageForm, formsets=[]) self.event = EventPage(title='Abergavenny sheepdog trials', date_from=date(2014, 7, 20), date_to=date(2014, 7, 21)) self.end_date_panel = (FieldPanel('date_to', classname='full-width') .bind_to(model=EventPage, request=self.request))
def testSave(self): Form = get_form_for_model(CalendarPage, form_class=CalendarPageForm) setattr(self.page, '__joyous_edit_request', self.request) form = Form(instance=self.page, parent_page=self.home) handler = Mock() CalendarPageForm.registerImportHandler(handler) form.cleaned_data = {'utc2local': True, 'upload': "FILE"} form.save() handler.load.assert_called_with(self.page, self.request, "FILE", utc2local=True)
def testBindOverridesRepeat25(self): cancellation = CancellationPage(owner = self.user, overrides = self.event, except_date = dt.date(2019,1,21)) Form = get_form_for_model(CancellationPage, form_class=CancellationPageForm) form = Form(instance=cancellation, parent_page=self.event) widget = form['except_date'].field.widget panel = ExceptionDatePanel('except_date', classname='full-width') panel = panel.bind_to(instance=cancellation) panel = panel.bind_to(request=self._getRequest()) panel = panel.bind_to(form=form) self.assertIs(widget.overrides_repeat, self.event.repeat) self.assertIsNone(panel.exceptionTZ)
def testConcealed23(self): Form = get_form_for_model(RecurringEventPage, form_class=RecurringEventPageForm) form = Form(instance=self.event, parent_page=self.calendar) panel = ConcealedPanel([], "Test") panel = panel.bind_to_model(RecurringEventPage) panel = panel.bind_to_instance(instance=self.event, form=form, request=self._getRequest()) content = panel.render() self.assertEqual(content, "") self.assertEqual(panel.heading, "") self.assertEqual(panel.help_text, "")
def setUp(self): self.request = RequestFactory().get('/') user = AnonymousUser() # technically, Anonymous users cannot access the admin self.request.user = user self.EventPageForm = get_form_for_model( EventPage, form_class=WagtailAdminPageForm, formsets=[]) self.event = EventPage(title='Abergavenny sheepdog trials', date_from=date(2014, 7, 19), date_to=date(2014, 7, 21)) self.dates_panel = FieldRowPanel([ FieldPanel('date_from'), ImageChooserPanel('feed_image'), ]).bind_to(model=EventPage, request=self.request)
def setUp(self): # Create a form page self.form_page = make_form_page_with_custom_submission() self.FormPageForm = get_form_for_model( FormPageWithCustomSubmission, form_class=WagtailAdminPageForm ) self.test_user = get_user_model().objects.create_user( username='******', password='******') submissions_panel = FormSubmissionsPanel().bind_to_model(FormPageWithCustomSubmission) self.panel = submissions_panel(self.form_page, self.FormPageForm())
def test_get_form_for_model_with_specific_fields(self): EventPageForm = get_form_for_model( EventPage, form_class=WagtailAdminPageForm, fields=['date_from'], formsets=['speakers']) form = EventPageForm() # form should contain date_from but not title self.assertEqual(type(form.fields['date_from']), forms.DateField) self.assertEqual(type(form.fields['date_from'].widget), AdminDateInput) self.assertNotIn('title', form.fields) # formsets should include speakers but not related_links self.assertIn('speakers', form.formsets) self.assertNotIn('related_links', form.formsets)
def setUp(self): # Create a form page self.form_page = make_form_page_with_custom_submission() self.FormPageForm = get_form_for_model(FormPageWithCustomSubmission, form_class=WagtailAdminPageForm) self.test_user = get_user_model().objects.create_user( username='******', password='******') submissions_panel = FormSubmissionsPanel().bind_to_model( FormPageWithCustomSubmission) self.panel = submissions_panel(self.form_page, self.FormPageForm())
def test_duplicate_postcodes_in_deleted_formset_forms_are_ignored(self): data = self.get_page_form_data( { **self.response_data(i=0, postcodes="W1A 1AA, SW1A 1AA"), **self.response_data(i=1, postcodes="GIR 0AA, W1A 1AA", DELETE="1"), "responses-TOTAL_FORMS": "2", }) MyLookupPageForm = get_form_for_model(LookupPage, form_class=LookupPageForm) form = MyLookupPageForm(data) self.assertTrue(form.is_valid())
def test_postcodes_arrays_are_cleaned(self): data = self.get_page_form_data({ **self.response_data(i=0, postcodes="HP201UY"), "responses-TOTAL_FORMS": "1", }) MyLookupPageForm = get_form_for_model(LookupPage, form_class=LookupPageForm) form = MyLookupPageForm(data) self.assertTrue(form.is_valid()) self.assertEqual( form.formsets["responses"][0].cleaned_data["postcodes"], ["HP20 1UY"])
def test_help_text_patching__no_site(self): # Note: relies on migrations to have populated the test DB Site.objects.all().delete() assert not Site.objects.exists() assert self.Article.base_form_class == BasePageForm FormClass = get_form_for_model(self.Article, form_class=BasePageForm) form = FormClass() self.assertEqual( form.fields["slug"].help_text, ("The name of the page as it will appear in URLs. For example, " "for a post: https://example.com/posts/your-slug-here/"), )
def test_help_text_patching__has_site(self): # Note: relies on migrations to have populated the test DB assert Site.objects.exists() assert Site.objects.first().hostname == "localhost" assert self.Article.base_form_class == BasePageForm FormClass = get_form_for_model(self.Article, form_class=BasePageForm) form = FormClass() self.assertEqual( form.fields["slug"].help_text, ("The name of the page as it will appear in URLs. For example, " "for an Article: http://localhost/articles/slug/"), )
def test_get_form_for_model_with_excluded_fields(self): EventPageForm = get_form_for_model( EventPage, form_class=WagtailAdminPageForm, exclude=['title'], exclude_formsets=['related_links']) form = EventPageForm() # form should contain date_from but not title self.assertEqual(type(form.fields['date_from']), forms.DateField) self.assertEqual(type(form.fields['date_from'].widget), AdminDateInput) self.assertNotIn('title', form.fields) # 'path' is not excluded any more, as the excluded fields were overridden self.assertIn('path', form.fields) # formsets should include speakers but not related_links self.assertIn('speakers', form.formsets) self.assertNotIn('related_links', form.formsets)
def test_detecting_duplicate_postcodes(self): data = self.get_page_form_data({ **self.response_data(i=0, postcodes="W1A 1AA, SW1A 1AA, BX4 7SB"), **self.response_data(i=1, postcodes="DH99 1NS, DE99 3GG, XM4 5HQ, W1A 1AA"), "responses-TOTAL_FORMS": "2", }) MyLookupPageForm = get_form_for_model(LookupPage, form_class=LookupPageForm) form = MyLookupPageForm(data) self.assertFalse(form.is_valid()) self.assertEqual( form.errors["__all__"], ["The postcode W1A 1AA appears in multiple responses"], )
def test_detecting_duplicate_postcodes_with_different_formatting(self): """E.g. W1A 1AA and W1A1AA should be treated as equal""" data = self.get_page_form_data({ **self.response_data(i=0, postcodes="W1A 1AA, SW1A 1AA"), **self.response_data(i=1, postcodes="DH99 1NS, W1A1AA"), "responses-TOTAL_FORMS": "2", }) MyLookupPageForm = get_form_for_model(LookupPage, form_class=LookupPageForm) form = MyLookupPageForm(data) self.assertFalse(form.is_valid()) self.assertEqual( form.errors["__all__"], ["The postcode W1A 1AA appears in multiple responses"], )
def test_get_form_for_model(self): EventPageForm = get_form_for_model(EventPage, form_class=WagtailAdminPageForm) form = EventPageForm() # form should be a subclass of WagtailAdminModelForm self.assertTrue(issubclass(EventPageForm, WagtailAdminModelForm)) # form should contain a title field (from the base Page) self.assertEqual(type(form.fields['title']), forms.CharField) # and 'date_from' from EventPage self.assertEqual(type(form.fields['date_from']), forms.DateField) # the widget should be overridden with AdminDateInput as per FORM_FIELD_OVERRIDES self.assertEqual(type(form.fields['date_from'].widget), AdminDateInput) # treebeard's 'path' field should be excluded self.assertNotIn('path', form.fields) # all child relations become formsets by default self.assertIn('speakers', form.formsets) self.assertIn('related_links', form.formsets)
def setUp(self): self.home = getPage("/home/") self.user = User.objects.create_superuser('i', '*****@*****.**', 's3(r3t') self.calendar = CalendarPage(owner = self.user, slug = "events", title = "Events") self.home.add_child(instance=self.calendar) self.calendar.save_revision().publish() self.event = RecurringEventPage(slug = "leaders-meeting", title = "Leaders' Meeting", repeat = Recurrence(dtstart=dt.date(2016,2,16), freq=MONTHLY, byweekday=[TU(3)]), time_from = dt.time(19), tz = "Asia/Tokyo") self.calendar.add_child(instance=self.event) self.event.save_revision().publish() Form = get_form_for_model(RecurringEventPage, form_class=RecurringEventPageForm) self.form = Form(instance=self.event, parent_page=self.calendar)
def test_tag_widget_is_passed_tag_model(self): RestaurantPageForm = get_form_for_model( RestaurantPage, form_class=WagtailAdminPageForm ) form_html = RestaurantPageForm().as_p() self.assertIn('/admin/tag\\u002Dautocomplete/tests/restauranttag/', form_html) # widget should pick up the free_tagging=False attribute on the tag model # and set itself to autocomplete only self.assertIn('"autocompleteOnly": true', form_html) # Free tagging should also be disabled at the form field validation level RestaurantTag.objects.create(name='Italian', slug='italian') RestaurantTag.objects.create(name='Indian', slug='indian') form = RestaurantPageForm({ 'title': 'Buonasera', 'slug': 'buonasera', 'tags': "Italian, delicious", }) self.assertTrue(form.is_valid()) self.assertEqual(form.cleaned_data['tags'], ["Italian"])
def testShown23(self): class ShownPanel(ConcealedPanel): def _show(self): return True Form = get_form_for_model(RecurringEventPage, form_class=RecurringEventPageForm) form = Form(instance=self.event, parent_page=self.calendar) panel = ShownPanel([], "Test", help_text="Nothing") panel = panel.bind_to_model(RecurringEventPage) panel = panel.bind_to_instance(instance=self.event, form=form, request=self._getRequest()) content = panel.render() self.assertHTMLEqual(content, """ <fieldset> <legend>Test</legend> <ul class="fields"> </ul> </fieldset> """) self.assertEqual(panel.heading, "Test") self.assertEqual(panel.help_text, "Nothing")
def test_help_text_patching_for_external_content(self): # Inline import because we need to use a subclass of Page and don't # want to pollute this module more than we have to from developerportal.apps.externalcontent.models import ( ExternalEvent, ExternalContent, ExternalVideo, ExternalArticle, ) for model in [ ExternalEvent, ExternalContent, ExternalVideo, ExternalArticle ]: assert model.base_form_class == BasePageForm FormClass = get_form_for_model(model, form_class=BasePageForm) form = FormClass() self.assertEqual( form.fields["slug"].help_text, ("Because you are adding External content, " "this slug will NOT be visible to the end user, " "but still needs to be unique within the CMS."), )