code: def test_multihop_node(
      request: FixtureRequest,
      mf_test_session_state: MetricFlowTestSessionState,
      multihop_dataflow_plan_builder: DataflowPlanBuilder,
      multihop_dataflow_to_sql_converter: DataflowToSqlQueryPlanConverter,
      sql_client: SqlClient,
  ) -> None:
      """Tests converting a dataflow plan to a SQL query plan where there is a join between 1 measure and 2 dimensions."""
      dataflow_plan = multihop_dataflow_plan_builder.build_plan(
          MetricFlowQuerySpec(
              metric_specs=(MetricSpec(element_name="txn_count"),),
              dimension_specs=(
                  DimensionSpec(
                      element_name="customer_name",
                      entity_links=(
                          EntityReference(element_name="account_id"),
                          EntityReference(element_name="customer_id"),
                      ),
                  ),
              ),
          )
      )
  
      convert_and_check(
          request=request,
          mf_test_session_state=mf_test_session_state,
          dataflow_to_sql_converter=multihop_dataflow_to_sql_converter,
          sql_client=sql_client,
          node=dataflow_plan.sink_output_nodes[0].parent_node,
      )
  
imports: from __future__ import annotations
  import pytest
  from _pytest.fixtures import FixtureRequest
  from dbt_semantic_interfaces.implementations.filters.where_filter import PydanticWhereFilter
  from dbt_semantic_interfaces.naming.keywords import METRIC_TIME_ELEMENT_NAME
  from dbt_semantic_interfaces.references import EntityReference
  from dbt_semantic_interfaces.test_utils import as_datetime
  from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity
  from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder
  from metricflow.dataset.dataset import DataSet
  from metricflow.filters.time_constraint import TimeRangeConstraint
  from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup
  from metricflow.plan_conversion.column_resolver import DunderColumnAssociationResolver
  from metricflow.plan_conversion.dataflow_to_sql import DataflowToSqlQueryPlanConverter
  from metricflow.protocols.sql_client import SqlClient
  from metricflow.query.query_parser import MetricFlowQueryParser
  from metricflow.specs.column_assoc import ColumnAssociationResolver
  from metricflow.specs.specs import DimensionSpec, MetricFlowQuerySpec, MetricSpec, TimeDimensionSpec
  from metricflow.test.fixtures.model_fixtures import ConsistentIdObjectRepository
  from metricflow.test.fixtures.setup_fixtures import MetricFlowTestSessionState
  from metricflow.test.query_rendering.compare_rendered_query import convert_and_check
  from metricflow.test.time.metric_time_dimension import MTD_SPEC_DAY
label_desc: Use image node_id 3 for calling a global function with example usage: test_multihop_node(request, mf_test_session_state, multihop_dataflow_plan_builder, multihop_dataflow_to_sql_converter, sql_client) without return types