def _doc_get_info(ref_string, values): from google.cloud.firestore_v1.proto import document_pb2 from google.cloud._helpers import _datetime_to_pb_timestamp from google.cloud.firestore_v1 import _helpers now = datetime.datetime.utcnow() read_time = _datetime_to_pb_timestamp(now) delta = datetime.timedelta(seconds=100) update_time = _datetime_to_pb_timestamp(now - delta) create_time = _datetime_to_pb_timestamp(now - 2 * delta) document_pb = document_pb2.Document( name=ref_string, fields=_helpers.encode_dict(values), create_time=create_time, update_time=update_time, ) return document_pb, read_time
def test_get_document(self): # Setup Expected Response name_2 = "name2-1052831874" expected_response = {"name": name_2} expected_response = document_pb2.Document(**expected_response) # Mock the API response channel = ChannelStub(responses=[expected_response]) patch = mock.patch("google.api_core.grpc_helpers.create_channel") with patch as create_channel: create_channel.return_value = channel client = firestore_client.FirestoreClient() # Setup Request name = "name3373707" response = client.get_document(name) assert expected_response == response assert len(channel.requests) == 1 expected_request = firestore_pb2.GetDocumentRequest(name=name) actual_request = channel.requests[0][1] assert expected_request == actual_request
def test_add_auto_assigned(self): from google.cloud.firestore_v1.proto import document_pb2 from google.cloud.firestore_v1.document import DocumentReference from google.cloud.firestore_v1 import SERVER_TIMESTAMP from google.cloud.firestore_v1._helpers import pbs_for_set_no_merge # Create a minimal fake GAPIC add attach it to a real client. firestore_api = mock.Mock(spec=["create_document", "commit"]) write_result = mock.Mock( update_time=mock.sentinel.update_time, spec=["update_time"] ) commit_response = mock.Mock( write_results=[write_result], spec=["write_results", "commit_time"], commit_time=mock.sentinel.commit_time, ) firestore_api.commit.return_value = commit_response create_doc_response = document_pb2.Document() firestore_api.create_document.return_value = create_doc_response client = _make_client() client._firestore_api_internal = firestore_api # Actually make a collection. collection = self._make_one("grand-parent", "parent", "child", client=client) # Add a dummy response for the fake GAPIC. parent_path = collection.parent._document_path auto_assigned_id = "cheezburger" name = "{}/{}/{}".format(parent_path, collection.id, auto_assigned_id) create_doc_response = document_pb2.Document(name=name) create_doc_response.update_time.FromDatetime(datetime.datetime.utcnow()) firestore_api.create_document.return_value = create_doc_response # Actually call add() on our collection; include a transform to make # sure transforms during adds work. document_data = {"been": "here", "now": SERVER_TIMESTAMP} update_time, document_ref = collection.add(document_data) # Verify the response and the mocks. self.assertIs(update_time, mock.sentinel.update_time) self.assertIsInstance(document_ref, DocumentReference) self.assertIs(document_ref._client, client) expected_path = collection._path + (auto_assigned_id,) self.assertEqual(document_ref._path, expected_path) expected_document_pb = document_pb2.Document() firestore_api.create_document.assert_called_once_with( parent_path, collection_id=collection.id, document_id=None, document=expected_document_pb, mask=None, metadata=client._rpc_metadata, ) write_pbs = pbs_for_set_no_merge(document_ref._document_path, document_data) firestore_api.commit.assert_called_once_with( client._database_string, write_pbs, transaction=None, metadata=client._rpc_metadata, )