@@ -906,6 +906,45 @@ def test_allocate_ids_non_empty(self):
906906 for key_before , key_after in zip (before_key_pbs , request .key ):
907907 _compare_key_pb_after_request (self , key_before , key_after )
908908
909+ def test_save_entity_w_empty_list_value (self ):
910+ from gcloud .datastore import datastore_v1_pb2 as datastore_pb
911+
912+ DATASET_ID = 'DATASET'
913+ key_pb = self ._make_key_pb (DATASET_ID )
914+ rsp_pb = datastore_pb .CommitResponse ()
915+ conn = self ._makeOne ()
916+ URI = '/' .join ([
917+ conn .API_BASE_URL ,
918+ 'datastore' ,
919+ conn .API_VERSION ,
920+ 'datasets' ,
921+ DATASET_ID ,
922+ 'commit' ,
923+ ])
924+ http = conn ._http = Http ({'status' : '200' }, rsp_pb .SerializeToString ())
925+ result = conn .save_entity (DATASET_ID , key_pb ,
926+ {'foo' : u'Foo' , 'bar' : []})
927+ self .assertEqual (result , (False , None ))
928+ cw = http ._called_with
929+ self ._verifyProtobufCall (cw , URI , conn )
930+ rq_class = datastore_pb .CommitRequest
931+ request = rq_class ()
932+ request .ParseFromString (cw ['body' ])
933+ self .assertEqual (request .transaction , '' )
934+ mutation = request .mutation
935+ self .assertEqual (len (mutation .insert_auto_id ), 0 )
936+ upserts = list (mutation .upsert )
937+ self .assertEqual (len (upserts ), 1 )
938+ upsert = upserts [0 ]
939+ _compare_key_pb_after_request (self , key_pb , upsert .key )
940+ props = list (upsert .property )
941+ self .assertEqual (len (props ), 1 )
942+ self .assertEqual (props [0 ].name , 'foo' )
943+ self .assertEqual (props [0 ].value .string_value , u'Foo' )
944+ self .assertEqual (props [0 ].value .indexed , True )
945+ self .assertEqual (len (mutation .delete ), 0 )
946+ self .assertEqual (request .mode , rq_class .NON_TRANSACTIONAL )
947+
909948 def test_save_entity_wo_transaction_w_upsert (self ):
910949 from gcloud .datastore import datastore_v1_pb2 as datastore_pb
911950
0 commit comments