diff options
Diffstat (limited to 'muck/mem_tests.py')
-rw-r--r-- | muck/mem_tests.py | 226 |
1 files changed, 141 insertions, 85 deletions
diff --git a/muck/mem_tests.py b/muck/mem_tests.py index e858a33..6b7a069 100644 --- a/muck/mem_tests.py +++ b/muck/mem_tests.py @@ -20,119 +20,175 @@ import muck class MemoryStoreTests(unittest.TestCase): - def test_is_initially_empty(self): - ms = muck.MemoryStore() - self.assertEqual(len(ms), 0) - self.assertEqual(ms.as_dict(), {}) - - def test_creates_resource(self): - meta = { + def setUp(self): + self.ms = muck.MemoryStore() + self.meta1 = { 'id': 'id-1', 'rev': 'rev-1', } - - res = { + self.res1 = { 'foo': 'bar', } - chg = muck.CreateChange(meta=meta, res=res) - ms = muck.MemoryStore() - ms.change(chg) - self.assertEqual(len(ms), 1) + def test_is_initially_empty(self): + self.assertEqual(len(self.ms), 0) + self.assertEqual(self.ms.as_dict(), {}) + self.assertFalse('foo' in self.ms) + + def test_creates_resource(self): + chg = muck.CreateChange(meta=self.meta1, res=self.res1) + self.ms.change(chg) + + rid = self.meta1['id'] + self.assertEqual(len(self.ms), 1) + self.assertTrue(rid in self.ms) + self.assertEqual(self.ms[rid], (self.meta1, self.res1)) self.assertEqual( - ms.as_dict(), + self.ms.as_dict(), { - 'id-1': (meta, res), + rid: (self.meta1, self.res1), }) def test_wont_create_resource_with_conflicting_id(self): - meta = { - 'id': 'id-1', - 'rev': 'rev-1', - } - - res = { - 'foo': 'bar', - } - - chg = muck.CreateChange(meta=meta, res=res) - ms = muck.MemoryStore() - ms.change(chg) + chg = muck.CreateChange(meta=self.meta1, res=self.res1) + self.ms.change(chg) with self.assertRaises(muck.Error): - ms.change(chg) + self.ms.change(chg) def test_updates_resource(self): - meta_1 = { - 'id': 'id-1', - 'rev': 'rev-1', - } + meta2 = dict(self.meta1) + meta2['rev'] = 'rev-2' - res_v1 = { - 'foo': 'bar', - } - - meta_2 = dict(meta_1) - meta_2['rev'] = 'rev-2' + res2 = dict(self.res1) + res2['foo'] = 'yo' - res_v2 = dict(res_v1) - res_v2['foo'] = 'yo' + create = muck.CreateChange(meta=self.meta1, res=self.res1) + update = muck.UpdateChange(meta=meta2, res=res2) - create = muck.CreateChange(meta=meta_1, res=res_v1) - update = muck.UpdateChange(meta=meta_2, res=res_v2) + rid = self.meta1['id'] - ms = muck.MemoryStore() - ms.change(create) - ms.change(update) - self.assertEqual(len(ms), 1) + self.ms.change(create) + self.ms.change(update) + self.assertEqual(len(self.ms), 1) self.assertEqual( - ms.as_dict(), + self.ms.as_dict(), { - 'id-1': (meta_2, res_v2), + rid: (meta2, res2), }) def test_refuses_to_update_resource_that_didnt_exist(self): - meta = { - 'id': 'id-1', - 'rev': 'rev-1', - } - - res = { - 'foo': 'bar', - } - - update = muck.UpdateChange(meta=meta, res=res) - - ms = muck.MemoryStore() + update = muck.UpdateChange(meta=self.meta1, res=self.res1) with self.assertRaises(muck.Error): - ms.change(update) + self.ms.change(update) def test_deletes_resource(self): - meta = { - 'id': 'id-1', - 'rev': 'rev-1', - } - - res = { - 'foo': 'bar', - } - - create = muck.CreateChange(meta=meta, res=res) - delete = muck.DeleteChange(meta=meta) + create = muck.CreateChange(meta=self.meta1, res=self.res1) + delete = muck.DeleteChange(meta=self.meta1) - ms = muck.MemoryStore() - ms.change(create) - ms.change(delete) - self.assertEqual(len(ms), 0) - self.assertEqual(ms.as_dict(), {}) + self.ms.change(create) + self.ms.change(delete) + self.assertEqual(len(self.ms), 0) + self.assertEqual(self.ms.as_dict(), {}) def test_refuses_to_delete_resource_that_doesnt_exist(self): - meta = { - 'id': 'id-1', - 'rev': 'rev-1', - } + delete = muck.DeleteChange(meta=self.meta1) + with self.assertRaises(muck.Error): + self.ms.change(delete) - delete = muck.DeleteChange(meta=meta) + def test_finds_nothing_for_impossible_condition(self): + chg = muck.CreateChange(meta=self.meta1, res=self.res1) + self.ms.change(chg) - ms = muck.MemoryStore() - with self.assertRaises(muck.Error): - ms.change(delete) + cond = [ + { + 'where': 'meta', + 'field': 'id', + 'pattern': 'does-not-exist', + 'op': '==', + }, + ] + hits = self.ms.search(cond) + self.assertEqual(hits, []) + + def test_finds_matching_resources_in_meta(self): + chg = muck.CreateChange(meta=self.meta1, res=self.res1) + self.ms.change(chg) + + rid = self.meta1['id'] + cond = [ + { + 'where': 'meta', + 'field': 'id', + 'pattern': rid, + 'op': '==', + }, + ] + hits = self.ms.search(cond) + self.assertEqual(hits, [rid]) + + def test_finds_matching_resources_in_data(self): + chg = muck.CreateChange(meta=self.meta1, res=self.res1) + self.ms.change(chg) + + rid = self.meta1['id'] + cond = [ + { + 'where': 'data', + 'field': 'foo', + 'pattern': self.res1['foo'], + 'op': '==', + }, + ] + hits = self.ms.search(cond) + self.assertEqual(hits, [rid]) + + def test_finds_matches_in_list(self): + self.res1['foo'] = ['bar', 'yo'] + chg = muck.CreateChange(meta=self.meta1, res=self.res1) + self.ms.change(chg) + + rid = self.meta1['id'] + cond = [ + { + 'where': 'data', + 'field': 'foo', + 'pattern': 'yo', + 'op': '==', + }, + ] + hits = self.ms.search(cond) + self.assertEqual(hits, [rid]) + + def test_finds_ge(self): + self.res1['foo'] = ['bar', 'yo'] + chg = muck.CreateChange(meta=self.meta1, res=self.res1) + self.ms.change(chg) + + rid = self.meta1['id'] + cond = [ + { + 'where': 'data', + 'field': 'foo', + 'pattern': 'yo', + 'op': '>=', + }, + ] + hits = self.ms.search(cond) + self.assertEqual(hits, [rid]) + + def test_finds_le(self): + self.res1['foo'] = ['bar', 'yo'] + chg = muck.CreateChange(meta=self.meta1, res=self.res1) + self.ms.change(chg) + + rid = self.meta1['id'] + cond = [ + { + 'where': 'data', + 'field': 'foo', + 'pattern': 'bar', + 'op': '<=', + }, + ] + hits = self.ms.search(cond) + self.assertEqual(hits, [rid]) |