django/tests/forms_tests/field_tests/test_multiplechoicefield.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

79 lines
3.7 KiB
Python
Raw Normal View History

from django.core.exceptions import ValidationError
from django.forms import MultipleChoiceField
from django.test import SimpleTestCase
class MultipleChoiceFieldTest(SimpleTestCase):
def test_multiplechoicefield_1(self):
f = MultipleChoiceField(choices=[("1", "One"), ("2", "Two")])
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
f.clean("")
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
f.clean(None)
self.assertEqual(["1"], f.clean([1]))
self.assertEqual(["1"], f.clean(["1"]))
self.assertEqual(["1", "2"], f.clean(["1", "2"]))
self.assertEqual(["1", "2"], f.clean([1, "2"]))
self.assertEqual(["1", "2"], f.clean((1, "2")))
with self.assertRaisesMessage(ValidationError, "'Enter a list of values.'"):
f.clean("hello")
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
f.clean([])
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
f.clean(())
msg = "'Select a valid choice. 3 is not one of the available choices.'"
with self.assertRaisesMessage(ValidationError, msg):
f.clean(["3"])
def test_multiplechoicefield_2(self):
f = MultipleChoiceField(choices=[("1", "One"), ("2", "Two")], required=False)
self.assertEqual([], f.clean(""))
self.assertEqual([], f.clean(None))
self.assertEqual(["1"], f.clean([1]))
self.assertEqual(["1"], f.clean(["1"]))
self.assertEqual(["1", "2"], f.clean(["1", "2"]))
self.assertEqual(["1", "2"], f.clean([1, "2"]))
self.assertEqual(["1", "2"], f.clean((1, "2")))
with self.assertRaisesMessage(ValidationError, "'Enter a list of values.'"):
f.clean("hello")
self.assertEqual([], f.clean([]))
self.assertEqual([], f.clean(()))
msg = "'Select a valid choice. 3 is not one of the available choices.'"
with self.assertRaisesMessage(ValidationError, msg):
f.clean(["3"])
def test_multiplechoicefield_3(self):
f = MultipleChoiceField(
choices=[
("Numbers", (("1", "One"), ("2", "Two"))),
("Letters", (("3", "A"), ("4", "B"))),
("5", "Other"),
]
)
self.assertEqual(["1"], f.clean([1]))
self.assertEqual(["1"], f.clean(["1"]))
self.assertEqual(["1", "5"], f.clean([1, 5]))
self.assertEqual(["1", "5"], f.clean([1, "5"]))
self.assertEqual(["1", "5"], f.clean(["1", 5]))
self.assertEqual(["1", "5"], f.clean(["1", "5"]))
msg = "'Select a valid choice. 6 is not one of the available choices.'"
with self.assertRaisesMessage(ValidationError, msg):
f.clean(["6"])
msg = "'Select a valid choice. 6 is not one of the available choices.'"
with self.assertRaisesMessage(ValidationError, msg):
f.clean(["1", "6"])
def test_multiplechoicefield_changed(self):
f = MultipleChoiceField(choices=[("1", "One"), ("2", "Two"), ("3", "Three")])
self.assertFalse(f.has_changed(None, None))
self.assertFalse(f.has_changed([], None))
self.assertTrue(f.has_changed(None, ["1"]))
self.assertFalse(f.has_changed([1, 2], ["1", "2"]))
self.assertFalse(f.has_changed([2, 1], ["1", "2"]))
self.assertTrue(f.has_changed([1, 2], ["1"]))
self.assertTrue(f.has_changed([1, 2], ["1", "3"]))
def test_disabled_has_changed(self):
f = MultipleChoiceField(choices=[("1", "One"), ("2", "Two")], disabled=True)
self.assertIs(f.has_changed("x", "y"), False)