summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/forms_tests/widget_tests/test_checkboxinput.py4
-rw-r--r--tests/forms_tests/widget_tests/test_fileinput.py4
-rw-r--r--tests/forms_tests/widget_tests/test_multiwidget.py7
-rw-r--r--tests/forms_tests/widget_tests/test_selectdatewidget.py8
-rw-r--r--tests/forms_tests/widget_tests/test_widget.py12
-rw-r--r--tests/model_forms/models.py2
-rw-r--r--tests/model_forms/tests.py52
-rw-r--r--tests/postgres_tests/models.py2
-rw-r--r--tests/postgres_tests/test_array.py27
9 files changed, 116 insertions, 2 deletions
diff --git a/tests/forms_tests/widget_tests/test_checkboxinput.py b/tests/forms_tests/widget_tests/test_checkboxinput.py
index 77b03b9ea9..ecfc2105c8 100644
--- a/tests/forms_tests/widget_tests/test_checkboxinput.py
+++ b/tests/forms_tests/widget_tests/test_checkboxinput.py
@@ -85,3 +85,7 @@ class CheckboxInputTest(WidgetTest):
def test_value_from_datadict_string_int(self):
value = self.widget.value_from_datadict({'testing': '0'}, {}, 'testing')
self.assertIs(value, True)
+
+ def test_value_omitted_from_data(self):
+ self.assertIs(self.widget.value_omitted_from_data({'field': 'value'}, {}, 'field'), False)
+ self.assertIs(self.widget.value_omitted_from_data({}, {}, 'field'), False)
diff --git a/tests/forms_tests/widget_tests/test_fileinput.py b/tests/forms_tests/widget_tests/test_fileinput.py
index eb1c9d81ed..6e96dc7b5f 100644
--- a/tests/forms_tests/widget_tests/test_fileinput.py
+++ b/tests/forms_tests/widget_tests/test_fileinput.py
@@ -14,3 +14,7 @@ class FileInputTest(WidgetTest):
self.check_html(self.widget, 'email', 'test@example.com', html='<input type="file" name="email" />')
self.check_html(self.widget, 'email', '', html='<input type="file" name="email" />')
self.check_html(self.widget, 'email', None, html='<input type="file" name="email" />')
+
+ def test_value_omitted_from_data(self):
+ self.assertIs(self.widget.value_omitted_from_data({}, {}, 'field'), True)
+ self.assertIs(self.widget.value_omitted_from_data({}, {'field': 'value'}, 'field'), False)
diff --git a/tests/forms_tests/widget_tests/test_multiwidget.py b/tests/forms_tests/widget_tests/test_multiwidget.py
index bb6f8bfc4f..99aecea1ab 100644
--- a/tests/forms_tests/widget_tests/test_multiwidget.py
+++ b/tests/forms_tests/widget_tests/test_multiwidget.py
@@ -118,6 +118,13 @@ class MultiWidgetTest(WidgetTest):
'<input id="bar_1" type="text" class="small" value="lennon" name="name_1" />'
))
+ def test_value_omitted_from_data(self):
+ widget = MyMultiWidget(widgets=(TextInput(), TextInput()))
+ self.assertIs(widget.value_omitted_from_data({}, {}, 'field'), True)
+ self.assertIs(widget.value_omitted_from_data({'field_0': 'x'}, {}, 'field'), False)
+ self.assertIs(widget.value_omitted_from_data({'field_1': 'y'}, {}, 'field'), False)
+ self.assertIs(widget.value_omitted_from_data({'field_0': 'x', 'field_1': 'y'}, {}, 'field'), False)
+
def test_needs_multipart_true(self):
"""
needs_multipart_form should be True if any widgets need it.
diff --git a/tests/forms_tests/widget_tests/test_selectdatewidget.py b/tests/forms_tests/widget_tests/test_selectdatewidget.py
index 6efa240b66..fcce916f76 100644
--- a/tests/forms_tests/widget_tests/test_selectdatewidget.py
+++ b/tests/forms_tests/widget_tests/test_selectdatewidget.py
@@ -477,3 +477,11 @@ class SelectDateWidgetTest(WidgetTest):
w.value_from_datadict({'date_year': '1899', 'date_month': '8', 'date_day': '13'}, {}, 'date'),
'13-08-1899',
)
+
+ def test_value_omitted_from_data(self):
+ self.assertIs(self.widget.value_omitted_from_data({}, {}, 'field'), True)
+ self.assertIs(self.widget.value_omitted_from_data({'field_month': '12'}, {}, 'field'), False)
+ self.assertIs(self.widget.value_omitted_from_data({'field_year': '2000'}, {}, 'field'), False)
+ self.assertIs(self.widget.value_omitted_from_data({'field_day': '1'}, {}, 'field'), False)
+ data = {'field_day': '1', 'field_month': '12', 'field_year': '2000'}
+ self.assertIs(self.widget.value_omitted_from_data(data, {}, 'field'), False)
diff --git a/tests/forms_tests/widget_tests/test_widget.py b/tests/forms_tests/widget_tests/test_widget.py
new file mode 100644
index 0000000000..3911627a0c
--- /dev/null
+++ b/tests/forms_tests/widget_tests/test_widget.py
@@ -0,0 +1,12 @@
+from __future__ import unicode_literals
+
+from django.forms import Widget
+from django.test import SimpleTestCase
+
+
+class WidgetTests(SimpleTestCase):
+
+ def test_value_omitted_from_data(self):
+ widget = Widget()
+ self.assertIs(widget.value_omitted_from_data({}, {}, 'field'), True)
+ self.assertIs(widget.value_omitted_from_data({'field': 'value'}, {}, 'field'), False)
diff --git a/tests/model_forms/models.py b/tests/model_forms/models.py
index dad245ba78..9898022cca 100644
--- a/tests/model_forms/models.py
+++ b/tests/model_forms/models.py
@@ -120,9 +120,11 @@ class PublicationDefaults(models.Model):
CATEGORY_CHOICES = ((1, 'Games'), (2, 'Comics'), (3, 'Novel'))
title = models.CharField(max_length=30)
date_published = models.DateField(default=datetime.date.today)
+ datetime_published = models.DateTimeField(default=datetime.datetime(2000, 1, 1))
mode = models.CharField(max_length=2, choices=MODE_CHOICES, default=default_mode)
category = models.IntegerField(choices=CATEGORY_CHOICES, default=default_category)
active = models.BooleanField(default=True)
+ file = models.FileField(default='default.txt')
class Author(models.Model):
diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py
index 593e18fdaa..f2931262c2 100644
--- a/tests/model_forms/tests.py
+++ b/tests/model_forms/tests.py
@@ -601,6 +601,58 @@ class ModelFormBaseTest(TestCase):
m1 = mf1.save(commit=False)
self.assertEqual(m1.mode, mode)
+ def test_default_splitdatetime_field(self):
+ class PubForm(forms.ModelForm):
+ datetime_published = forms.SplitDateTimeField(required=False)
+
+ class Meta:
+ model = PublicationDefaults
+ fields = ('datetime_published',)
+
+ mf1 = PubForm({})
+ self.assertEqual(mf1.errors, {})
+ m1 = mf1.save(commit=False)
+ self.assertEqual(m1.datetime_published, datetime.datetime(2000, 1, 1))
+
+ mf2 = PubForm({'datetime_published_0': '2010-01-01', 'datetime_published_1': '0:00:00'})
+ self.assertEqual(mf2.errors, {})
+ m2 = mf2.save(commit=False)
+ self.assertEqual(m2.datetime_published, datetime.datetime(2010, 1, 1))
+
+ def test_default_filefield(self):
+ class PubForm(forms.ModelForm):
+ class Meta:
+ model = PublicationDefaults
+ fields = ('file',)
+
+ mf1 = PubForm({})
+ self.assertEqual(mf1.errors, {})
+ m1 = mf1.save(commit=False)
+ self.assertEqual(m1.file.name, 'default.txt')
+
+ mf2 = PubForm({}, {'file': SimpleUploadedFile('name', b'foo')})
+ self.assertEqual(mf2.errors, {})
+ m2 = mf2.save(commit=False)
+ self.assertEqual(m2.file.name, 'name')
+
+ def test_selectdatewidget(self):
+ class PubForm(forms.ModelForm):
+ date_published = forms.DateField(required=False, widget=forms.SelectDateWidget)
+
+ class Meta:
+ model = PublicationDefaults
+ fields = ('date_published',)
+
+ mf1 = PubForm({})
+ self.assertEqual(mf1.errors, {})
+ m1 = mf1.save(commit=False)
+ self.assertEqual(m1.date_published, datetime.date.today())
+
+ mf2 = PubForm({'date_published_year': '2010', 'date_published_month': '1', 'date_published_day': '1'})
+ self.assertEqual(mf2.errors, {})
+ m2 = mf2.save(commit=False)
+ self.assertEqual(m2.date_published, datetime.date(2010, 1, 1))
+
class FieldOverridesByFormMetaForm(forms.ModelForm):
class Meta:
diff --git a/tests/postgres_tests/models.py b/tests/postgres_tests/models.py
index d94eb90d4a..7d2dabcd01 100644
--- a/tests/postgres_tests/models.py
+++ b/tests/postgres_tests/models.py
@@ -40,7 +40,7 @@ class PostgreSQLModel(models.Model):
class IntegerArrayModel(PostgreSQLModel):
- field = ArrayField(models.IntegerField())
+ field = ArrayField(models.IntegerField(), default=[], blank=True)
class NullableIntegerArrayModel(PostgreSQLModel):
diff --git a/tests/postgres_tests/test_array.py b/tests/postgres_tests/test_array.py
index 6a305556d4..5929c565d6 100644
--- a/tests/postgres_tests/test_array.py
+++ b/tests/postgres_tests/test_array.py
@@ -20,7 +20,9 @@ from .models import (
try:
from django.contrib.postgres.fields import ArrayField
- from django.contrib.postgres.forms import SimpleArrayField, SplitArrayField
+ from django.contrib.postgres.forms import (
+ SimpleArrayField, SplitArrayField, SplitArrayWidget,
+ )
except ImportError:
pass
@@ -714,3 +716,26 @@ class TestSplitFormField(PostgreSQLTestCase):
'Item 0 in the array did not validate: Ensure this value has at most 2 characters (it has 3).',
'Item 2 in the array did not validate: Ensure this value has at most 2 characters (it has 4).',
])
+
+ def test_splitarraywidget_value_omitted_from_data(self):
+ class Form(forms.ModelForm):
+ field = SplitArrayField(forms.IntegerField(), required=False, size=2)
+
+ class Meta:
+ model = IntegerArrayModel
+ fields = ('field',)
+
+ form = Form({'field_0': '1', 'field_1': '2'})
+ self.assertEqual(form.errors, {})
+ obj = form.save(commit=False)
+ self.assertEqual(obj.field, [1, 2])
+
+
+class TestSplitFormWidget(PostgreSQLTestCase):
+
+ def test_value_omitted_from_data(self):
+ widget = SplitArrayWidget(forms.TextInput(), size=2)
+ self.assertIs(widget.value_omitted_from_data({}, {}, 'field'), True)
+ self.assertIs(widget.value_omitted_from_data({'field_0': 'value'}, {}, 'field'), False)
+ self.assertIs(widget.value_omitted_from_data({'field_1': 'value'}, {}, 'field'), False)
+ self.assertIs(widget.value_omitted_from_data({'field_0': 'value', 'field_1': 'value'}, {}, 'field'), False)