Chromium Code Reviews| 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) |