code: def test_invalid_name(self, mock_hook):
      with pytest.raises(AttributeError) as ctx:
          op = CloudFunctionDeleteFunctionOperator(
              name="invalid_name", task_id="id"
          )
          op.execute(None)
      err = ctx.value
      assert (
          str(err)
          == f"Parameter name must match pattern: {FUNCTION_NAME_PATTERN}"
      )
      mock_hook.assert_not_called()
  
imports: from __future__ import annotations
  from copy import deepcopy
  from unittest import mock
  import httplib2
  import pytest
  from googleapiclient.errors import HttpError
  from airflow.exceptions import AirflowException
  from airflow.providers.google.cloud.operators.functions import FUNCTION_NAME_PATTERN, CloudFunctionDeleteFunctionOperator, CloudFunctionDeployFunctionOperator, CloudFunctionInvokeFunctionOperator
  from airflow.version import version
label_desc: Use image node_id 3 for calling the TestGcfFunctionDelete obj's underlying member method code with example usage: obj.test_invalid_name(mock_hook) without return types