Add clear DTC codes button to Pi DTC page (FEAT-15)

This commit is contained in:
Mathieu Moran
2026-08-13 16:40:15 -04:00
parent b39faadf58
commit e873db918d
8 changed files with 187 additions and 2 deletions
+47 -1
View File
@@ -1,5 +1,7 @@
import unittest
from unittest.mock import patch
from unittest.mock import MagicMock, patch
import obd
from modules import app_obd
@@ -26,5 +28,49 @@ class CarConnectedFlagTest(unittest.TestCase):
mock_set.assert_called_once_with("car_ever_connected", "1")
class ClearDtcCodesTest(unittest.TestCase):
def setUp(self):
self.original_connection = app_obd.connection
self.original_dtc_codes = app_obd.dtc_codes
self.original_mil_on = app_obd.mil_on
def tearDown(self):
app_obd.connection = self.original_connection
app_obd.dtc_codes = self.original_dtc_codes
app_obd.mil_on = self.original_mil_on
def test_not_connected_returns_not_connected(self):
app_obd.connection = None
result = app_obd.clear_dtc_codes()
self.assertEqual(result["status"], "not_connected")
def test_connected_clears_ecu_and_resets_state(self):
fake_conn = MagicMock()
app_obd.connection = fake_conn
app_obd.dtc_codes = [{"code": "P0300", "description": "Misfire"}]
app_obd.mil_on = True
with patch.object(app_obd, "_is_car_connected", return_value=True), \
patch("modules.app_sql.clear_dtc_state") as mock_clear, \
patch("modules.app_events.socketio.emit") as mock_emit:
result = app_obd.clear_dtc_codes()
self.assertEqual(result["status"], "cleared")
fake_conn.query.assert_called_once_with(obd.commands.CLEAR_DTC)
self.assertEqual(app_obd.dtc_codes, [])
self.assertFalse(app_obd.mil_on)
mock_clear.assert_called_once_with()
self.assertTrue(mock_emit.called)
def test_query_error_returns_error(self):
fake_conn = MagicMock()
fake_conn.query.side_effect = RuntimeError("boom")
app_obd.connection = fake_conn
with patch.object(app_obd, "_is_car_connected", return_value=True), \
patch.object(app_obd, "_mark_connection_lost") as mock_mark:
result = app_obd.clear_dtc_codes()
self.assertEqual(result["status"], "error")
self.assertIn("boom", result["error"])
mock_mark.assert_called_once()
if __name__ == "__main__":
unittest.main()