tests.py 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. from __future__ import unicode_literals
  2. from unittest import skipUnless
  3. from django.template import RequestContext
  4. from django import forms
  5. from mezzanine.conf import settings
  6. from mezzanine.core.models import CONTENT_STATUS_PUBLISHED
  7. from mezzanine.forms import fields
  8. from mezzanine.forms.forms import FormForForm
  9. from mezzanine.forms.models import Form
  10. from mezzanine.utils.tests import TestCase
  11. class TestsForm(TestCase):
  12. def test_forms(self):
  13. """
  14. Simple 200 status check against rendering and posting to forms
  15. with both optional and required fields.
  16. """
  17. for required in (True, False):
  18. form = Form.objects.create(title="Form",
  19. status=CONTENT_STATUS_PUBLISHED)
  20. for (i, (field, _)) in enumerate(fields.NAMES):
  21. form.fields.create(label="Field %s" % i, field_type=field,
  22. required=required, visible=True)
  23. response = self.client.get(form.get_absolute_url())
  24. self.assertEqual(response.status_code, 200)
  25. visible_fields = form.fields.visible()
  26. data = dict([("field_%s" % f.id, "test") for f in visible_fields])
  27. response = self.client.post(form.get_absolute_url(), data=data)
  28. self.assertEqual(response.status_code, 200)
  29. @skipUnless(settings.USE_MODELTRANSLATION and len(settings.LANGUAGES) > 1,
  30. "modeltranslation configured for several languages required")
  31. def test_submit_button_text(self):
  32. """
  33. Test that Form.button_text has its value displayed properly without
  34. being translated back to the default language.
  35. """
  36. from collections import OrderedDict
  37. from django.core.urlresolvers import reverse
  38. from django.utils.translation import (get_language, activate,
  39. ugettext as _)
  40. from modeltranslation.utils import auto_populate
  41. default_language = get_language()
  42. code_list = OrderedDict(settings.LANGUAGES)
  43. del code_list[default_language]
  44. for c in code_list:
  45. try:
  46. activate(c)
  47. except:
  48. pass
  49. else:
  50. break
  51. return
  52. with auto_populate(True):
  53. form = Form.objects.create(title="Form button_text",
  54. status=CONTENT_STATUS_PUBLISHED)
  55. form.fields.create(label="Field test", field_type=fields.TEXT,
  56. required=True, visible=True)
  57. submit_text = _("Submit")
  58. form.button_text = submit_text
  59. form.save()
  60. # Client session still uses default language
  61. response = self.client.get(form.get_absolute_url())
  62. activate(default_language)
  63. # Default language contains the default translation for Submit
  64. self.assertContains(response, _("Submit"))
  65. # Language used for form creation contains its own translation
  66. self.client.post(reverse('set_language'), data={'language': c})
  67. response = self.client.get(form.get_absolute_url())
  68. self.client.post(reverse('set_language'), data={'language':
  69. default_language})
  70. self.assertContains(response, submit_text)
  71. def test_custom_email_type(self):
  72. class CustomEmailField(forms.EmailField):
  73. pass
  74. fields.CLASSES[16] = CustomEmailField
  75. fields.NAMES += ((16, 'Custom email field'),)
  76. form_page = Form.objects.create(title="Email form tests")
  77. form_page.fields.create(label="Email field test", field_type=16)
  78. test_email = 'test@example.com'
  79. request = self._request_factory.post('/', {'field_1': test_email})
  80. form = FormForForm(form_page, RequestContext(request),
  81. request.POST or None, request.FILES or None)
  82. self.assertTrue(form.is_valid())
  83. self.assertEqual(form.email_to(), test_email)