Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2533)

Unified Diff: appengine/findit/model/test/versioned_model_test.py

Issue 2345093002: [Findit] Extending versioned_model.py to support versioning multiple entities of the same class. (Closed)
Patch Set: clean up Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: appengine/findit/model/test/versioned_model_test.py
diff --git a/appengine/findit/model/test/versioned_model_test.py b/appengine/findit/model/test/versioned_model_test.py
index cfe40a964c9d464f3560c13d179b607a3ce89958..8ff35d9b9d8a39c1756f3092e7117fa0dbeab56a 100644
--- a/appengine/findit/model/test/versioned_model_test.py
+++ b/appengine/findit/model/test/versioned_model_test.py
@@ -23,12 +23,15 @@ class VersionedModelTest(testing.AppengineTestCase):
self.assertEqual(3, root_model_class(current=3).current)
def testDefaultVersionIsZero(self):
- entity = _Entity()
- self.assertEqual(0, entity.version)
+ self.assertEqual(0, _Entity().version)
+ self.assertEqual(0, _Entity.Create('m1').version)
- def testGetMostRecentVersionWhenNoData(self):
- entity = _Entity.GetVersion()
- self.assertIsNone(entity)
+ def testRootId(self):
+ self.assertIsNone(_Entity()._root_id)
+ self.assertEqual(1, _Entity(key=ndb.Key('_Entity', 1))._root_id)
+ self.assertEqual('m1', _Entity(key=ndb.Key('_Entity', 'm1'))._root_id)
+ self.assertEqual(
+ 'm1', _Entity(key=ndb.Key('_EntityRoot', 'm1', '_Entity', 1))._root_id)
def testGetMostRecentVersionWhenDataExists(self):
root_key = ndb.Key('_EntityRoot', 1)
@@ -40,41 +43,79 @@ class VersionedModelTest(testing.AppengineTestCase):
self.assertEqual(2, entity.version)
self.assertEqual(2, entity.value)
+ def testGetMostRecentVersionWhenNoData(self):
+ self.assertIsNone(_Entity.GetVersion())
+ self.assertIsNone(_Entity.Create('m1').GetVersion())
stgao 2016/09/24 01:43:11 Why testing instance.GetVersion?
lijeffrey 2016/09/24 06:13:14 oops this was supposed to be _Entity.GetVersion('m
+
+ def testCreate(self):
+ self.assertEqual(_Entity(key=ndb.Key('_EntityRoot', 'm1', '_Entity', 0)),
+ _Entity.Create('m1'))
+
def testGetNextVersionWhenDataExists(self):
root_key = ndb.Key('_EntityRoot', 1)
_Entity._GetRootModel()(key=root_key, current=2).put()
_Entity(key=ndb.Key('_Entity', 1, parent=root_key), value=1).put()
_Entity(key=ndb.Key('_Entity', 2, parent=root_key), value=2).put()
- entity = _Entity.GetVersion(2)
+ entity = _Entity.GetVersion(version=2)
self.assertEqual(2, entity.version)
self.assertEqual(2, entity.value)
- self.assertIsNone(_Entity.GetVersion(0))
- self.assertIsNone(_Entity.GetVersion(3))
+ self.assertIsNone(_Entity.GetVersion(version=0))
+ self.assertIsNone(_Entity.GetVersion(version=3))
def testGetLatestVersionNumber(self):
root_key = ndb.Key('_EntityRoot', 1)
_Entity._GetRootModel()(key=root_key, current=1).put()
_Entity(key=ndb.Key('_Entity', 1, parent=root_key), value=2).put()
-
self.assertEqual(1, _Entity.GetLatestVersionNumber())
+ def testGetVersionForEntitWithKeyId(self):
stgao 2016/09/24 01:43:11 typo: Entit -> Entity
lijeffrey 2016/09/24 06:13:14 Done.
+ entity = _Entity.Create('m1')
+ entity.value = 1
+ entity.Save()
+ entity.value = 2
+ entity.Save()
+ self.assertEqual(2, _Entity.GetVersion('m1').version)
+ self.assertEqual(2, _Entity.GetVersion('m1').value)
+ self.assertIsNone(_Entity.GetVersion('m1', version=0))
+ self.assertIsNone(_Entity.GetVersion('m1', version=3))
+
def testGetLatestVersionNumberWhenNoRecordYet(self):
self.assertEqual(-1, _Entity.GetLatestVersionNumber())
+ self.assertEqual(-1, _Entity.GetLatestVersionNumber('m1'))
def testSaveNewVersion(self):
entity = _Entity()
entity.value = 1
- key = entity.Save()
+ key, saved = entity.Save()
expected_key = ndb.Key('_EntityRoot', 1, '_Entity', 1)
self.assertEqual(expected_key, key)
+ self.assertTrue(saved)
entity = _Entity.GetVersion()
self.assertEqual(1, entity.version)
self.assertEqual(1, entity.value)
- def testSaveNewVersionAlreadyExist(self):
+ def testSaveEntityWithRootId(self):
+ entity = _Entity.Create('m1')
+ entity.value = 1
+ entity.Save()
+ entity.value = 3
+ entity.Save()
+
+ self.assertEqual(entity.version, 2)
+ self.assertEqual(entity.value, 3)
+
+ def testSaveNewVersionOfEntityWithKeyId(self):
+ entity = _Entity.Create('m1')
+ entity.value = 1
+ key, saved = entity.Save()
+ expected_key = ndb.Key('_EntityRoot', 'm1', '_Entity', 1)
+ self.assertEqual(expected_key, key)
+ self.assertTrue(saved)
+
+ def testSaveNewVersionWithConflictRetry(self):
original_ndb_transaction = ndb.transaction
def MockNdbTransaction(func, **options):
@@ -84,9 +125,42 @@ class VersionedModelTest(testing.AppengineTestCase):
self.mock(ndb, 'transaction', MockNdbTransaction)
entity = _Entity()
- key = entity.Save()
+ key, saved = entity.Save()
expected_key = ndb.Key('_EntityRoot', 1, '_Entity', 3)
self.assertEqual(expected_key, key)
+ self.assertTrue(saved)
+
+ def testSaveNewVersionWithConflictBeforeTransactionNoRetry(self):
+ original_ndb_transaction = ndb.transaction
+
+ def MockNdbTransaction(func, **options):
+ # To simulate another transaction occuring before this one, write a new
+ # version first before the transaction is called.
+ _Entity(key=ndb.Key('_EntityRoot', 1, '_Entity', 1), value=1).put()
+ return original_ndb_transaction(func, **options)
+ self.mock(ndb, 'transaction', MockNdbTransaction)
+
+ entity = _Entity()
+ key, saved = entity.Save(retry_on_conflict=False)
+ expected_key = ndb.Key('_EntityRoot', 1, '_Entity', 1)
+ self.assertEqual(expected_key, key)
+ self.assertFalse(saved)
+
+ def testSaveNewVersionConflictBeforeSaving(self):
+ original_save = VersionedModel.Save
+
+ def MockSave(*args, **kwargs):
+ # Smulate another transaction beating this call to Save() to creating a
+ # new entity.
+ _Entity(key=ndb.Key('_EntityRoot', 1, '_Entity', 1), value=1).put()
+ return original_save(*args, **kwargs)
+ self.mock(VersionedModel, 'Save', MockSave)
+
+ entity = _Entity()
+ key, saved = entity.Save(retry_on_conflict=False)
+ expected_key = ndb.Key('_EntityRoot', 1, '_Entity', 1)
+ self.assertEqual(expected_key, key)
+ self.assertFalse(saved)
def testLikelyTransactionFailure(self):
original_ndb_transaction = ndb.transaction
@@ -100,9 +174,10 @@ class VersionedModelTest(testing.AppengineTestCase):
self.mock(ndb, 'transaction', MockNdbTransaction)
entity = _Entity()
- key = entity.Save()
+ key, saved = entity.Save()
expected_key = ndb.Key('_EntityRoot', 1, '_Entity', 1)
self.assertEqual(expected_key, key)
+ self.assertTrue(saved)
self.assertEqual([1], calls)
def testTransactionFailure(self):
@@ -117,7 +192,8 @@ class VersionedModelTest(testing.AppengineTestCase):
self.mock(ndb, 'transaction', MockNdbTransaction)
entity = _Entity()
- key = entity.Save()
+ key, saved = entity.Save()
expected_key = ndb.Key('_EntityRoot', 1, '_Entity', 1)
self.assertEqual(expected_key, key)
self.assertEqual([1], calls)
+ self.assertTrue(saved)
« no previous file with comments | « no previous file | appengine/findit/model/versioned_config.py » ('j') | appengine/findit/model/versioned_model.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698