from pypos.modules.scanner.services.scanner_pairing_service import ScannerPairingService


def test_normalize_discovered_devices_deduplicate():
    svc = ScannerPairingService()
    rows = svc.normalize_discovered_devices(
        [
            {"name": r"\\?\HID#VID_05E0&PID_1200#A", "token": ""},
            {"name": r"\\?\HID#VID_05E0&PID_1200#A", "token": ""},
            {"name": r"\\?\HID#VID_1234&PID_ABCD#B", "token": "hid#vid_1234&pid_abcd"},
        ]
    )
    assert len(rows) == 2
    assert rows[0]["token"] == "hid#vid_05e0&pid_1200"
    assert rows[1]["token"] == "hid#vid_1234&pid_abcd"


def test_pair_device_append_and_replace():
    svc = ScannerPairingService()
    current = {"rawinput_whitelist": ["hid#vid_0001&pid_0002"]}
    selected = {"name": r"\\?\HID#VID_05E0&PID_1200#A", "token": ""}

    append_payload = svc.pair_device(current, selected, replace=False)
    assert append_payload is not None
    assert append_payload["rawinput_whitelist"] == [
        "hid#vid_0001&pid_0002",
        "hid#vid_05e0&pid_1200",
    ]

    replace_payload = svc.pair_device(current, selected, replace=True)
    assert replace_payload is not None
    assert replace_payload["rawinput_whitelist"] == ["hid#vid_05e0&pid_1200"]
