def test_permacache_should_return_data_from_db_if_data_source_barfs(self):
        def data_source_fetch_data(data_source):
            raise Exception()

        data_source = MockDataSource(self.Cache_key_of_prestored)
        data_returned_from_fetch_all = perma_cache(data_source_fetch_data)(data_source)

        key = db.Key.from_path("CachedData", self.Cache_key_of_prestored)
        data_from_database = CachedData.get(key).data
        data_from_database_rehydrated = json.loads(data_from_database)

        self.assertEquals(data_from_database_rehydrated, data_returned_from_fetch_all)
    def test_permacache_should_always_write_returned_data_to_db(self):
        def data_source_fetch_data(data_source):
            return [{'data': 1}, {'data': 2}]

        cache_key = '23421'
        data_source = MockDataSource(cache_key)
        data_returned_from_fetch_all = perma_cache(data_source_fetch_data)(data_source)

        key = db.Key.from_path("CachedData", cache_key)
        data_from_database = CachedData.get(key).data
        data_from_database_rehydrated = json.loads(data_from_database)
        self.assertEquals(data_from_database_rehydrated, data_returned_from_fetch_all)
    def test_permacache_should_return_data_from_db_if_data_source_barfs(self):
        def data_source_fetch_data(data_source):
            raise Exception()

        data_source = MockDataSource(self.Cache_key_of_prestored)
        data_returned_from_fetch_all = perma_cache(data_source_fetch_data)(
            data_source)

        key = db.Key.from_path("CachedData", self.Cache_key_of_prestored)
        data_from_database = CachedData.get(key).data
        data_from_database_rehydrated = json.loads(data_from_database)

        self.assertEquals(data_from_database_rehydrated,
                          data_returned_from_fetch_all)
    def test_permacache_should_always_write_returned_data_to_db(self):
        def data_source_fetch_data(data_source):
            return [{'data': 1}, {'data': 2}]

        cache_key = '23421'
        data_source = MockDataSource(cache_key)
        data_returned_from_fetch_all = perma_cache(data_source_fetch_data)(
            data_source)

        key = db.Key.from_path("CachedData", cache_key)
        data_from_database = CachedData.get(key).data
        data_from_database_rehydrated = json.loads(data_from_database)
        self.assertEquals(data_from_database_rehydrated,
                          data_returned_from_fetch_all)