"""Unit tests for sysfs reader."""

from __future__ import annotations

import tempfile
import unittest
from pathlib import Path

from temp.reader import c_to_f, find_devices, read_all_f, read_temp_c


GOOD_SLAVE = "a1 01 4b 46 7f ff 0c 10 fe : crc=fe YES\nt=25000\n"
BAD_SLAVE = "a1 01 4b 46 7f ff 0c 10 fe : crc=fe NO\nt=25000\n"


class TestReader(unittest.TestCase):
    def test_c_to_f(self) -> None:
        self.assertAlmostEqual(c_to_f(0.0), 32.0)
        self.assertAlmostEqual(c_to_f(100.0), 212.0)

    def test_read_fake_sysfs(self) -> None:
        with tempfile.TemporaryDirectory() as tmp:
            base = Path(tmp)
            dev = base / "28-000000000001"
            dev.mkdir()
            (dev / "w1_slave").write_text(GOOD_SLAVE)
            self.assertEqual(find_devices(base), ["28-000000000001"])
            self.assertAlmostEqual(read_temp_c(base, "28-000000000001"), 25.0)
            all_f = read_all_f(base)
            self.assertAlmostEqual(all_f["28-000000000001"], 77.0)

    def test_crc_fail(self) -> None:
        with tempfile.TemporaryDirectory() as tmp:
            base = Path(tmp)
            dev = base / "28-000000000002"
            dev.mkdir()
            (dev / "w1_slave").write_text(BAD_SLAVE)
            self.assertIsNone(read_temp_c(base, "28-000000000002"))


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