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(), {})