code: def test_join_type_coverage() -> None:
      """Ensures all entity type pairs are handled somewhere in the valid/invalid join mapping sets.
  
      This will prevent surprise RuntimeErrors in production by raising static exceptions for unhandled entity types
      and triggering a test failure for types which are handled in a non-exhaustive fashion
      """
      all_join_types = set(
          SemanticModelJoinEvaluator._INVALID_ENTITY_JOINS
          + SemanticModelJoinEvaluator._VALID_ENTITY_JOINS
      )
      for entity_type in EntityType:
          join_types = _get_join_types_for_entity_type(
              entity_type=entity_type
          )
          for join_type in join_types:
              assert (
                  join_type in all_join_types
              ), f"Unhandled entity join type {join_type} not in valid or invalid entity join lists!"
  
file_path: metricflow/metricflow/test/model/semantics/test_semantic_model_join_evaluator.py
imports: from __future__ import annotations
  from typing import Dict, Sequence
  from dbt_semantic_interfaces.enum_extension import assert_values_exhausted
  from dbt_semantic_interfaces.protocols.entity import EntityType
  from dbt_semantic_interfaces.references import EntityReference, SemanticModelReference
  from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup
  from metricflow.model.semantics.semantic_model_join_evaluator import SemanticModelEntityJoin, SemanticModelEntityJoinType, SemanticModelJoinEvaluator, SemanticModelLink
  from metricflow.test.fixtures.model_fixtures import ConsistentIdObjectRepository
label_desc: Use image node_id 2 for calling a global function with example usage: test_join_type_coverage() without return types