OLD | NEW |
---|---|
(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) | |
OLD | NEW |