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

Side by Side Diff: appengine/findit/model/test/versioned_model_test.py

Issue 1499583002: [Findit] Add a model to provide versioning and also a verioned config model. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Created 5 years 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 unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 from google.appengine.api import datastore_errors
6 from google.appengine.ext import ndb
7
8 from testing_utils import testing
9
10 from model.versioned_model import VersionedModel
11
12
13 class _Entity(VersionedModel):
14 value = ndb.IntegerProperty(indexed=False)
15
16
17 class VersionedModelTest(testing.AppengineTestCase):
18 def testGetRootModel(self):
19 root_model_class = _Entity._GetRootModel()
20 self.assertEqual('_EntityRoot', root_model_class._get_kind())
21 self.assertTrue(issubclass(root_model_class, ndb.Model))
22 self.assertEqual(3, root_model_class(current=3).current)
23
24 def testGetMostRecentVersionWhenNoData(self):
25 entity = _Entity.GetMostRecentVersion()
26 self.assertIsNone(entity)
27
28 def testGetMostRecentVersionWhenDataExists(self):
29 root_key = ndb.Key('_EntityRoot', 1)
30 _Entity._GetRootModel()(key=root_key, current=2).put()
31 _Entity(key=ndb.Key('_Entity', 1, parent=root_key), value=1).put()
32 _Entity(key=ndb.Key('_Entity', 2, parent=root_key), value=2).put()
33
34 entity = _Entity.GetMostRecentVersion()
35 self.assertEqual(2, entity.version)
36 self.assertEqual(2, entity.value)
37
38 def testSaveNewVersion(self):
39 entity = _Entity()
40 entity.value = 1
41 key = entity.Save()
42
43 expected_key = ndb.Key('_EntityRoot', 1, '_Entity', 1)
44 self.assertEqual(expected_key, key)
45
46 entity = _Entity.GetMostRecentVersion()
47 self.assertEqual(1, entity.version)
48 self.assertEqual(1, entity.value)
49
50 def testSaveNewVersionAlreadyExist(self):
51 original_ndb_transaction = ndb.transaction
52
53 def MockNdbTransaction(func, **options):
54 _Entity(key=ndb.Key('_EntityRoot', 1, '_Entity', 1), value=1).put()
55 _Entity(key=ndb.Key('_EntityRoot', 1, '_Entity', 2), value=2).put()
56 return original_ndb_transaction(func, **options)
57 self.mock(ndb, 'transaction', MockNdbTransaction)
58
59 entity = _Entity()
60 key = entity.Save()
61 expected_key = ndb.Key('_EntityRoot', 1, '_Entity', 3)
62 self.assertEqual(expected_key, key)
63
64 def testLiklyTransactionFailure(self):
lijeffrey1 2015/12/03 18:51:37 nit: likely
stgao 2015/12/03 19:43:56 Done.
65 original_ndb_transaction = ndb.transaction
66
67 calls = []
68 def MockNdbTransaction(func, **options):
69 if len(calls) < 1:
70 calls.append(1)
71 raise datastore_errors.Timeout()
72 return original_ndb_transaction(func, **options)
73 self.mock(ndb, 'transaction', MockNdbTransaction)
74
75 entity = _Entity()
76 key = entity.Save()
77 expected_key = ndb.Key('_EntityRoot', 1, '_Entity', 1)
78 self.assertEqual(expected_key, key)
79 self.assertEqual([1], calls)
80
81 def testTransactionFailure(self):
82 original_ndb_transaction = ndb.transaction
83
84 calls = []
85 def MockNdbTransaction(func, **options):
86 if len(calls) < 1:
87 calls.append(1)
88 raise datastore_errors.BadRequestError()
89 return original_ndb_transaction(func, **options)
90 self.mock(ndb, 'transaction', MockNdbTransaction)
91
92 entity = _Entity()
93 key = entity.Save()
94 expected_key = ndb.Key('_EntityRoot', 1, '_Entity', 1)
95 self.assertEqual(expected_key, key)
96 self.assertEqual([1], calls)
OLDNEW
« no previous file with comments | « no previous file | appengine/findit/model/versioned_model.py » ('j') | appengine/findit/model/versioned_model.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698