Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2013-06-14 20:13:23 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2013-06-14 20:13:23 (GMT)
commite0f35025b507469deb6d7caf633f09508de46eb0 (patch)
treeb36cecdb60233f9687515358036e1e9c40d2a399
parent3a2deef661a6df790826fa345b22a6e5e2bf6118 (diff)
Fix failig on not passed new properties
-rw-r--r--sugar_network/db/directory.py9
-rwxr-xr-xtests/units/db/volume.py31
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,