class PopTests(GaeTestCase):

    def setUp(self):
        super(PopTests, self).setUp()
        self.datastore_dict = DatastoreDict(model=DatastoreDictModel)
        self.datastore_dict.persist('key', 'value')

    def test_KeyError_on_missing_key(self):
        with self.assertRaises(KeyError):
            self.datastore_dict._pop('missing-key')

    def test_returns_default_on_missing_key(self):
        value = self.datastore_dict._pop('missing-key', default='value')
        self.assertEquals(value, 'value')

    def test_returns_popped_value(self):
        value = self.datastore_dict._pop('key')
        self.assertEquals(value, 'value')

    def test_updates_last_updated_when_popped(self):
        old_cache_val = memcache.get(self.datastore_dict.cache_key)

        self.datastore_dict._pop('key')

        new_cache_val = memcache.get(self.datastore_dict.cache_key)
        self.assertEqual(old_cache_val + 1, new_cache_val)

    def test_removes_popped_value_from_dict(self):
        self.datastore_dict._pop('key')
        entity = build_key(DatastoreDictModel, 'key').get()
        self.assertIsNone(entity)
        self.assertEquals(self.datastore_dict.durables(), {})
class DurablesTests(GaeTestCase):

    def setUp(self):
        super(DurablesTests, self).setUp()
        self.datastore_dict = DatastoreDict(model=DatastoreDictModel)

    def test_returns_empty_dict_if_no_entities(self):
        self.assertEqual(self.datastore_dict.durables(), {})

    def test_returns_all_entities(self):
        self.datastore_dict.persist('key1', 'value')
        self.datastore_dict.persist('key2', 'value')
        self.datastore_dict.persist('key3', 'value')

        self.assertEqual(self.datastore_dict.durables(),
                         {'key1': 'value',
                          'key2': 'value',
                          'key3': 'value'})