def _update_helper(self, retry=None, timeout=None, **option_kwargs): from google.cloud.firestore_v1 import _helpers from google.cloud.firestore_v1.transforms import DELETE_FIELD # Create a minimal fake GAPIC with a dummy response. firestore_api = mock.Mock(spec=["commit"]) firestore_api.commit.return_value = self._make_commit_repsonse() # Attach the fake GAPIC to a real client. client = _make_client("potato-chip") client._firestore_api_internal = firestore_api # Actually make a document and call create(). document = self._make_one("baked", "Alaska", client=client) # "Cheat" and use OrderedDict-s so that iteritems() is deterministic. field_updates = collections.OrderedDict( (("hello", 1), ("then.do", False), ("goodbye", DELETE_FIELD))) kwargs = _helpers.make_retry_timeout_kwargs(retry, timeout) if option_kwargs: option = client.write_option(**option_kwargs) write_result = document.update(field_updates, option=option, **kwargs) else: option = None write_result = document.update(field_updates, **kwargs) # Verify the response and the mocks. self.assertIs(write_result, mock.sentinel.write_result) update_values = { "hello": field_updates["hello"], "then": { "do": field_updates["then.do"] }, } field_paths = list(field_updates.keys()) write_pb = self._write_pb_for_update(document._document_path, update_values, sorted(field_paths)) if option is not None: option.modify_write(write_pb) firestore_api.commit.assert_called_once_with( request={ "database": client._database_string, "writes": [write_pb], "transaction": None, }, metadata=client._rpc_metadata, **kwargs, )
def test_empty_update(self): # Create a minimal fake GAPIC with a dummy response. firestore_api = mock.Mock(spec=["commit"]) firestore_api.commit.return_value = self._make_commit_repsonse() # Attach the fake GAPIC to a real client. client = _make_client("potato-chip") client._firestore_api_internal = firestore_api # Actually make a document and call create(). document = self._make_one("baked", "Alaska", client=client) # "Cheat" and use OrderedDict-s so that iteritems() is deterministic. field_updates = {} with self.assertRaises(ValueError): document.update(field_updates)