code: def test_update_productset_explicit_name_different_from_constructed(
      self, get_conn
  ):
      # Given
      update_product_set_method = (
          get_conn.return_value.update_product_set
      )
      update_product_set_method.return_value = None
      explicit_ps_name = ProductSearchClient.product_set_path(
          PROJECT_ID_TEST_2, LOC_ID_TEST_2, PRODUCTSET_ID_TEST_2
      )
      product_set = ProductSet(name=explicit_ps_name)
      template_ps_name = ProductSearchClient.product_set_path(
          PROJECT_ID_TEST, LOC_ID_TEST, PRODUCTSET_ID_TEST
      )
      # When
      # Location and product_set_id are passed in addition to a ProductSet with an explicit name,
      # but both names differ (constructed != explicit).
      # Should throw AirflowException in this case.
      with pytest.raises(AirflowException) as ctx:
          self.hook.update_product_set(
              location=LOC_ID_TEST,
              product_set_id=PRODUCTSET_ID_TEST,
              product_set=product_set,
              update_mask=None,
              project_id=PROJECT_ID_TEST,
              retry=DEFAULT,
              timeout=None,
              metadata=(),
          )
      err = ctx.value
      # self.assertIn("The required parameter 'project_id' is missing", str(err))
      assert err
      assert ERR_DIFF_NAMES.format(
          explicit_name=explicit_ps_name,
          constructed_name=template_ps_name,
          label="ProductSet",
          id_label="productset_id",
      ) in str(err)
      update_product_set_method.assert_not_called()
  
imports: from __future__ import annotations
  from unittest import mock
  import pytest
  from google.api_core.gapic_v1.method import DEFAULT
  from google.cloud.vision_v1 import AnnotateImageRequest, AnnotateImageResponse, EntityAnnotation, Feature, Product, ProductSearchClient, ProductSet, ReferenceImage, SafeSearchAnnotation
  from google.protobuf.json_format import MessageToDict
  from airflow.exceptions import AirflowException
  from airflow.providers.google.cloud.hooks.vision import ERR_DIFF_NAMES, ERR_UNABLE_TO_CREATE, CloudVisionHook
  from airflow.providers.google.common.consts import CLIENT_INFO
  from tests.providers.google.cloud.utils.base_gcp_mock import mock_base_gcp_hook_default_project_id
label_desc: Use image node_id 11 for calling the TestGcpVisionHook obj's underlying member method code with example usage: obj.test_update_productset_explicit_name_different_from_constructed(get_conn) without return types