class DatastoreDictPersistTests(GaeTestCase):
    def setUp(self):
        super(DatastoreDictPersistTests, self).setUp()
        self.datastore_dict = DatastoreDict(model=DatastoreDictModel)

    def test_creates_datastore_entity(self):
        self.datastore_dict.persist('key', 'value')
        entity = build_key(DatastoreDictModel, 'key').get()
        self.assertEqual(entity.key.id(), 'key')
        self.assertEqual(entity.value, 'value')

    def test_updates_existing_entity(self):
        self.datastore_dict.persist('key', 'value')
        self.datastore_dict.persist('key', 'new_value')
        entity = build_key(DatastoreDictModel, 'key').get()
        self.assertEqual(entity.key.id(), 'key')
        self.assertEqual(entity.value, 'new_value')

    def test_updates_cache_value(self):
        cache_val = self.datastore_dict.last_updated()
        self.assertEqual(cache_val, 1)

        self.datastore_dict.persist('key', 'value')

        cache_val = self.datastore_dict.last_updated()
        self.assertEqual(cache_val, 2)
    def test_init_new_dict_does_not_invalidate_cache(self):
        new_dict = DatastoreDict(model=DatastoreDictModel)
        new_dict.persist('key', 'value')
        old_cache_val = memcache.get(new_dict.cache_key)

        new_dict = DatastoreDict(model=DatastoreDictModel)
        new_cache_val = memcache.get(new_dict.cache_key)
        self.assertEqual(old_cache_val, new_cache_val)

        self.assertEquals(new_dict.last_synced, old_cache_val)
        self.assertEquals(new_dict.last_synced, new_cache_val)
class LastUpdatedTests(GaeTestCase):

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

    def test_returns_initial_value_if_no_updates(self):
        value = self.datastore_dict.last_updated()
        self.assertEquals(value, 1)

    def test_returns_intial_value_if_no_cache_key(self):
        memcache.delete(self.datastore_dict.cache_key)
        value = self.datastore_dict.last_updated()
        self.assertEquals(value, 1)
class DatastoreDictDepersistTests(GaeTestCase):
    def setUp(self):
        super(DatastoreDictDepersistTests, self).setUp()
        self.datastore_dict = DatastoreDict(model=DatastoreDictModel)

    def test_does_not_raise_when_missing_key(self):
        self.datastore_dict.depersist('key')

    def test_removes_key(self):
        self.datastore_dict.persist('key', 'value')
        self.datastore_dict.depersist('key')
        entity = build_key(DatastoreDictModel, 'key').get()
        self.assertIsNone(entity)

    def test_updates_cache_value(self):
        self.datastore_dict.persist('key', 'value')
        old_cache_val = memcache.get(self.datastore_dict.cache_key)

        self.datastore_dict.depersist('key')

        new_cache_val = memcache.get(self.datastore_dict.cache_key)
        self.assertEqual(new_cache_val, old_cache_val + 1)
class TouchLastUpdatedTests(GaeTestCase):

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

    def test_increments_last_updated(self):
        old_value = self.datastore_dict.last_updated()
        self.datastore_dict.touch_last_updated()
        new_value = self.datastore_dict.last_updated()
        self.assertEquals(new_value, old_value + 1)

    def test_uses_last_synced_if_no_cache_key(self):
        old_value = self.datastore_dict.last_updated()
        memcache.delete(self.datastore_dict.cache_key)
        self.datastore_dict.touch_last_updated()
        new_value = self.datastore_dict.last_updated()
        self.assertEquals(new_value, old_value + 1)
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'})
 def setUp(self):
     super(DatastoreDictDepersistTests, self).setUp()
     self.datastore_dict = DatastoreDict(model=DatastoreDictModel)
    def test_init_new_dict_copies_existing_values(self):
        new_dict = DatastoreDict(model=DatastoreDictModel)
        new_dict.persist('key', 'value')

        new_dict = DatastoreDict(model=DatastoreDictModel)
        self.assertEqual(new_dict['key'], 'value')
 def setUp(self):
     super(TouchLastUpdatedTests, self).setUp()
     self.datastore_dict = DatastoreDict(model=DatastoreDictModel)
 def setUp(self):
     super(PopTests, self).setUp()
     self.datastore_dict = DatastoreDict(model=DatastoreDictModel)
     self.datastore_dict.persist('key', 'value')
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(), {})
 def setUp(self):
     super(SetDefaultTests, self).setUp()
     self.datastore_dict = DatastoreDict(model=DatastoreDictModel)
class SetDefaultTests(GaeTestCase):

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

    def test_does_not_touch_last_updated_if_key_exists(self):
        self.datastore_dict.persist('key', 'value')

        old_cache_val = self.datastore_dict.last_updated()

        self.datastore_dict._setdefault('key', 'new_value')

        new_cache_val = self.datastore_dict.last_updated()
        self.assertEqual(old_cache_val, new_cache_val)

    def test_updates_last_updated_on_create(self):
        old_cache_val = self.datastore_dict.last_updated()

        self.datastore_dict._setdefault('key', 'value')

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

    def test_creates_new_entity(self):
        self.datastore_dict._setdefault('key', 'value')

        entity = build_key(DatastoreDictModel, 'key').get()

        self.assertEqual(entity.key.id(), 'key')
        self.assertEqual(entity.value, 'value')
 def setUp(self):
     super(DurablesTests, self).setUp()
     self.datastore_dict = DatastoreDict(model=DatastoreDictModel)