@@ -84,8 +84,33 @@ def test_mission_not_successful(self):
84
84
mock_goal_handle .abort .assert_called_once ()
85
85
self .assertEqual (result .mission_results [0 ].task_status , TaskStatus .ERROR )
86
86
87
+ def test_mission_not_successful_skipping_task (self ):
88
+ """Tests that the mission is properly cancelled or aborted when a subtask is skipped."""
89
+ request = MissionAction .Goal (
90
+ subtasks = [SubtaskGoal (task_name = "test/mock_subtask" , allow_skipping = True , task_data = "{}" )]
91
+ )
92
+ mock_goal_handle = Mock (request = request )
93
+ mock_goal_handle .is_cancel_requested = True
94
+
95
+ with self .subTest ("mission_canceled" ):
96
+ self .mission .execute_task_cb .return_value = ExecuteTask .Result (
97
+ task_status = TaskStatus .CANCELED , task_result = "{}"
98
+ )
99
+ result = self .mission .execute_cb (goal_handle = mock_goal_handle )
100
+ mock_goal_handle .canceled .assert_called_once ()
101
+ self .assertEqual (result .mission_results [0 ].task_status , TaskStatus .CANCELED )
102
+
103
+ mock_goal_handle .reset_mock ()
104
+ with self .subTest ("mission_error" ):
105
+ self .mission .execute_task_cb .return_value = ExecuteTask .Result (
106
+ task_status = TaskStatus .ERROR , task_result = "{}"
107
+ )
108
+ result = self .mission .execute_cb (goal_handle = mock_goal_handle )
109
+ mock_goal_handle .abort .assert_called_once ()
110
+ self .assertEqual (result .mission_results [0 ].task_status , TaskStatus .ERROR )
111
+
87
112
def test_skipping_subtask (self ):
88
- """Tests that even tho a subtask is aborted, no error is raised when the task is allowed to be skipped."""
113
+ """Tests that even though a subtask is aborted, no error is raised when the task is allowed to be skipped."""
89
114
request = MissionAction .Goal ()
90
115
request .subtasks = [
91
116
SubtaskGoal (task_name = "test/mock_subtask" , task_data = "{}" , allow_skipping = True , task_id = "123" )
@@ -97,8 +122,9 @@ def test_skipping_subtask(self):
97
122
expected_result .mission_results = [
98
123
SubtaskResult (task_name = "test/mock_subtask" , task_status = TaskStatus .ERROR , skipped = True , task_id = "123" )
99
124
]
100
-
101
- result = self .mission .execute_cb (goal_handle = Mock (request = request ))
125
+ mock_goal_handle = Mock (request = request )
126
+ mock_goal_handle .is_cancel_requested = False
127
+ result = self .mission .execute_cb (goal_handle = mock_goal_handle )
102
128
self .assertEqual (result , expected_result )
103
129
104
130
0 commit comments