diff --git a/model_utils/choices.py b/model_utils/choices.py index b5177cd..570f1af 100644 --- a/model_utils/choices.py +++ b/model_utils/choices.py @@ -76,3 +76,7 @@ class Choices(object): def __repr__(self): return '%s(%s)' % (self.__class__.__name__, ', '.join(("%s" % repr(i) for i in self._full))) + + def __contains__(self, item): + if item in self._choice_dict.values(): + return True diff --git a/model_utils/tests/tests.py b/model_utils/tests/tests.py index f1fe411..ab60a62 100644 --- a/model_utils/tests/tests.py +++ b/model_utils/tests/tests.py @@ -223,6 +223,12 @@ class ChoicesTests(TestCase): def test_wrong_length_tuple(self): self.assertRaises(ValueError, Choices, ('a',)) + def test_contains_value(self): + self.assertTrue('PUBLISHED' in self.STATUS) + self.assertTrue('DRAFT' in self.STATUS) + + def test_doesnt_contain_value(self): + self.assertFalse('UNPUBLISHED' in self.STATUS) class LabelChoicesTests(ChoicesTests): @@ -265,6 +271,19 @@ class LabelChoicesTests(ChoicesTests): ('DELETED', 'DELETED', 'DELETED'), ))) + def test_contains_value(self): + self.assertTrue('PUBLISHED' in self.STATUS) + self.assertTrue('DRAFT' in self.STATUS) + # This should be True, because both the display value + # and the internal representation are both DELETED. + self.assertTrue('DELETED' in self.STATUS) + + def test_doesnt_contain_value(self): + self.assertFalse('UNPUBLISHED' in self.STATUS) + + def test_doesnt_contain_display_value(self): + self.assertFalse('is draft' in self.STATUS) + class IdentifierChoicesTests(ChoicesTests): @@ -301,6 +320,19 @@ class IdentifierChoicesTests(ChoicesTests): (2, 'DELETED', 'is deleted'), ))) + def test_contains_value(self): + self.assertTrue(0 in self.STATUS) + self.assertTrue(1 in self.STATUS) + self.assertTrue(2 in self.STATUS) + + def test_doesnt_contain_value(self): + self.assertFalse(3 in self.STATUS) + + def test_doesnt_contain_display_value(self): + self.assertFalse('is draft' in self.STATUS) + + def test_doesnt_contain_python_attr(self): + self.assertFalse('PUBLISHED' in self.STATUS) class InheritanceManagerTests(TestCase): def setUp(self):