@@ -19,8 +19,7 @@ def _makePB(self, dataset_id=None, namespace=None, path=()):
1919 pb .partition_id .namespace = namespace
2020 for elem in path :
2121 added = pb .path_element .add ()
22- if 'kind' in elem :
23- added .kind = elem ['kind' ]
22+ added .kind = elem ['kind' ]
2423 if 'id' in elem :
2524 added .id = elem ['id' ]
2625 if 'name' in elem :
@@ -101,9 +100,16 @@ def test_from_protobuf_w_path_in_pb(self):
101100 pb = self ._makePB (_DATASET , _NAMESPACE )
102101 _PARENT = 'PARENT'
103102 _CHILD = 'CHILD'
103+ _GRANDCHILD = 'GRANDCHILD'
104104 _ID = 1234
105+ _ID2 = 5678
105106 _NAME = 'NAME'
106- _PATH = [{'kind' : _PARENT , 'name' : _NAME }, {'kind' : _CHILD , 'id' : _ID }]
107+ _NAME2 = 'NAME2'
108+ _PATH = [
109+ {'kind' : _PARENT , 'name' : _NAME },
110+ {'kind' : _CHILD , 'id' : _ID },
111+ {'kind' : _GRANDCHILD , 'id' : _ID2 , 'name' : _NAME2 },
112+ ]
107113 pb = self ._makePB (path = _PATH )
108114 key = self ._getTargetClass ().from_protobuf (pb )
109115 self .assertEqual (key .path (), _PATH )
@@ -120,6 +126,13 @@ def test_to_protobuf_defaults(self):
120126 self .assertEqual (elem .name , '' )
121127 self .assertEqual (elem .id , 0 )
122128
129+ def test_to_protobuf_w_explicit_dataset_empty_id (self ):
130+ from gcloud .datastore .dataset import Dataset
131+ dataset = Dataset ('' )
132+ key = self ._makeOne (dataset )
133+ pb = key .to_protobuf ()
134+ self .assertEqual (pb .partition_id .dataset_id , '' )
135+
123136 def test_to_protobuf_w_explicit_dataset_no_prefix (self ):
124137 from gcloud .datastore .dataset import Dataset
125138 _DATASET = 'DATASET'
@@ -155,14 +168,22 @@ def test_to_protobuf_w_explicit_path(self):
155168 _CHILD = 'CHILD'
156169 _ID = 1234
157170 _NAME = 'NAME'
158- _PATH = [{'kind' : _PARENT , 'name' : _NAME }, {'kind' : _CHILD , 'id' : _ID }]
171+ _PATH = [
172+ {'kind' : _PARENT , 'name' : _NAME },
173+ {'kind' : _CHILD , 'id' : _ID },
174+ {},
175+ ]
159176 key = self ._makeOne (path = _PATH )
160177 pb = key .to_protobuf ()
161178 elems = list (pb .path_element )
179+ self .assertEqual (len (elems ), len (_PATH ))
162180 self .assertEqual (elems [0 ].kind , _PARENT )
163181 self .assertEqual (elems [0 ].name , _NAME )
164182 self .assertEqual (elems [1 ].kind , _CHILD )
165183 self .assertEqual (elems [1 ].id , _ID )
184+ self .assertEqual (elems [2 ].kind , '' )
185+ self .assertEqual (elems [2 ].name , '' )
186+ self .assertEqual (elems [2 ].id , 0 )
166187
167188 def test_from_path_empty (self ):
168189 key = self ._getTargetClass ().from_path ()
@@ -262,6 +283,15 @@ def test_path_setter(self):
262283 self .assertEqual (after .namespace (), _NAMESPACE )
263284 self .assertEqual (after .path (), _PATH )
264285
286+ def test_kind_getter_empty_path (self ):
287+ from gcloud .datastore .dataset import Dataset
288+ _DATASET = 'DATASET'
289+ _NAMESPACE = 'NAMESPACE'
290+ dataset = Dataset (_DATASET )
291+ key = self ._makeOne (dataset , _NAMESPACE )
292+ key ._path = () # edge case
293+ self .assertEqual (key .kind (), None )
294+
265295 def test_kind_setter (self ):
266296 from gcloud .datastore .dataset import Dataset
267297 _DATASET = 'DATASET'
@@ -279,22 +309,14 @@ def test_kind_setter(self):
279309 self .assertEqual (after .namespace (), _NAMESPACE )
280310 self .assertEqual (after .path (), [{'kind' : _KIND_AFTER , 'name' : _NAME }])
281311
282- def test_name_setter (self ):
312+ def test_id_getter_empty_path (self ):
283313 from gcloud .datastore .dataset import Dataset
284314 _DATASET = 'DATASET'
285315 _NAMESPACE = 'NAMESPACE'
286- _KIND = 'KIND'
287- _NAME_BEFORE = 'NAME_BEFORE'
288- _NAME_AFTER = 'NAME_AFTER'
289- _PATH = [{'kind' : _KIND , 'name' : _NAME_BEFORE }]
290316 dataset = Dataset (_DATASET )
291- key = self ._makeOne (dataset , _NAMESPACE , _PATH )
292- after = key .name (_NAME_AFTER )
293- self .assertFalse (after is key )
294- self .assertTrue (isinstance (after , self ._getTargetClass ()))
295- self .assertTrue (after .dataset () is dataset )
296- self .assertEqual (after .namespace (), _NAMESPACE )
297- self .assertEqual (after .path (), [{'kind' : _KIND , 'name' : _NAME_AFTER }])
317+ key = self ._makeOne (dataset , _NAMESPACE )
318+ key ._path = () # edge case
319+ self .assertEqual (key .id (), None )
298320
299321 def test_id_setter (self ):
300322 from gcloud .datastore .dataset import Dataset
@@ -313,6 +335,32 @@ def test_id_setter(self):
313335 self .assertEqual (after .namespace (), _NAMESPACE )
314336 self .assertEqual (after .path (), [{'kind' : _KIND , 'id' : _ID_AFTER }])
315337
338+ def test_name_getter_empty_path (self ):
339+ from gcloud .datastore .dataset import Dataset
340+ _DATASET = 'DATASET'
341+ _NAMESPACE = 'NAMESPACE'
342+ dataset = Dataset (_DATASET )
343+ key = self ._makeOne (dataset , _NAMESPACE )
344+ key ._path = () # edge case
345+ self .assertEqual (key .name (), None )
346+
347+ def test_name_setter (self ):
348+ from gcloud .datastore .dataset import Dataset
349+ _DATASET = 'DATASET'
350+ _NAMESPACE = 'NAMESPACE'
351+ _KIND = 'KIND'
352+ _NAME_BEFORE = 'NAME_BEFORE'
353+ _NAME_AFTER = 'NAME_AFTER'
354+ _PATH = [{'kind' : _KIND , 'name' : _NAME_BEFORE }]
355+ dataset = Dataset (_DATASET )
356+ key = self ._makeOne (dataset , _NAMESPACE , _PATH )
357+ after = key .name (_NAME_AFTER )
358+ self .assertFalse (after is key )
359+ self .assertTrue (isinstance (after , self ._getTargetClass ()))
360+ self .assertTrue (after .dataset () is dataset )
361+ self .assertEqual (after .namespace (), _NAMESPACE )
362+ self .assertEqual (after .path (), [{'kind' : _KIND , 'name' : _NAME_AFTER }])
363+
316364 def test_id_or_name_no_name_or_id (self ):
317365 key = self ._makeOne ()
318366 self .assertEqual (key .id_or_name (), None )
0 commit comments