def test_bitmaskfield_works_with_multibit_choices(self): field = BitmaskField( choices=[(1, 'choice 0'), (4, 'choice 1'), ('optgroup', [(5, 'choice 2')])]) self.assertEqual(5, field.clean(5, None))
def test_bitmaskfield_raises_error_on_invalid_choice(self): field = BitmaskField(choices=[(1, 'choice 0'), ('optgroup', [(4, 'choice 1')])]) cases = dict( none=None, single_invalid_bit=2, # 0010 two_invalid_bits=10, # 1010 partly_invalid_1=3, # 0011 partly_invalid_2=6, # 0110 partly_invalid_3=7, # 0111 ) for case, value in cases.items(): with self.subTest(case=case): with self.assertRaises(exceptions.ValidationError): field.clean(value, None)
def test_bitmaskfield_return_error_on_invalid_choices(self): cases = dict( none=[(None, 'choice')], str=[('foo', 'choice')], negative=[(-1, 'choice')], optgroup=[('optgroup', [(None, 'choice')])], ) for case, choices in cases.items(): with self.subTest(case=case): field = BitmaskField(choices=choices) field.contribute_to_class(ContributingModel, 'bitmask') errors = field.check() self.assertEqual(1, len(errors)) error = errors[0] self.assertEqual("all 'choices' must be of integer type.", error.msg)
def test_bitmaskfield_cleans_valid_choice(self): field = BitmaskField(choices=[(1, 'choice 0'), ('optgroup', [(4, 'choice 1')])]) cases = dict( first_choice=dict( # 0001 choice=1, expected_cleaned=1, ), second_choice=dict( # 0100 choice=4, expected_cleaned=4, ), combo=dict( # 0101 choice=5, expected_cleaned=5, ), ) for case, data in cases.items(): with self.subTest(case=case): self.assertEqual( data['expected_cleaned'], field.clean(data['choice'], None), )
class TestModel(models.Model): bitmask = BitmaskField(choices=[(1, 'choice 0'), ('optgroup', [(4, 'choice 1')])], null=True) bitmask_int = BitmaskField(null=True)
def test_bitmaskfield_max_length_validation(self): field = BitmaskField(max_length=1) field.clean(256, None) with self.assertRaises(exceptions.ValidationError): field.clean(257, None)