def test_validate_listof(self): """ If an explicit subtype is provided, its validation is used. """ comp = ComputedValue(lambda m: NotImplemented, ListOf()) comp.validate([u'foo', u'bar']) self.assertRaises(ValidationError, comp.validate, u'this is not a list') self.assertRaises(ValidationError, comp.validate, ['a', 2]) self.assertRaises(ValidationError, comp.validate, [1, 2])
class ComputedValueModel(Model): """ Toy model for ComputedValue tests. """ a = Integer() b = Unicode() c = ListOf(Unicode()) a_with_b = ComputedValue(lambda m: u"%s::%s" % (m.a, m.b), Unicode(index=True)) b_with_a = ComputedValue(lambda m: u"%s::%s" % (m.b, m.a), Unicode()) a_with_c = ComputedValue(lambda m: [u"%s::%s" % (m.a, c) for c in m.c], ListOf(Unicode(), index=True))
def test_validate_default_unicode(self): """ By default, a ComputedValue field has a Unicode value. """ comp = ComputedValue(lambda m: NotImplemented) comp.validate(u"") comp.validate(u"a") comp.validate(u"æ") comp.validate(u"foé") self.assertRaises(ValidationError, comp.validate, "") self.assertRaises(ValidationError, comp.validate, "foo") self.assertRaises(ValidationError, comp.validate, 3)