"""Offline tests for battery SoC extraction (no radio/hardware needed).""" import unittest from franklinwh_agate_client.battery import extract_soc class TestExtractSoc(unittest.TestCase): def test_current_battery_soc_wins(self): reply = {"cmdType": 25, "data": {"currentBatterySoc": 78, "soc": 10}} out = extract_soc(reply) self.assertEqual(out["value"], 78) self.assertEqual(out["source"], "currentBatterySoc") def test_soc_fallback(self): out = extract_soc({"data": {"soc": "55"}}) self.assertEqual(out["value"], 55) self.assertEqual(out["source"], "soc") def test_soc_array_averaged(self): out = extract_soc({"data": {"socArray": [80, 90]}}) self.assertEqual(out["value"], 85) self.assertEqual(out["source"], "socArray(avg)") def test_nested_data_string(self): import json reply = {"data": json.dumps({"aPower": {"soc": 62}})} out = extract_soc(reply) self.assertEqual(out["value"], 62) def test_missing_soc(self): out = extract_soc({"data": {"foo": 1}}) self.assertIsNone(out["value"]) self.assertIsNone(out["source"]) if __name__ == "__main__": unittest.main()