async def METHOD_NAME(
    decoy: Decoy,
    state_store: StateStore,
    ot3_hardware_api: OT3API,
    movement: MovementHandler,
    mock_tip_handler: TipHandler,
) -> None:
    """It should stop the hardware, home the robot and perform drop tip if required."""
    subject = HardwareStopper(
        hardware_api=ot3_hardware_api,
        state_store=state_store,
        movement=movement,
        tip_handler=mock_tip_handler,
    )
    decoy.when(state_store.pipettes.get_all_attached_tips()).then_return(
        [
            ("pipette-id", TipGeometry(length=1.0, volume=2.0, diameter=3.0)),
        ]
    )
    decoy.when(state_store.config.use_virtual_gripper).then_return(False)
    decoy.when(ot3_hardware_api.has_gripper()).then_return(True)
    await subject.do_stop_and_recover(drop_tips_and_home=True)
    decoy.verify(
        await ot3_hardware_api.stop(home_after=False),
        await ot3_hardware_api.home_z(mount=OT3Mount.GRIPPER),
        await movement.home(
            axes=[MotorAxis.X, MotorAxis.Y, MotorAxis.LEFT_Z, MotorAxis.RIGHT_Z]
        ),
        await mock_tip_handler.add_tip(
            pipette_id="pipette-id",
            tip=TipGeometry(length=1.0, volume=2.0, diameter=3.0),
        ),
        await movement.move_to_well(
            pipette_id="pipette-id",
            labware_id="fixedTrash",
            well_name="A1",
        ),
        await mock_tip_handler.drop_tip(
            pipette_id="pipette-id",
            home_after=False,
        ),
        await ot3_hardware_api.stop(home_after=True),
    )