class TestMotionService(object): SAMPLE_SPEED = 10 SAMPLE_ROTATION_ANGLE = 20 SAMPLE_DESTINATION = Vector2(35, 67) SAMPLE_PATH = object() SAMPLE_ROBOT_SIDE = object() SAMPLE_BOOLEAN = True @mock.patch('services.motion.navigation.PathNavigator.PathNavigator', autospec = False) @mock.patch('services.motion.MovementExecutor.MovementExecutor', autospec = False) def setup(self, movement_executor_mock, path_navigator_mock): self._movement_executor_mock_instance = movement_executor_mock.return_value self._path_navigator_mock_instance = path_navigator_mock.return_value self._motion_service = MotionService(self._movement_executor_mock_instance, self._path_navigator_mock_instance) def test_given_forward_movement_speed_when_moving_then_movement_executor_is_called(self): self._motion_service.move(forward_speed = self.SAMPLE_SPEED) self._movement_executor_mock_instance.move.assert_any_call(movement_type = MovementType.MOVE_FORWARD, speed_cmps = self.SAMPLE_SPEED) def test_given_backward_movement_speed_when_moving_then_movement_executor_is_called(self): self._motion_service.move(backward_speed = self.SAMPLE_SPEED) self._movement_executor_mock_instance.move.assert_any_call(movement_type = MovementType.MOVE_BACKWARD, speed_cmps = self.SAMPLE_SPEED) def test_given_left_movement_speed_when_moving_then_movement_executor_is_called(self): self._motion_service.move(left_speed = self.SAMPLE_SPEED) self._movement_executor_mock_instance.move.assert_any_call(movement_type = MovementType.MOVE_LEFT, speed_cmps = self.SAMPLE_SPEED) def test_given_right_movement_speed_when_moving_then_movement_executor_is_called(self): self._motion_service.move(right_speed = self.SAMPLE_SPEED) self._movement_executor_mock_instance.move.assert_any_call(movement_type = MovementType.MOVE_RIGHT, speed_cmps = self.SAMPLE_SPEED) def test_given_rotate_left_movement_speed_when_moving_then_movement_executor_is_called(self): self._motion_service.move(rotate_left_speed = self.SAMPLE_SPEED) self._movement_executor_mock_instance.move.assert_any_call(movement_type = MovementType.ROTATE_LEFT, speed_cmps = self.SAMPLE_SPEED) def test_given_rotate_right_movement_speed_when_moving_then_movement_executor_is_called(self): self._motion_service.move(rotate_right_speed = self.SAMPLE_SPEED) self._movement_executor_mock_instance.move.assert_any_call(movement_type = MovementType.ROTATE_RIGHT, speed_cmps = self.SAMPLE_SPEED) def test_given_rotate_angle_when_rotating_the_move_movement_executor_is_called(self): self._motion_service.rotate(self.SAMPLE_ROTATION_ANGLE, self.SAMPLE_SPEED) self._movement_executor_mock_instance.rotate.assert_called_with(angle_deg = self.SAMPLE_ROTATION_ANGLE, speed_cmps = self.SAMPLE_SPEED) def test_given_destination_when_moving_then_movement_executor_is_called(self): self._motion_service.move_to(self.SAMPLE_DESTINATION, self.SAMPLE_SPEED) self._movement_executor_mock_instance.move_to.assert_called_with(destination_cm = self.SAMPLE_DESTINATION, max_speed_cmps = self.SAMPLE_SPEED) def test_given_path_when_navigating_path_then_path_navigator_is_called(self): self._motion_service.navigate_path(self.SAMPLE_PATH, self.SAMPLE_DESTINATION, self.SAMPLE_ROBOT_SIDE, self.SAMPLE_BOOLEAN) self._path_navigator_mock_instance.navigate.assert_called_with(self.SAMPLE_PATH, MotionService.NORMAL_NAVIGATION_MOVE_SPEED_CMPS, MotionService.NORMAL_NAVIGATION_ROTATION_SPEED_CMPS, self.SAMPLE_DESTINATION, self.SAMPLE_ROBOT_SIDE, self.SAMPLE_BOOLEAN) def test_when_stopping_movenent_then_movement_is_stopped(self): self._motion_service.stop_movement() self._movement_executor_mock_instance.stop_movement.assert_called_with() self._path_navigator_mock_instance.stop_navigation.assert_called_with()
def setup(self, movement_executor_mock, path_navigator_mock): self._movement_executor_mock_instance = movement_executor_mock.return_value self._path_navigator_mock_instance = path_navigator_mock.return_value self._motion_service = MotionService(self._movement_executor_mock_instance, self._path_navigator_mock_instance)