class CachingBackendTests(unittest.TestCase): def setUp(self) -> None: self.dummy_backend = DummyStorageBackend() self.caching_backend = CachingBackend(self.dummy_backend) self.identifier = 'foo' self.testdata = 'foodata' self.alternative_testdata = 'atadoof' def test_put_and_get_normal(self) -> None: # first put the data self.caching_backend.put(self.identifier, self.testdata) # then retrieve it again data = self.caching_backend.get(self.identifier) self.assertEqual(data, self.testdata) data = self.caching_backend.get(self.identifier) self.assertEqual(data, self.testdata) self.assertEqual(1, self.dummy_backend.times_put_called) self.assertEqual(0, self.dummy_backend.times_get_called) def test_put_not_cached_existing_no_overwrite(self) -> None: self.dummy_backend.stored_items[self.identifier] = self.testdata with self.assertRaises(FileExistsError): self.caching_backend.put(self.identifier, self.alternative_testdata) self.caching_backend.get(self.identifier) data = self.caching_backend.get(self.identifier) self.assertEqual(self.testdata, data) self.assertEqual(1, self.dummy_backend.times_get_called) def test_put_not_cached_existing_overwrite(self) -> None: self.dummy_backend.stored_items[self.identifier] = self.testdata self.caching_backend.put(self.identifier, self.alternative_testdata, overwrite=True) data = self.caching_backend.get(self.identifier) self.assertEqual(self.alternative_testdata, data) self.assertEqual(0, self.dummy_backend.times_get_called) def test_put_cached_existing_no_overwrite(self) -> None: self.caching_backend.put(self.identifier, self.testdata) with self.assertRaises(FileExistsError): self.caching_backend.put(self.identifier, self.alternative_testdata) self.caching_backend.get(self.identifier) data = self.caching_backend.get(self.identifier) self.assertEqual(self.testdata, data) self.assertEqual(0, self.dummy_backend.times_get_called) def test_put_cached_existing_overwrite(self) -> None: self.caching_backend.put(self.identifier, self.testdata) self.caching_backend.put(self.identifier, self.alternative_testdata, overwrite=True) data = self.caching_backend.get(self.identifier) self.assertEqual(self.alternative_testdata, data) self.assertEqual(0, self.dummy_backend.times_get_called) def test_exists_cached(self) -> None: name = 'test_exists_cached' self.caching_backend.put(name, self.testdata) self.assertTrue(self.caching_backend.exists(name)) def test_exists_not_cached(self) -> None: name = 'test_exists_not_cached' self.dummy_backend.put(name, self.testdata) self.assertTrue(self.caching_backend.exists(name)) def test_exists_not(self) -> None: self.assertFalse(self.caching_backend.exists('test_exists_not')) def test_get_not_existing(self) -> None: name = 'test_get_not_existing' with self.assertRaises(FileNotFoundError): self.caching_backend.get(name)