"""Tests for update system — TDD: tests before implementation.""" import pytest from pathlib import Path from i2p_apps.updater.version import Version, compare_versions from i2p_apps.updater.su3 import SU3Header, parse_su3_header from i2p_apps.updater.checker import UpdateChecker, UpdateInfo class TestVersion: def test_parse(self): v = Version("0.9.62") assert v.major == 0 assert v.minor == 9 assert v.patch == 62 def test_compare_equal(self): assert compare_versions("0.9.62", "0.9.62") == 0 def test_compare_newer(self): assert compare_versions("0.9.63", "0.9.62") > 0 def test_compare_older(self): assert compare_versions("0.9.61", "0.9.62") < 0 def test_compare_major(self): assert compare_versions("1.0.0", "0.9.99") > 0 def test_str(self): v = Version("2.4.0") assert str(v) == "2.4.0" def test_two_part(self): v = Version("0.9") assert v.major == 0 assert v.minor == 9 assert v.patch == 0 class TestSU3Header: def test_magic(self): # SU3 files start with magic "I2Psu3" data = b"I2Psu3" + b"\x00" * 50 header = parse_su3_header(data) assert header is not None assert header.magic == "I2Psu3" def test_invalid_magic(self): data = b"NOTSU3" + b"\x00" * 50 header = parse_su3_header(data) assert header is None def test_too_short(self): data = b"I2P" header = parse_su3_header(data) assert header is None class TestUpdateChecker: def test_creation(self): checker = UpdateChecker(current_version="0.9.62") assert checker.current_version == "0.9.62" def test_needs_update_true(self): checker = UpdateChecker(current_version="0.9.62") info = UpdateInfo(version="0.9.63", url="http://example.i2p/update.su3") assert checker.needs_update(info) is True def test_needs_update_false(self): checker = UpdateChecker(current_version="0.9.63") info = UpdateInfo(version="0.9.62", url="http://example.i2p/update.su3") assert checker.needs_update(info) is False def test_needs_update_same(self): checker = UpdateChecker(current_version="0.9.62") info = UpdateInfo(version="0.9.62", url="http://example.i2p/update.su3") assert checker.needs_update(info) is False