"""Tests for the M2 live-monitor TUI logic (min/max tracking + color bands).""" import unittest from rigdoctor import tui from rigdoctor.core.sample import Reading, Sample def _temp(v): return Reading("gpu", "temp", v, "°C", "") class TrackTests(unittest.TestCase): def test_tracks_min_and_max(self): stats: dict = {} for v in (60.0, 80.0, 70.0, 55.0): tui.track(stats, Sample(0.0, [_temp(v)])) self.assertEqual(stats["gpu.temp"], (55.0, 80.0)) def test_ignores_none_values(self): stats: dict = {} tui.track(stats, Sample(0.0, [_temp(None)])) self.assertEqual(stats, {}) def test_keys_separate_by_label(self): stats: dict = {} tui.track(stats, Sample(0.0, [ Reading("cpu", "temp", 50.0, "°C", "Core 0"), Reading("cpu", "temp", 70.0, "°C", "Core 1"), ])) self.assertEqual(stats["cpu.temp.Core 0"], (50.0, 50.0)) self.assertEqual(stats["cpu.temp.Core 1"], (70.0, 70.0)) class BandTests(unittest.TestCase): def test_temperature_bands(self): self.assertEqual(tui.band(_temp(40.0)), "cold") self.assertEqual(tui.band(_temp(60.0)), "good") self.assertEqual(tui.band(_temp(80.0)), "warn") self.assertEqual(tui.band(_temp(90.0)), "crit") def test_usage_bands(self): self.assertEqual(tui.band(Reading("gpu", "util", 50.0, "%")), "good") self.assertEqual(tui.band(Reading("gpu", "util", 88.0, "%")), "warn") self.assertEqual(tui.band(Reading("memory", "used_pct", 96.0, "%")), "crit") def test_non_metric_percentage_is_normal(self): self.assertEqual(tui.band(Reading("gpu", "fan", 100.0, "%")), "normal") def test_gpu_lost_is_crit(self): self.assertEqual(tui.band(Reading("gpu", "status", None, "", "query-timeout")), "crit") def test_missing_value_is_na(self): self.assertEqual(tui.band(Reading("gpu", "power", None, "W")), "na") if __name__ == "__main__": unittest.main()