def test_create_index(self, mock_create_stub):
        # Mock gRPC layer
        grpc_stub = mock.Mock()
        mock_create_stub.return_value = grpc_stub

        client = firestore_admin_client.FirestoreAdminClient()

        # Mock request
        parent = client.database_path('[PROJECT]', '[DATABASE]')
        index = {}

        # Mock response
        name = 'name3373707'
        done = True
        expected_response = {'name': name, 'done': done}
        expected_response = operations_pb2.Operation(**expected_response)
        grpc_stub.CreateIndex.return_value = expected_response

        response = client.create_index(parent, index)
        self.assertEqual(expected_response, response)

        grpc_stub.CreateIndex.assert_called_once()
        args, kwargs = grpc_stub.CreateIndex.call_args
        self.assertEqual(len(args), 2)
        self.assertEqual(len(kwargs), 1)
        self.assertIn('metadata', kwargs)
        actual_request = args[0]

        expected_request = firestore_admin_pb2.CreateIndexRequest(
            parent=parent, index=index)
        self.assertEqual(expected_request, actual_request)
    def test_get_index(self, mock_create_stub):
        # Mock gRPC layer
        grpc_stub = mock.Mock()
        mock_create_stub.return_value = grpc_stub

        client = firestore_admin_client.FirestoreAdminClient()

        # Mock request
        name = client.index_path('[PROJECT]', '[DATABASE]', '[INDEX]')

        # Mock response
        name_2 = 'name2-1052831874'
        collection_id = 'collectionId-821242276'
        expected_response = {'name': name_2, 'collection_id': collection_id}
        expected_response = index_pb2.Index(**expected_response)
        grpc_stub.GetIndex.return_value = expected_response

        response = client.get_index(name)
        self.assertEqual(expected_response, response)

        grpc_stub.GetIndex.assert_called_once()
        args, kwargs = grpc_stub.GetIndex.call_args
        self.assertEqual(len(args), 2)
        self.assertEqual(len(kwargs), 1)
        self.assertIn('metadata', kwargs)
        actual_request = args[0]

        expected_request = firestore_admin_pb2.GetIndexRequest(name=name)
        self.assertEqual(expected_request, actual_request)
    def test_delete_index_exception(self, mock_create_stub):
        # Mock gRPC layer
        grpc_stub = mock.Mock()
        mock_create_stub.return_value = grpc_stub

        client = firestore_admin_client.FirestoreAdminClient()

        # Mock request
        name = client.index_path('[PROJECT]', '[DATABASE]', '[INDEX]')

        # Mock exception response
        grpc_stub.DeleteIndex.side_effect = CustomException()

        self.assertRaises(errors.GaxError, client.delete_index, name)
    def test_create_index_exception(self, mock_create_stub):
        # Mock gRPC layer
        grpc_stub = mock.Mock()
        mock_create_stub.return_value = grpc_stub

        client = firestore_admin_client.FirestoreAdminClient()

        # Mock request
        parent = client.database_path('[PROJECT]', '[DATABASE]')
        index = {}

        # Mock exception response
        grpc_stub.CreateIndex.side_effect = CustomException()

        self.assertRaises(errors.GaxError, client.create_index, parent, index)
    def test_list_indexes_exception(self, mock_create_stub):
        # Mock gRPC layer
        grpc_stub = mock.Mock()
        mock_create_stub.return_value = grpc_stub

        client = firestore_admin_client.FirestoreAdminClient()

        # Mock request
        parent = client.database_path('[PROJECT]', '[DATABASE]')

        # Mock exception response
        grpc_stub.ListIndexes.side_effect = CustomException()

        paged_list_response = client.list_indexes(parent)
        self.assertRaises(errors.GaxError, list, paged_list_response)
    def test_delete_index(self, mock_create_stub):
        # Mock gRPC layer
        grpc_stub = mock.Mock()
        mock_create_stub.return_value = grpc_stub

        client = firestore_admin_client.FirestoreAdminClient()

        # Mock request
        name = client.index_path('[PROJECT]', '[DATABASE]', '[INDEX]')

        client.delete_index(name)

        grpc_stub.DeleteIndex.assert_called_once()
        args, kwargs = grpc_stub.DeleteIndex.call_args
        self.assertEqual(len(args), 2)
        self.assertEqual(len(kwargs), 1)
        self.assertIn('metadata', kwargs)
        actual_request = args[0]

        expected_request = firestore_admin_pb2.DeleteIndexRequest(name=name)
        self.assertEqual(expected_request, actual_request)
    def test_list_indexes(self, mock_create_stub):
        # Mock gRPC layer
        grpc_stub = mock.Mock()
        mock_create_stub.return_value = grpc_stub

        client = firestore_admin_client.FirestoreAdminClient()

        # Mock request
        parent = client.database_path('[PROJECT]', '[DATABASE]')

        # Mock response
        next_page_token = ''
        indexes_element = {}
        indexes = [indexes_element]
        expected_response = {
            'next_page_token': next_page_token,
            'indexes': indexes
        }
        expected_response = firestore_admin_pb2.ListIndexesResponse(
            **expected_response)
        grpc_stub.ListIndexes.return_value = expected_response

        paged_list_response = client.list_indexes(parent)
        resources = list(paged_list_response)
        self.assertEqual(1, len(resources))
        self.assertEqual(expected_response.indexes[0], resources[0])

        grpc_stub.ListIndexes.assert_called_once()
        args, kwargs = grpc_stub.ListIndexes.call_args
        self.assertEqual(len(args), 2)
        self.assertEqual(len(kwargs), 1)
        self.assertIn('metadata', kwargs)
        actual_request = args[0]

        expected_request = firestore_admin_pb2.ListIndexesRequest(
            parent=parent)
        self.assertEqual(expected_request, actual_request)