code: def test_add_job_flow_steps_wait_for_completion(self, mock_conn):
      hook = EmrHook(
          aws_conn_id="aws_default",
          emr_conn_id="emr_default",
          region_name="us-east-1",
      )
      mock_conn.run_job_flow.return_value = {
          "JobFlowId": "job_flow_id",
          "ClusterArn": "cluster_arn",
      }
      mock_conn.add_job_flow_steps.return_value = {
          "StepIds": [
              "step_id",
          ],
          "ResponseMetadata": {"HTTPStatusCode": 200},
      }
  
      hook.create_job_flow(
          {
              "Name": "test_cluster",
              "Instances": {"KeepJobFlowAliveWhenNoSteps": False},
          }
      )
  
      steps = [
          {
              "ActionOnFailure": "test_step",
              "HadoopJarStep": {
                  "Args": ["test args"],
                  "Jar": "test.jar",
              },
              "Name": "step_1",
          }
      ]
  
      hook.add_job_flow_steps(
          job_flow_id="job_flow_id",
          steps=steps,
          wait_for_completion=True,
      )
  
      mock_conn.get_waiter.assert_called_once_with("step_complete")
  
imports: from __future__ import annotations
  import re
  from unittest import mock
  import boto3
  import pytest
  from botocore.exceptions import WaiterError
  from moto import mock_emr
  from airflow.exceptions import AirflowException
  from airflow.providers.amazon.aws.hooks.emr import EmrHook
label_desc: Use image node_id 5 for calling the TestEmrHook obj's underlying member method code with example usage: obj.test_add_job_flow_steps_wait_for_completion(mock_conn) without return types