Skip to content

Commit

Permalink
Reorganize tests, increase coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
mbourqui committed May 18, 2017
1 parent af9a1a8 commit 25f3dd2
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 28 deletions.
5 changes: 5 additions & 0 deletions echoices/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ class EChoice(Enum, metaclass=EChoiceMeta):
Interface differs slightly from the Enum:
`EChoice.value` returns the actual value to be stored in the DB, while the legacy `Enum.value`
would return the whole tuple used when defining the enumeration item.
Raises
------
AttributeError
in case of duplicated values
See Also
--------
Expand Down
106 changes: 78 additions & 28 deletions echoices/tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,31 @@


class EChoiceTest(TestCase):
def test_echoices(self):
self.assertEqual(ETestCharChoices.values(), ('u', 'v'))
self.assertEqual(ETestCharChoices.max_value_length(), 1)
self.assertEqual(ETestCharChoices.choices(), (('u', 'Label 1'), ('v', 'Label 2')))
def test_label(self):
self.assertEqual(ETestCharChoices.FIELD1.label, 'Label 1')
self.assertEqual(ETestStrChoices.FIELD1.label, 'Label 1')
self.assertEqual(ETestIntChoices.FIELD1.label, 'Label 1')

def test_values(self):
self.assertEqual(ETestCharChoices.values(), ('u', 'v'))
self.assertEqual(ETestStrChoices.values(), ('value1', 'value2'))
self.assertEqual(ETestIntChoices.values(), (10, 20))

def test_maxvaluelength(self):
self.assertEqual(ETestCharChoices.max_value_length(), 1)
self.assertEqual(ETestStrChoices.max_value_length(), 6)
self.assertEqual(ETestStrChoices.choices(), (('value1', 'Label 1'), ('value2', 'Label 2')))
self.assertEqual(ETestStrChoices.FIELD1.label, 'Label 1')
self.assertIs(ETestStrChoices.from_value('value1'), ETestStrChoices.FIELD1)
self.assertRaises(KeyError, ETestStrChoices.from_value, 'foobar')

self.assertEqual(ETestIntChoices.values(), (10, 20))
def test_choices(self):
self.assertEqual(ETestCharChoices.choices(), (('u', 'Label 1'), ('v', 'Label 2')))
self.assertEqual(ETestStrChoices.choices(), (('value1', 'Label 1'), ('value2', 'Label 2')))
self.assertEqual(ETestIntChoices.choices(), ((10, 'Label 1'), (20, 'Label 2')))
self.assertEqual(ETestIntChoices.FIELD1.label, 'Label 1')

def test_fromvalue(self):
self.assertIs(ETestCharChoices.from_value('u'), ETestCharChoices.FIELD1)
self.assertIs(ETestStrChoices.from_value('value1'), ETestStrChoices.FIELD1)
self.assertIs(ETestIntChoices.from_value(10), ETestIntChoices.FIELD1)
self.assertRaises(KeyError, ETestCharChoices.from_value, 'a')
self.assertRaises(KeyError, ETestStrChoices.from_value, 'foobar')
self.assertRaises(KeyError, ETestIntChoices.from_value, -66)

def test_getitem(self):
Expand All @@ -43,9 +51,18 @@ def test_getitem(self):

def test_get(self):
self.assertIs(ETestCharChoices.get('u'), ETestCharChoices.FIELD1)
self.assertIs(ETestCharChoices.get('a'), None)
self.assertIs(ETestCharChoices.get('a'), None)
self.assertIs(ETestCharChoices.get('a', default=False), False)
self.assertIsNone(ETestCharChoices.get('a'))
self.assertTrue(ETestCharChoices.get('a', default=True))

def test_duplicate_value(self):
def init_duplicated():
from echoices.enums import EChoice

class EDuplicatedChoices(EChoice):
FIELD1 = ('u', 'Label 1')
FIELD2 = ('u', 'Label 2')

self.assertRaises(AttributeError, init_duplicated)

def test_create_empty_instances(self):
TestCharChoicesModel.objects.create()
Expand All @@ -54,22 +71,34 @@ def test_create_empty_instances(self):


class EOrderedChoiceTest(TestCase):
def test_echoices(self):
def test_label(self):
self.assertEqual(ETestCharOrderedChoices.FIELD1.label, 'Label 1')
self.assertEqual(ETestStrOrderedChoices.FIELD1.label, 'Label 1')
self.assertEqual(ETestIntOrderedChoices.FIELD1.label, 'Label 1')

def test_values(self):
self.assertEqual(ETestCharOrderedChoices.values(), ('w', 'u', 'v'))
self.assertEqual(ETestStrOrderedChoices.values(), ('value3', 'value1', 'value2'))
self.assertEqual(ETestIntOrderedChoices.values(), (30, 10, 20))

def test_maxvaluelength(self):
self.assertEqual(ETestCharOrderedChoices.max_value_length(), 1)
self.assertEqual(ETestStrOrderedChoices.max_value_length(), 6)

def test_fromvalue(self):
self.assertIs(ETestCharOrderedChoices.from_value('v'), ETestCharOrderedChoices.FIELD3)
self.assertIs(ETestStrOrderedChoices.from_value('value2'), ETestStrOrderedChoices.FIELD3)
self.assertIs(ETestIntOrderedChoices.from_value(20), ETestIntOrderedChoices.FIELD3)

def test_choices(self):
self.assertEqual(ETestCharOrderedChoices.choices(), (('w', 'Label 1'), ('u', 'Label 2'), ('v', 'Label 3')))
self.assertEqual(ETestCharOrderedChoices.choices('sorted'),
(('u', 'Label 2'), ('v', 'Label 3'), ('w', 'Label 1')))
self.assertEqual(ETestCharOrderedChoices.choices('reverse'),
(('w', 'Label 1'), ('v', 'Label 3'), ('u', 'Label 2')))
self.assertEqual(ETestCharOrderedChoices.choices('natural'), ETestCharOrderedChoices.choices())
self.assertRaises(AssertionError, ETestCharOrderedChoices.choices, 'foobar')
self.assertEqual(ETestCharOrderedChoices.FIELD1.label, 'Label 1')
self.assertIs(ETestCharOrderedChoices.from_value('v'), ETestCharOrderedChoices.FIELD3)
self.assertTrue(ETestCharOrderedChoices.FIELD1 > ETestCharOrderedChoices.FIELD2)

self.assertEqual(ETestStrOrderedChoices.values(), ('value3', 'value1', 'value2'))
self.assertEqual(ETestStrOrderedChoices.max_value_length(), 6)
self.assertEqual(ETestStrOrderedChoices.choices(),
(('value3', 'Label 1'), ('value1', 'Label 2'), ('value2', 'Label 3')))
self.assertEqual(ETestStrOrderedChoices.choices('sorted'),
Expand All @@ -80,19 +109,27 @@ def test_echoices(self):
(('value3', 'Label 1'), ('value1', 'Label 2'), ('value2', 'Label 3')))
self.assertEqual(ETestStrOrderedChoices.choices('natural'), ETestStrOrderedChoices.choices())
self.assertRaises(AssertionError, ETestCharOrderedChoices.choices, 'foobar')
self.assertEqual(ETestStrOrderedChoices.FIELD1.label, 'Label 1')
self.assertIs(ETestStrOrderedChoices.from_value('value2'), ETestStrOrderedChoices.FIELD3)
self.assertTrue(ETestStrOrderedChoices.FIELD1 > ETestStrOrderedChoices.FIELD2)

self.assertEqual(ETestIntOrderedChoices.values(), (30, 10, 20))
self.assertEqual(ETestIntOrderedChoices.choices(), ((30, 'Label 1'), (10, 'Label 2'), (20, 'Label 3')))
self.assertEqual(ETestIntOrderedChoices.choices('sorted'), ((10, 'Label 2'), (20, 'Label 3'), (30, 'Label 1')))
self.assertEqual(ETestIntOrderedChoices.choices('reverse'), ((30, 'Label 1'), (20, 'Label 3'), (10, 'Label 2')))
self.assertEqual(ETestIntOrderedChoices.choices('natural'), ((30, 'Label 1'), (10, 'Label 2'), (20, 'Label 3')))
self.assertEqual(ETestIntOrderedChoices.choices('natural'), ETestIntOrderedChoices.choices())
self.assertRaises(AssertionError, ETestIntOrderedChoices.choices, 'foobar')
self.assertEqual(ETestIntOrderedChoices.FIELD1.label, 'Label 1')
self.assertIs(ETestIntOrderedChoices.from_value(20), ETestIntOrderedChoices.FIELD3)

def test_getitem(self):
self.assertEqual(ETestCharOrderedChoices.__getitem__('u'), ETestCharOrderedChoices.FIELD2)
self.assertIs(ETestCharOrderedChoices['u'], ETestCharOrderedChoices.FIELD2)
self.assertRaises(KeyError, ETestCharOrderedChoices.__getitem__, 'a')

def test_get(self):
self.assertIs(ETestCharOrderedChoices.get('u'), ETestCharOrderedChoices.FIELD2)
self.assertIsNone(ETestCharOrderedChoices.get('a'))
self.assertTrue(ETestCharOrderedChoices.get('a', default=True))

def test_ordering(self):
self.assertTrue(ETestCharOrderedChoices.FIELD1 > ETestCharOrderedChoices.FIELD2)
self.assertTrue(ETestStrOrderedChoices.FIELD1 > ETestStrOrderedChoices.FIELD2)
self.assertTrue(ETestIntOrderedChoices.FIELD1 > ETestIntOrderedChoices.FIELD2)

def test_create_empty_instances(self):
Expand All @@ -102,16 +139,29 @@ def test_create_empty_instances(self):


class EAutoChoiceTest(TestCase):
def test_echoices(self):
def test_label(self):
self.assertEqual(ETestAutoChoices.FIELD1.label, 'Label 1')

def test_values(self):
self.assertEqual(ETestAutoChoices.values(), (1, 2, 3))

def test_fromvalue(self):
self.assertIs(ETestAutoChoices.from_value(2), ETestAutoChoices.FIELD2)

def test_get(self):
self.assertIs(ETestAutoChoices.get(2), ETestAutoChoices.FIELD2)
self.assertIsNone(ETestAutoChoices.get(4))
self.assertTrue(ETestAutoChoices.get(4, default=True))

def test_choices(self):
self.assertEqual(ETestAutoChoices.choices(), ((1, 'Label 1'), (2, 'Label 2'), (3, 'Label 3')))
self.assertEqual(ETestAutoChoices.choices('sorted'), ((1, 'Label 1'), (2, 'Label 2'), (3, 'Label 3')))
self.assertEqual(ETestAutoChoices.choices('reverse'), ((3, 'Label 3'), (2, 'Label 2'), (1, 'Label 1')))
self.assertEqual(ETestAutoChoices.choices('natural'), ((1, 'Label 1'), (2, 'Label 2'), (3, 'Label 3')))
self.assertEqual(ETestAutoChoices.choices('natural'), ETestAutoChoices.choices())
self.assertRaises(AssertionError, ETestAutoChoices.choices, 'foobar')
self.assertEqual(ETestAutoChoices.FIELD1.label, 'Label 1')
self.assertIs(ETestAutoChoices.from_value(2), ETestAutoChoices.FIELD2)

def test_ordering(self):
self.assertTrue(ETestAutoChoices.FIELD1 < ETestAutoChoices.FIELD2)
self.assertTrue(ETestAutoChoices.FIELD2 < ETestAutoChoices.FIELD3)

Expand Down

0 comments on commit 25f3dd2

Please sign in to comment.