def test_as_pairs(self): """ Representing an enumeration as a list of pairs. """ object1, object2, object3 = object(), object(), object() values = object_enum_values_fixture(object1, object2, object3) enum = ObjectEnum('doc', values) pairs = [(e.get('id', e.value), e.desc) for e in values] self.assertThat(enum.as_pairs(), Equals(pairs))
def test_find(self): """ Finding an enumeration item by extra value gets the first matching item or ``None`` if there are no matches. """ object1, object2, object3 = object(), object(), object() values = object_enum_values_fixture(object1, object2, object3) enum = ObjectEnum('doc', values) self.assertThat(enum.find(quux=u'hello'), Is(values[0])) self.assertThat(enum.find(frob=u'world'), Is(values[0])) self.assertThat(enum.find(quux=u'goodbye'), Is(values[1])) self.assertThat(enum.find(haha=u'nothanks'), Is(None))
def test_get(self): """ Getting an enumeration item by value returns the relevant `EnumItem` instance or raises `InvalidEnumItem` in the case where no item is represented by the given value. """ object1, object2, object3 = object(), object(), object() values = object_enum_values_fixture(object1, object2, object3) enum = ObjectEnum('doc', values) self.assertThat( values, Equals([enum.get(e.value) for e in values])) self.assertThat( lambda: enum.get(u'DOES_NOT_EXIST'), raises(InvalidEnumItem))
def test_find_all(self): """ Finding all enumeration items by extra value gets an iterable of all matching items. Passing fewer or more than one query raises `ValueError`. """ object1, object2, object3 = object(), object(), object() values = object_enum_values_fixture(object1, object2, object3) enum = ObjectEnum('doc', values) results = list(enum.find_all(frob=u'world')) self.assertThat( results, Equals([values[0], values[2]])) self.assertThat( enum.find_all(asdf=u'qwer'), After(list, Equals([])))
def test_extra(self): """ Extra parameters are retrieved by `EnumItem.get` if they exist otherwise a default value is returned instead. """ object1, object2, object3 = object(), object(), object() values = object_enum_values_fixture(object1, object2, object3) enum = ObjectEnum('doc', values) self.assertThat( enum.get(object1).get('quux'), Equals(u'hello')) self.assertThat( enum.get(object1).get('frob'), Equals(u'world')) self.assertThat( enum.get(object2).get('quux'), Equals(u'goodbye')) self.assertThat( enum.get(object2).get('boop'), Is(None)) self.assertThat( enum.get(object2).get('beep', 42), Equals(42))
def test_get_extra(self): """ Getting an enumeration item extra value by enumeration value returns the extra's value or a default value, defaulting to ``None``. """ object1, object2, object3 = object(), object(), object() values = object_enum_values_fixture(object1, object2, object3) enum = ObjectEnum('doc', values) self.assertThat( enum.extra(object1, 'quux'), Equals(u'hello')) self.assertThat( enum.extra(object1, 'frob'), Equals(u'world')) self.assertThat( enum.extra(object2, 'quux'), Equals(u'goodbye')) self.assertThat( enum.extra(u'bar', 'nope'), Is(None)) self.assertThat( enum.extra(u'bar', 'nope', u''), Equals(u''))