Skip to content

Commit 146e652

Browse files
committed
test(vehicle_components): added pytests to the recently added functionality
1 parent b4cc065 commit 146e652

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

tests/test_backend_filesystem_vehicle_components.py

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,93 @@ def test_get_vehicle_image_filepath(self, mock_join, mock_get_base_dir) -> None:
164164
mock_join.assert_called_once_with("/templates", "copter", "vehicle.jpg")
165165
assert result == "/templates/copter/vehicle.jpg"
166166

167+
def test_wipe_component_info(self) -> None:
168+
# Test with nested dictionary containing various data types
169+
self.vehicle_components.vehicle_components = {
170+
"Components": {
171+
"Flight Controller": {
172+
"Firmware": {"Type": "ArduCopter", "Version": "4.3.0"},
173+
"Hardware": {"Model": "Pixhawk", "Ports": 5, "Sensors": ["GPS", "Barometer", "IMU"]},
174+
"Options": {"Enabled": True, "Value": 42.5},
175+
}
176+
}
177+
}
178+
179+
# Call the method to wipe
180+
self.vehicle_components.wipe_component_info()
181+
182+
# Verify structure is preserved but values are cleared
183+
result = self.vehicle_components.vehicle_components
184+
assert "Components" in result
185+
assert "Flight Controller" in result["Components"]
186+
assert "Firmware" in result["Components"]["Flight Controller"]
187+
assert result["Components"]["Flight Controller"]["Firmware"]["Type"] == ""
188+
assert result["Components"]["Flight Controller"]["Firmware"]["Version"] == ""
189+
assert result["Components"]["Flight Controller"]["Hardware"]["Model"] == ""
190+
assert result["Components"]["Flight Controller"]["Hardware"]["Ports"] == 0
191+
assert result["Components"]["Flight Controller"]["Hardware"]["Sensors"] == []
192+
assert result["Components"]["Flight Controller"]["Options"]["Enabled"] == 0
193+
assert result["Components"]["Flight Controller"]["Options"]["Value"] == 0.0
194+
195+
@patch("builtins.open")
196+
def test_save_vehicle_components_json_data_file_not_found(self, mock_open) -> None: # pylint: disable=redefined-outer-name
197+
mock_open.side_effect = FileNotFoundError()
198+
199+
result, msg = self.vehicle_components.save_vehicle_components_json_data(self.valid_component_data, "/nonexistent/dir")
200+
201+
assert result # True means error
202+
assert "not found" in msg
203+
204+
@patch("builtins.open")
205+
def test_save_vehicle_components_json_data_permission_error(self, mock_open) -> None: # pylint: disable=redefined-outer-name
206+
mock_open.side_effect = PermissionError()
207+
208+
result, msg = self.vehicle_components.save_vehicle_components_json_data(self.valid_component_data, "/test/dir")
209+
210+
assert result # True means error
211+
assert "Permission denied" in msg
212+
213+
@patch("builtins.open")
214+
def test_save_vehicle_components_json_data_is_a_directory_error(self, mock_open) -> None: # pylint: disable=redefined-outer-name
215+
mock_open.side_effect = IsADirectoryError()
216+
217+
result, msg = self.vehicle_components.save_vehicle_components_json_data(self.valid_component_data, "/test/dir")
218+
219+
assert result # True means error
220+
assert "is a directory" in msg.lower()
221+
222+
@patch("builtins.open")
223+
def test_save_vehicle_components_json_data_os_error(self, mock_open) -> None: # pylint: disable=redefined-outer-name
224+
mock_open.side_effect = OSError("Disk full")
225+
226+
result, msg = self.vehicle_components.save_vehicle_components_json_data(self.valid_component_data, "/test/dir")
227+
228+
assert result # True means error
229+
assert "OS error" in msg
230+
assert "Disk full" in msg
231+
232+
@patch("builtins.open", new_callable=mock_open)
233+
@patch("ardupilot_methodic_configurator.backend_filesystem_vehicle_components.json_dump")
234+
def test_save_vehicle_components_json_data_type_error(self, mock_json_dump, mock_file) -> None: # pylint: disable=unused-argument
235+
mock_json_dump.side_effect = TypeError("Invalid type")
236+
237+
result, msg = self.vehicle_components.save_vehicle_components_json_data(self.valid_component_data, "/test/dir")
238+
239+
assert result # True means error
240+
assert "Type error" in msg
241+
assert "Invalid type" in msg
242+
243+
@patch("builtins.open", new_callable=mock_open)
244+
@patch("ardupilot_methodic_configurator.backend_filesystem_vehicle_components.json_dump")
245+
def test_save_vehicle_components_json_data_value_error(self, mock_json_dump, mock_file) -> None: # pylint: disable=unused-argument
246+
mock_json_dump.side_effect = ValueError("Circular reference")
247+
248+
result, msg = self.vehicle_components.save_vehicle_components_json_data(self.valid_component_data, "/test/dir")
249+
250+
assert result # True means error
251+
assert "Value error" in msg
252+
assert "Circular reference" in msg
253+
167254

168255
if __name__ == "__main__":
169256
unittest.main()

0 commit comments

Comments
 (0)