class JSONRedisTest(TestCase): def setUp(self): self.r = JSONRedis(StrictRedis(db=15), encode=Cat.encode, decode=Cat.decode) self.r.flushdb() def test_oset_oget(self): cat = Cat('cat:0', 'Happy') self.r.oset('cat:0', cat) got_cat = self.r.oget('cat:0') self.assertIsInstance(got_cat, Cat) self.assertEqual(got_cat, cat) self.assertEqual(got_cat.instance_id, cat.instance_id) def test_oset_oget_caching_disabled(self): self.r.caching = False cat = Cat('cat:0', 'Happy') self.r.oset('cat:0', cat) got_cat = self.r.oget('cat:0') self.assertIsInstance(got_cat, Cat) self.assertEqual(got_cat, cat) self.assertNotEqual(got_cat.instance_id, cat.instance_id) def test_oget_object_destroyed(self): cat = Cat('cat:0', 'Happy') self.r.oset('cat:0', cat) destroyed_instance_id = cat.instance_id del cat got_cat = self.r.oget('cat:0') self.assertNotEqual(got_cat.instance_id, destroyed_instance_id) def test_oget_cache_empty(self): self.r.set('cat:0', json.dumps(Cat.encode(Cat('cat:0', 'Happy')))) got_cat = self.r.oget('cat:0') same_cat = self.r.oget('cat:0') self.assertEqual(same_cat, got_cat) self.assertEqual(same_cat.instance_id, got_cat.instance_id) def test_oget_cache_empty_caching_disabled(self): self.r.set('cat:0', json.dumps(Cat.encode(Cat('cat:0', 'Happy')))) self.r.caching = False got_cat = self.r.oget('cat:0') same_cat = self.r.oget('cat:0') self.assertEqual(same_cat, got_cat) self.assertNotEqual(same_cat.instance_id, got_cat.instance_id) def test_oget_key_nonexistant(self): self.assertIsNone(self.r.oget('foo')) def test_oget_value_not_json(self): self.r.set('not-json', 'not-json') with self.assertRaises(ResponseError): self.r.oget('not-json') def test_omget_omset(self): cats = {'cat:0': Cat('cat:0', 'Happy'), 'cat:1': Cat('cat:1', 'Grumpy')} self.r.omset(cats) got_cats = self.r.omget(cats.keys()) self.assertEqual(got_cats, list(cats.values()))