@@ -189,21 +189,152 @@ def test__require_connection_value_set(self):
189189 stored_connection = gcloud .datastore ._require_connection ()
190190 self .assertTrue (stored_connection is FAKE_CONNECTION )
191191
192- def test_get_entities (self ):
193- import gcloud .datastore
192+
193+ class Test_get_entities_function (unittest2 .TestCase ):
194+
195+ def _callFUT (self , keys , missing = None , deferred = None ,
196+ connection = None , dataset_id = None ):
197+ from gcloud .datastore import get_entities
198+ return get_entities (keys , missing = missing , deferred = deferred ,
199+ connection = connection , dataset_id = dataset_id )
200+
201+ def test_get_entities_miss (self ):
202+ from gcloud .datastore .key import Key
203+ from gcloud .datastore .test_connection import _Connection
204+
205+ DATASET_ID = 'DATASET'
206+ connection = _Connection ()
207+ key = Key ('Kind' , 1234 , dataset_id = DATASET_ID )
208+ results = self ._callFUT ([key ], connection = connection ,
209+ dataset_id = DATASET_ID )
210+ self .assertEqual (results , [])
211+
212+ def test_get_entities_miss_w_missing (self ):
213+ from gcloud .datastore import datastore_v1_pb2 as datastore_pb
214+ from gcloud .datastore .key import Key
215+ from gcloud .datastore .test_connection import _Connection
216+
217+ DATASET_ID = 'DATASET'
218+ KIND = 'Kind'
219+ ID = 1234
220+
221+ # Make a missing entity pb to be returned from mock backend.
222+ missed = datastore_pb .Entity ()
223+ missed .key .partition_id .dataset_id = DATASET_ID
224+ path_element = missed .key .path_element .add ()
225+ path_element .kind = KIND
226+ path_element .id = ID
227+
228+ # Set missing entity on mock connection.
229+ connection = _Connection ()
230+ connection ._missing = [missed ]
231+
232+ key = Key (KIND , ID , dataset_id = DATASET_ID )
233+ missing = []
234+ entities = self ._callFUT ([key ], connection = connection ,
235+ dataset_id = DATASET_ID , missing = missing )
236+ self .assertEqual (entities , [])
237+ self .assertEqual ([missed .key ().to_protobuf () for missed in missing ],
238+ [key .to_protobuf ()])
239+
240+ def test_get_entities_miss_w_deferred (self ):
241+ from gcloud .datastore .key import Key
242+ from gcloud .datastore .test_connection import _Connection
243+
244+ DATASET_ID = 'DATASET'
245+ key = Key ('Kind' , 1234 , dataset_id = DATASET_ID )
246+
247+ # Set deferred entity on mock connection.
248+ connection = _Connection ()
249+ connection ._deferred = [key .to_protobuf ()]
250+
251+ deferred = []
252+ entities = self ._callFUT ([key ], connection = connection ,
253+ dataset_id = DATASET_ID , deferred = deferred )
254+ self .assertEqual (entities , [])
255+ self .assertEqual ([def_key .to_protobuf () for def_key in deferred ],
256+ [key .to_protobuf ()])
257+
258+ def _make_entity_pb (self , dataset_id , kind , integer_id , name , str_val ):
259+ from gcloud .datastore import datastore_v1_pb2 as datastore_pb
260+
261+ entity_pb = datastore_pb .Entity ()
262+ entity_pb .key .partition_id .dataset_id = dataset_id
263+ path_element = entity_pb .key .path_element .add ()
264+ path_element .kind = kind
265+ path_element .id = integer_id
266+ prop = entity_pb .property .add ()
267+ prop .name = name
268+ prop .value .string_value = str_val
269+
270+ return entity_pb
271+
272+ def test_get_entities_hit (self ):
273+ from gcloud .datastore .key import Key
274+ from gcloud .datastore .test_connection import _Connection
275+
276+ DATASET_ID = 'DATASET'
277+ KIND = 'Kind'
278+ ID = 1234
279+ PATH = [{'kind' : KIND , 'id' : ID }]
280+
281+ # Make a found entity pb to be returned from mock backend.
282+ entity_pb = self ._make_entity_pb (DATASET_ID , KIND , ID ,
283+ 'foo' , 'Foo' )
284+
285+ # Make a connection to return the entity pb.
286+ connection = _Connection (entity_pb )
287+
288+ key = Key (KIND , ID , dataset_id = DATASET_ID )
289+ result , = self ._callFUT ([key ], connection = connection ,
290+ dataset_id = DATASET_ID )
291+ new_key = result .key ()
292+
293+ # Check the returned value is as expected.
294+ self .assertFalse (new_key is key )
295+ self .assertEqual (new_key .dataset_id , DATASET_ID )
296+ self .assertEqual (new_key .path , PATH )
297+ self .assertEqual (list (result ), ['foo' ])
298+ self .assertEqual (result ['foo' ], 'Foo' )
299+
300+ def test_get_entities_implicit (self ):
194301 from gcloud .datastore import _implicit_environ
302+ from gcloud .datastore .key import Key
303+ from gcloud .datastore .test_connection import _Connection
195304 from gcloud .datastore .test_entity import _Dataset
196305 from gcloud ._testing import _Monkey
197306
307+ DATASET_ID = 'DATASET'
308+ KIND = 'Kind'
309+ ID = 1234
310+ PATH = [{'kind' : KIND , 'id' : ID }]
311+
312+ # Make a found entity pb to be returned from mock backend.
313+ entity_pb = self ._make_entity_pb (DATASET_ID , KIND , ID ,
314+ 'foo' , 'Foo' )
315+
316+ # Make a connection to return the entity pb.
317+ CUSTOM_CONNECTION = _Connection (entity_pb )
198318 CUSTOM_DATASET = _Dataset ()
199- DUMMY_KEYS = [object (), object ()]
200- DUMMY_VALS = [object (), object ()]
201- for key , val in zip (DUMMY_KEYS , DUMMY_VALS ):
202- CUSTOM_DATASET [key ] = val
203319
204- with _Monkey (_implicit_environ , DATASET = CUSTOM_DATASET ):
205- result = gcloud .datastore .get_entities (DUMMY_KEYS )
206- self .assertTrue (result == DUMMY_VALS )
320+ key = Key (KIND , ID , dataset_id = DATASET_ID )
321+ with _Monkey (_implicit_environ , DATASET = CUSTOM_DATASET ,
322+ CONNECTION = CUSTOM_CONNECTION ):
323+ result , = self ._callFUT ([key ])
324+
325+ expected_called_with = {
326+ 'dataset_id' : DATASET_ID ,
327+ 'key_pbs' : [key .to_protobuf ()],
328+ }
329+ self .assertEqual (CUSTOM_CONNECTION ._called_with , expected_called_with )
330+
331+ new_key = result .key ()
332+ # Check the returned value is as expected.
333+ self .assertFalse (new_key is key )
334+ self .assertEqual (new_key .dataset_id , DATASET_ID )
335+ self .assertEqual (new_key .path , PATH )
336+ self .assertEqual (list (result ), ['foo' ])
337+ self .assertEqual (result ['foo' ], 'Foo' )
207338
208339
209340class Test_allocate_ids_function (unittest2 .TestCase ):
@@ -216,7 +347,7 @@ def _callFUT(self, incomplete_key, num_ids,
216347
217348 def test_allocate_ids (self ):
218349 from gcloud .datastore .key import Key
219- from gcloud .datastore .test_dataset import _Connection
350+ from gcloud .datastore .test_connection import _Connection
220351
221352 DATASET_ID = 'DATASET'
222353 INCOMPLETE_KEY = Key ('KIND' , dataset_id = DATASET_ID )
@@ -235,7 +366,7 @@ def test_allocate_ids(self):
235366 def test_allocate_ids_implicit (self ):
236367 from gcloud .datastore import _implicit_environ
237368 from gcloud .datastore .key import Key
238- from gcloud .datastore .test_dataset import _Connection
369+ from gcloud .datastore .test_connection import _Connection
239370 from gcloud .datastore .test_entity import _Dataset
240371 from gcloud ._testing import _Monkey
241372
@@ -253,7 +384,7 @@ def test_allocate_ids_implicit(self):
253384 def test_allocate_ids_with_complete (self ):
254385 from gcloud .datastore import _implicit_environ
255386 from gcloud .datastore .key import Key
256- from gcloud .datastore .test_dataset import _Connection
387+ from gcloud .datastore .test_connection import _Connection
257388 from gcloud .datastore .test_entity import _Dataset
258389 from gcloud ._testing import _Monkey
259390
0 commit comments