def METHOD_NAME(self):
    window = self.create_mock_window()
    # start the mouse drag
    mouse_down_event = self.mouse_down(
        self.component, 145, 145, window=window
    )
    self.assertTrue(self.tool._mouse_down_received)
    # start moving the mouse
    mouse_move_event = self.mouse_move(
        self.component, 145, 145, window=window, left_down=True
    )
    self.assertTrue(mouse_move_event.handled)
    # move the mouse to the final location
    mouse_move_event = self.mouse_move(
        self.component, 195, 95, window=window, left_down=True
    )
    self.assertTrue(mouse_move_event.handled)
    # release the mouse, ending the drag
    mouse_up_event = self.mouse_up(self.component, 195, 95, window=window)
    self.assertTrue(mouse_up_event.handled)
    # check if a MoveCommand was pushed onto the stack
    args, kwargs = self.command_stack.push.call_args
    self.assertIsNotNone(args)
    self.assertEqual(len(args), 1)
    self.assertIsInstance(args[0], MoveCommand)
    command = args[0]
    # check that the MoveCommand has right parameters
    self.assertEqual(command.data, (100, 0))
    self.assertEqual(command.previous_position, (50, 50))
    self.assertFalse(command.mergeable)
    self.assertEqual(command.component, self.component)