def test_hydrate(self): note = Note.objects.get(pk=1) bundle = Bundle(obj=note) # With no value, default or nullable, we should get an ``ApiFieldError``. field_1 = ApiField() field_1.instance_name = 'api' self.assertRaises(ApiFieldError, field_1.hydrate, bundle) # The default. field_2 = ApiField(default='foo') field_2.instance_name = 'api' self.assertEqual(field_2.hydrate(bundle), 'foo') # The callable default. def foo(): return 'bar' field_3 = ApiField(default=foo) field_3.instance_name = 'api' self.assertEqual(field_3.hydrate(bundle), 'bar') # The nullable case. field_4 = ApiField(null=True) field_4.instance_name = 'api' self.assertEqual(field_4.hydrate(bundle), None) # The readonly case. field_5 = ApiField(readonly=True) field_5.instance_name = 'api' bundle.data['api'] = 'abcdef' self.assertEqual(field_5.hydrate(bundle), None) # A real, live attribute! field_6 = ApiField(attribute='title') field_6.instance_name = 'api' bundle.data['api'] = note.title self.assertEqual(field_6.hydrate(bundle), u'First Post!') # Make sure it uses attribute when there's no data field_7 = ApiField(attribute='title') field_7.instance_name = 'notinbundle' self.assertEqual(field_7.hydrate(bundle), u'First Post!') # Make sure it falls back to instance name if there is no attribute field_8 = ApiField() field_8.instance_name = 'title' self.assertEqual(field_8.hydrate(bundle), u'First Post!') # Attribute & null regression test. # First, simulate data missing from the bundle & ``null=True``. field_9 = ApiField(attribute='notinbundle', null=True) field_9.instance_name = 'notinbundle' self.assertEqual(field_9.hydrate(bundle), None) # The do something in the bundle also with ``null=True``. field_10 = ApiField(attribute='title', null=True) field_10.instance_name = 'title' self.assertEqual(field_10.hydrate(bundle), u'First Post!') # The blank case. field_11 = ApiField(attribute='notinbundle', blank=True) field_11.instance_name = 'notinbundle' self.assertEqual(field_11.hydrate(bundle), None) bundle.data['title'] = note.title field_12 = ApiField(attribute='title', blank=True) field_12.instance_name = 'title' self.assertEqual(field_12.hydrate(bundle), u'First Post!')