code: def test_transform_empty_step(tmp_recipe_root_path, monkeypatch):
      monkeypatch.setenv(
          MLFLOW_RECIPES_EXECUTION_DIRECTORY.name,
          str(tmp_recipe_root_path),
      )
      with mock.patch(
          "steps.transform.transformer_fn", return_value=None
      ):
          (
              transform_step,
              transform_step_output_dir,
              split_step_output_dir,
          ) = set_up_transform_step(
              tmp_recipe_root_path, "transformer_fn"
          )
          transform_step.run(str(transform_step_output_dir))
  
      assert os.path.exists(
          transform_step_output_dir
          / "transformed_training_data.parquet"
      )
      train_transformed = pd.read_parquet(
          transform_step_output_dir
          / "transformed_training_data.parquet"
      )
      train_split = pd.read_parquet(
          split_step_output_dir / "train.parquet"
      )
  
      assert train_transformed.equals(train_split) is True
      assert os.path.exists(
          transform_step_output_dir / "transformer.pkl"
      )
  
file_path: mlflow/tests/recipes/test_transform_step.py
imports: import os
  from pathlib import Path
  from unittest import mock
  import pandas
  import pytest
  import mlflow
  from mlflow import MlflowClient
  from mlflow.environment_variables import MLFLOW_RECIPES_EXECUTION_DIRECTORY
  from mlflow.exceptions import MlflowException
  from mlflow.recipes.steps.transform import TransformStep, _validate_user_code_output
  from mlflow.recipes.utils import _RECIPE_CONFIG_FILE_NAME
  from mlflow.utils.file_utils import read_yaml
label_desc: Use image node_id 5 for calling a global function with example usage: test_transform_empty_step(tmp_recipe_root_path, monkeypatch) without return types