5
5
from gcloud import datastore
6
6
# This assumes the command is being run via tox hence the
7
7
# repository root is the current directory.
8
- from regression . populate_datastore import CHARACTERS
8
+ from regression import populate_datastore
9
9
from regression import regression_utils
10
10
11
11
@@ -115,11 +115,16 @@ class TestDatastoreQuery(TestDatastore):
115
115
@classmethod
116
116
def setUpClass (cls ):
117
117
super (TestDatastoreQuery , cls ).setUpClass ()
118
- cls .CHARACTERS = CHARACTERS
118
+ cls .CHARACTERS = populate_datastore .CHARACTERS
119
+ cls .ANCESTOR_KEY = datastore .key .Key (
120
+ path = [populate_datastore .ANCESTOR ])
121
+
122
+ def _base_query (self ):
123
+ return self .dataset .query ('Character' ).ancestor (self .ANCESTOR_KEY )
119
124
120
125
def test_limit_queries (self ):
121
126
limit = 5
122
- query = self .dataset . query ( 'Character' ).limit (limit )
127
+ query = self ._base_query ( ).limit (limit )
123
128
# Verify there is not cursor before fetch().
124
129
self .assertRaises (RuntimeError , query .cursor )
125
130
@@ -132,49 +137,46 @@ def test_limit_queries(self):
132
137
self .assertTrue (cursor is not None )
133
138
134
139
# Fetch next batch of characters.
135
- new_query = self .dataset . query ( 'Character' ).with_cursor (cursor )
140
+ new_query = self ._base_query ( ).with_cursor (cursor )
136
141
new_character_entities = new_query .fetch ()
137
142
characters_remaining = len (self .CHARACTERS ) - limit
138
143
self .assertEqual (len (new_character_entities ), characters_remaining )
139
144
140
145
def test_query_simple_filter (self ):
141
- query = self .dataset .query ('Character' )
142
- query = query .filter ('appearances >=' , 20 )
146
+ query = self ._base_query ().filter ('appearances >=' , 20 )
143
147
expected_matches = 6
144
148
# We expect 6, but allow the query to get 1 extra.
145
149
entities = query .fetch (limit = expected_matches + 1 )
146
150
self .assertEqual (len (entities ), expected_matches )
147
151
148
152
def test_query_multiple_filters (self ):
149
- query = self .dataset . query ( 'Character' )
150
- query = query . filter ( 'appearances >=' , 26 ).filter ('family =' , 'Stark' )
153
+ query = self ._base_query (). filter (
154
+ 'appearances >=' , 26 ).filter ('family =' , 'Stark' )
151
155
expected_matches = 4
152
156
# We expect 4, but allow the query to get 1 extra.
153
157
entities = query .fetch (limit = expected_matches + 1 )
154
158
self .assertEqual (len (entities ), expected_matches )
155
159
156
160
def test_ancestor_query (self ):
157
- query = self .dataset .query ('Character' )
158
- filtered_query = query .ancestor (['Character' , 'Eddard' ])
161
+ filtered_query = self ._base_query ()
159
162
160
- expected_matches = 5
161
- # We expect 5 , but allow the query to get 1 extra.
163
+ expected_matches = 8
164
+ # We expect 8 , but allow the query to get 1 extra.
162
165
entities = filtered_query .fetch (limit = expected_matches + 1 )
163
166
self .assertEqual (len (entities ), expected_matches )
164
167
165
168
def test_query___key___filter (self ):
166
169
rickard_key = datastore .key .Key (
167
- path = [{ 'kind' : 'Character' , 'name' : 'Rickard' } ])
170
+ path = [populate_datastore . ANCESTOR , populate_datastore . RICKARD ])
168
171
169
- query = self .dataset .query ('Character' ).filter (
170
- '__key__ =' , rickard_key )
172
+ query = self ._base_query ().filter ('__key__ =' , rickard_key )
171
173
expected_matches = 1
172
174
# We expect 1, but allow the query to get 1 extra.
173
175
entities = query .fetch (limit = expected_matches + 1 )
174
176
self .assertEqual (len (entities ), expected_matches )
175
177
176
178
def test_ordered_query (self ):
177
- query = self .dataset . query ( 'Character' ).order ('appearances' )
179
+ query = self ._base_query ( ).order ('appearances' )
178
180
expected_matches = 8
179
181
# We expect 8, but allow the query to get 1 extra.
180
182
entities = query .fetch (limit = expected_matches + 1 )
@@ -185,8 +187,7 @@ def test_ordered_query(self):
185
187
self .assertEqual (entities [7 ]['name' ], self .CHARACTERS [3 ]['name' ])
186
188
187
189
def test_projection_query (self ):
188
- query = self .dataset .query ('Character' )
189
- filtered_query = query .projection (['name' , 'family' ])
190
+ filtered_query = self ._base_query ().projection (['name' , 'family' ])
190
191
191
192
# NOTE: There are 9 responses because of Catelyn. She has both
192
193
# Stark and Tully as her families, hence occurs twice in
@@ -220,7 +221,7 @@ def test_projection_query(self):
220
221
self .assertEqual (sansa_dict , {'name' : 'Sansa' , 'family' : 'Stark' })
221
222
222
223
def test_query_paginate_with_offset (self ):
223
- query = self .dataset . query ( 'Character' )
224
+ query = self ._base_query ( )
224
225
offset = 2
225
226
limit = 3
226
227
page_query = query .offset (offset ).limit (limit ).order ('appearances' )
@@ -246,7 +247,7 @@ def test_query_paginate_with_offset(self):
246
247
self .assertEqual (entities [2 ]['name' ], 'Arya' )
247
248
248
249
def test_query_paginate_with_start_cursor (self ):
249
- query = self .dataset . query ( 'Character' )
250
+ query = self ._base_query ( )
250
251
offset = 2
251
252
limit = 2
252
253
page_query = query .offset (offset ).limit (limit ).order ('appearances' )
@@ -259,7 +260,7 @@ def test_query_paginate_with_start_cursor(self):
259
260
260
261
# Use cursor to create a fresh query.
261
262
cursor = page_query .cursor ()
262
- fresh_query = self .dataset . query ( 'Character' )
263
+ fresh_query = self ._base_query ( )
263
264
fresh_query = fresh_query .order ('appearances' ).with_cursor (cursor )
264
265
265
266
new_entities = fresh_query .fetch ()
@@ -269,7 +270,7 @@ def test_query_paginate_with_start_cursor(self):
269
270
self .assertEqual (new_entities [3 ]['name' ], 'Arya' )
270
271
271
272
def test_query_group_by (self ):
272
- query = self .dataset . query ( 'Character' ).group_by (['alive' ])
273
+ query = self ._base_query ( ).group_by (['alive' ])
273
274
274
275
expected_matches = 2
275
276
# We expect 2, but allow the query to get 1 extra.
0 commit comments