Skip to content

Commit 2c9c55e

Browse files
committed
Merge pull request googleapis#307 from dhermes/finish-datastore-regression
Implementing remaining datastore regression tests from gcloud-node.
2 parents 87cf71d + 4ded0ac commit 2c9c55e

1 file changed

Lines changed: 67 additions & 6 deletions

File tree

regression/datastore.py

Lines changed: 67 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,31 @@ def tearDown(self):
2424
entity.delete()
2525

2626

27+
class TestDatastoreAllocateIDs(TestDatastore):
28+
29+
def test_allocate_ids(self):
30+
incomplete_key = datastore.key.Key(path=[{'kind': 'Kind'}])
31+
incomplete_key_pb = incomplete_key.to_protobuf()
32+
incomplete_key_pbs = [incomplete_key_pb] * 10
33+
34+
connection = self.dataset.connection()
35+
allocated_key_pbs = connection.allocate_ids(self.dataset.id(),
36+
incomplete_key_pbs)
37+
allocated_keys = [datastore.helpers.key_from_protobuf(key_pb)
38+
for key_pb in allocated_key_pbs]
39+
self.assertEqual(len(allocated_keys), 10)
40+
for key in allocated_keys:
41+
self.assertFalse(key.is_partial())
42+
43+
2744
class TestDatastoreSave(TestDatastore):
2845

2946
def _get_post(self, name=None, key_id=None, post_content=None):
3047
post_content = post_content or {
31-
'title': 'How to make the perfect pizza in your grill',
32-
'tags': ['pizza', 'grill'],
48+
'title': u'How to make the perfect pizza in your grill',
49+
'tags': [u'pizza', u'grill'],
3350
'publishedAt': datetime.datetime(2001, 1, 1, tzinfo=pytz.utc),
34-
'author': 'Silvano',
51+
'author': u'Silvano',
3552
'isDraft': False,
3653
'wordCount': 400,
3754
'rating': 5.0,
@@ -90,10 +107,10 @@ def test_save_multiple(self):
90107
self.case_entities_to_delete.append(entity1)
91108

92109
second_post_content = {
93-
'title': 'How to make the perfect homemade pasta',
94-
'tags': ['pasta', 'homemade'],
110+
'title': u'How to make the perfect homemade pasta',
111+
'tags': [u'pasta', u'homemade'],
95112
'publishedAt': datetime.datetime(2001, 1, 1),
96-
'author': 'Silvano',
113+
'author': u'Silvano',
97114
'isDraft': False,
98115
'wordCount': 450,
99116
'rating': 4.5,
@@ -112,6 +129,29 @@ def test_empty_kind(self):
112129
self.assertEqual(posts, [])
113130

114131

132+
class TestDatastoreSaveKeys(TestDatastore):
133+
134+
def test_save_key_self_reference(self):
135+
key = datastore.key.Key.from_path('Person', 'name')
136+
entity = self.dataset.entity(kind=None).key(key)
137+
entity['fullName'] = u'Full name'
138+
entity['linkedTo'] = key # Self reference.
139+
140+
entity.save()
141+
self.case_entities_to_delete.append(entity)
142+
143+
query = self.dataset.query('Person').filter(
144+
'linkedTo =', key).limit(2)
145+
146+
stored_persons = query.fetch()
147+
self.assertEqual(len(stored_persons), 1)
148+
149+
stored_person = stored_persons[0]
150+
self.assertEqual(stored_person['fullName'], entity['fullName'])
151+
self.assertEqual(stored_person.key().path(), key.path())
152+
self.assertEqual(stored_person.key().namespace(), key.namespace())
153+
154+
115155
class TestDatastoreQuery(TestDatastore):
116156

117157
@classmethod
@@ -286,3 +326,24 @@ def test_query_group_by(self):
286326

287327
self.assertEqual(entities[0]['name'], 'Catelyn')
288328
self.assertEqual(entities[1]['name'], 'Arya')
329+
330+
331+
class TestDatastoreTransaction(TestDatastore):
332+
333+
def test_transaction(self):
334+
key = datastore.key.Key.from_path('Company', 'Google')
335+
entity = self.dataset.entity(kind=None).key(key)
336+
entity['url'] = u'www.google.com'
337+
338+
with self.dataset.transaction():
339+
retrieved_entity = self.dataset.get_entity(key)
340+
if retrieved_entity is None:
341+
entity.save()
342+
self.case_entities_to_delete.append(entity)
343+
344+
# This will always return after the transaction.
345+
retrieved_entity = self.dataset.get_entity(key)
346+
retrieved_dict = dict(retrieved_entity.items())
347+
entity_dict = dict(entity.items())
348+
self.assertEqual(retrieved_dict, entity_dict)
349+
retrieved_entity.delete()

0 commit comments

Comments
 (0)