import pytest from openpilot.system.hardware.base import LPABase, Profile class MockLPA(LPABase): def bootstrap(self) -> None: pass def list_profiles(self) -> list[Profile]: return [] def get_active_profile(self) -> Profile | None: return None def delete_profile(self, iccid: str) -> None: pass def download_profile(self, qr: str, nickname: str | None = None) -> None: pass def nickname_profile(self, iccid: str, nickname: str) -> None: pass def switch_profile(self, iccid: str) -> None: pass class TestLPAValidation: def setup_method(self): self.lpa = MockLPA() def test_validate_iccid(self): self.lpa.validate_iccid('8988303000000614227') with pytest.raises(AssertionError, match='invalid ICCID format'): self.lpa.validate_iccid('') with pytest.raises(AssertionError, match='invalid ICCID format'): self.lpa.validate_iccid('1234567890123456789') # Doesn't start with 89 def test_validate_lpa_activation_code(self): self.lpa.validate_lpa_activation_code('LPA:1$rsp.truphone.com$QRF-BETTERROAMING-PMRDGIR2EARDEIT5') with pytest.raises(AssertionError, match='invalid LPA activation code format'): self.lpa.validate_lpa_activation_code('') with pytest.raises(AssertionError, match='invalid LPA activation code format'): self.lpa.validate_lpa_activation_code('LPA:1$domain.com') # Missing third part def test_validate_nickname(self): self.lpa.validate_nickname('test_profile') with pytest.raises(AssertionError, match='nickname must be between 1 and 16 characters'): self.lpa.validate_nickname('') with pytest.raises(AssertionError, match='nickname must contain only alphanumeric characters'): self.lpa.validate_nickname('test.profile') # Contains invalid character def test_validate_profile_exists(self, mocker): existing_profiles = [Profile(iccid='8988303000000614227', nickname='test1', enabled=True, provider='Test Provider')] mocker.patch.object(self.lpa, 'list_profiles', return_value=existing_profiles) self.lpa.validate_profile_exists('8988303000000614227') mocker.patch.object(self.lpa, 'list_profiles', return_value=[]) with pytest.raises(AssertionError, match='profile 8988303000000614227 does not exist'): self.lpa.validate_profile_exists('8988303000000614227') mocker.patch.object(self.lpa, 'list_profiles', return_value=existing_profiles) with pytest.raises(AssertionError, match='profile 8988303000000614229 does not exist'): self.lpa.validate_profile_exists('8988303000000614229')