summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ick2/persistent.py9
-rw-r--r--ick2/persistent_tests.py18
2 files changed, 27 insertions, 0 deletions
diff --git a/ick2/persistent.py b/ick2/persistent.py
index d865207..d323db7 100644
--- a/ick2/persistent.py
+++ b/ick2/persistent.py
@@ -45,6 +45,9 @@ class PersistentStateInterface: # pragma: no cover
def write_resource(self, token, kind, rid, resource):
raise NotImplementedError()
+ def update_resource(self, token, kind, rid, resource):
+ raise NotImplementedError()
+
def remove_resource(self, token, kind, rid):
raise NotImplementedError()
@@ -72,6 +75,9 @@ class MemoryPersistentState(PersistentStateInterface):
self._res[kind] = {}
self._res[kind][rid] = resource
+ def update_resource(self, token, kind, rid, resource):
+ self.write_resource(token, kind, rid, resource)
+
def remove_resource(self, token, kind, rid):
if kind not in self._res or rid not in self._res[kind]:
raise ick2.NotFound(kind=kind, rid=rid)
@@ -101,6 +107,9 @@ class MuckPersistentState(PersistentStateInterface):
self._res[kind] = {}
self._res[kind][rid] = resource
+ def update_resource(self, token, kind, rid, resource):
+ self.write_resource(token, kind, rid, resource)
+
def remove_resource(self, token, kind, rid):
if kind not in self._res or rid not in self._res[kind]:
raise ick2.NotFound(kind=kind, rid=rid)
diff --git a/ick2/persistent_tests.py b/ick2/persistent_tests.py
index 802ca8b..8406acf 100644
--- a/ick2/persistent_tests.py
+++ b/ick2/persistent_tests.py
@@ -49,6 +49,24 @@ class PersistentStateTestsMixIn:
self.assertTrue(isinstance(r2, ick2.Resource))
self.assertEqual(r.as_dict(), r2.as_dict())
+ def test_updates_resource(self):
+ as_dict = {'foo': 'bar'}
+ r = ick2.resource_from_dict(as_dict)
+
+ as_dict = {'foo': 'yo'}
+ r2 = ick2.resource_from_dict(as_dict)
+
+ token = self.get_token()
+ self.state.write_resource(token, 'silly', '#1', r)
+ self.state.update_resource(token, 'silly', '#1', r2)
+
+ self.assertTrue(self.state.has_resource(token, 'silly', '#1'))
+ self.assertEqual(self.state.get_resource_ids(token, 'silly'), ['#1'])
+
+ actual = self.state.get_resource(token, 'silly', '#1')
+ self.assertTrue(isinstance(actual, ick2.Resource))
+ self.assertEqual(actual.as_dict(), r2.as_dict())
+
def test_removes_resource(self):
as_dict = {'foo': 'bar'}
r = ick2.resource_from_dict(as_dict)