mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			75 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from django.forms import MultipleChoiceField, ValidationError
 | |
| 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)
 |