forked from IQ.Lvbs/IQ.Pilot
54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
import pytest
|
|
import numpy as np
|
|
|
|
from iqpilot.system.hardware.tici import qr_decode as qr_decode_module
|
|
from iqpilot.system.hardware.tici.lpa import parse_lpa_activation_code
|
|
from iqpilot.system.hardware.tici.qr_decode import validate_lpa_activation_code
|
|
|
|
|
|
def test_parse_valid_activation_code():
|
|
version, smdp, matching = parse_lpa_activation_code("LPA:1$rsp.truphone.com$QRF-BETTERROAMING")
|
|
assert version == "1"
|
|
assert smdp == "rsp.truphone.com"
|
|
assert matching == "QRF-BETTERROAMING"
|
|
|
|
|
|
@pytest.mark.parametrize("code", [
|
|
"",
|
|
"foo",
|
|
"LPA:2$rsp.truphone.com$abc",
|
|
"LPA:1$$abc",
|
|
"LPA:1$rsp.truphone.com$",
|
|
"LPA:1$rsp.truphone.com",
|
|
])
|
|
def test_parse_invalid_activation_code(code):
|
|
with pytest.raises(ValueError):
|
|
parse_lpa_activation_code(code)
|
|
|
|
|
|
def test_qr_validator_valid():
|
|
valid, reason = validate_lpa_activation_code("LPA:1$rsp.truphone.com$QRF-123")
|
|
assert valid
|
|
assert reason == ""
|
|
|
|
|
|
def test_qr_validator_invalid():
|
|
valid, reason = validate_lpa_activation_code("https://example.com")
|
|
assert not valid
|
|
assert reason
|
|
|
|
|
|
def test_decode_qr_prefers_pyzbar(monkeypatch):
|
|
class FakeResult:
|
|
data = b"LPA:1$rsp.truphone.com$QRF-123"
|
|
|
|
monkeypatch.setattr(qr_decode_module, "_pyzbar_decode", lambda arr: [FakeResult()])
|
|
|
|
def fail_load_decoder():
|
|
raise AssertionError("quirc fallback should not be used when pyzbar succeeds")
|
|
|
|
monkeypatch.setattr(qr_decode_module, "_load_decoder", fail_load_decoder)
|
|
|
|
payloads = qr_decode_module.decode_qr(np.zeros((4, 4), dtype=np.uint8))
|
|
assert payloads == ["LPA:1$rsp.truphone.com$QRF-123"]
|