@@ -104,6 +104,48 @@ def test_mismatched_value_indexed(self):
104104 with self .assertRaises (ValueError ):
105105 self ._callFUT (entity_pb )
106106
107+ def test_entity_no_key (self ):
108+ from gcloud .datastore import _datastore_v1_pb2 as datastore_pb
109+
110+ entity_pb = datastore_pb .Entity ()
111+ entity = self ._callFUT (entity_pb )
112+
113+ self .assertEqual (entity .key , None )
114+ self .assertEqual (dict (entity ), {})
115+
116+ def test_nested_entity_no_key (self ):
117+ from gcloud .datastore import _datastore_v1_pb2 as datastore_pb
118+
119+ DATASET_ID = 's~FOO'
120+ KIND = 'KIND'
121+ INSIDE_NAME = 'IFOO'
122+ OUTSIDE_NAME = 'OBAR'
123+ INSIDE_VALUE = 1337
124+
125+ entity_inside = datastore_pb .Entity ()
126+ inside_prop = entity_inside .property .add ()
127+ inside_prop .name = INSIDE_NAME
128+ inside_prop .value .integer_value = INSIDE_VALUE
129+
130+ entity_pb = datastore_pb .Entity ()
131+ entity_pb .key .partition_id .dataset_id = DATASET_ID
132+ element = entity_pb .key .path_element .add ()
133+ element .kind = KIND
134+
135+ outside_prop = entity_pb .property .add ()
136+ outside_prop .name = OUTSIDE_NAME
137+ outside_prop .value .entity_value .CopyFrom (entity_inside )
138+
139+ entity = self ._callFUT (entity_pb )
140+ self .assertEqual (entity .key .dataset_id , DATASET_ID )
141+ self .assertEqual (entity .key .flat_path , (KIND ,))
142+ self .assertEqual (len (entity ), 1 )
143+
144+ inside_entity = entity [OUTSIDE_NAME ]
145+ self .assertEqual (inside_entity .key , None )
146+ self .assertEqual (len (inside_entity ), 1 )
147+ self .assertEqual (inside_entity [INSIDE_NAME ], INSIDE_VALUE )
148+
107149
108150class Test_key_from_protobuf (unittest2 .TestCase ):
109151
0 commit comments