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)
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')
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 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)