diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2013-06-14 20:13:23 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2013-06-14 20:13:23 (GMT) |
commit | e0f35025b507469deb6d7caf633f09508de46eb0 (patch) | |
tree | b36cecdb60233f9687515358036e1e9c40d2a399 | |
parent | 3a2deef661a6df790826fa345b22a6e5e2bf6118 (diff) |
Fix failig on not passed new properties
-rw-r--r-- | sugar_network/db/directory.py | 9 | ||||
-rwxr-xr-x | tests/units/db/volume.py | 31 |
2 files changed, 34 insertions, 6 deletions
diff --git a/sugar_network/db/directory.py b/sugar_network/db/directory.py index a4f446e..52f12ef 100644 --- a/sugar_network/db/directory.py +++ b/sugar_network/db/directory.py @@ -343,10 +343,11 @@ class Directory(object): record.set(name, seqno=seqno, **value) elif isinstance(prop, StoredProperty): if value is None: - if existed: - meta = record.get(name) - if meta is not None: - value = meta['value'] + enforce(existed or prop.default is not None, + 'Value is not specified for %r property', name) + meta = record.get(name) + if meta is not None: + value = meta['value'] changes[name] = prop.default if value is None else value else: if prop.localized: diff --git a/tests/units/db/volume.py b/tests/units/db/volume.py index 9d65c6d..b06c15a 100755 --- a/tests/units/db/volume.py +++ b/tests/units/db/volume.py @@ -43,10 +43,12 @@ class VolumeTest(tests.Test): return value self.volume = db.Volume(tests.tmpdir, [Document]) - guid = self.call('POST', document='document', content={}) + self.assertRaises(RuntimeError, self.call, 'POST', document='document', content={}) + + guid = self.call('POST', document='document', content={'wo_default': 'wo_default'}) self.assertEqual('default', self.call('GET', document='document', guid=guid, prop='w_default')) - self.assertEqual(None, self.call('GET', document='document', guid=guid, prop='wo_default')) + self.assertEqual('wo_default', self.call('GET', document='document', guid=guid, prop='wo_default')) self.assertEqual('not_stored_default', self.call('GET', document='document', guid=guid, prop='not_stored_default')) def test_Populate(self): @@ -1045,6 +1047,31 @@ class VolumeTest(tests.Test): 'default', self.call('GET', document='testdocument', guid=guid, prop='prop')) + def test_PopulateNonDefualtPropsInSetters(self): + + class TestDocument(db.Document): + + @db.indexed_property(slot=1) + def prop1(self, value): + return value + + @db.indexed_property(slot=2, default='default') + def prop2(self, value): + return all + + @prop2.setter + def prop2(self, value): + if value != 'default': + self['prop1'] = value + return value + + self.volume = db.Volume(tests.tmpdir, [TestDocument]) + + self.assertRaises(RuntimeError, self.call, 'POST', document='testdocument', content={}) + + guid = self.call('POST', document='testdocument', content={'prop2': 'value2'}) + self.assertEqual('value2', self.call('GET', document='testdocument', guid=guid, prop='prop1')) + def call(self, method, document=None, guid=None, prop=None, accept_language=None, content=None, content_stream=None, content_type=None, if_modified_since=None, static_prefix=None, |