57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
import pytest
|
|
from yuxi.channel.security.qr_binding import PairingQRGenerator
|
|
|
|
|
|
@pytest.fixture
|
|
def qr_generator() -> PairingQRGenerator:
|
|
return PairingQRGenerator()
|
|
|
|
|
|
@pytest.mark.unit
|
|
class TestPairingQRGeneratorGenerateContent:
|
|
def test_plain_mode_returns_raw_code(self, qr_generator: PairingQRGenerator) -> None:
|
|
code = "123456"
|
|
result = qr_generator.generate_content(code, "feishu", "acc_1", "peer_1", mode="plain")
|
|
assert result == code
|
|
|
|
def test_link_mode_returns_url_when_base_url_provided(self, qr_generator: PairingQRGenerator) -> None:
|
|
generator = PairingQRGenerator(base_url="https://example.com")
|
|
result = generator.generate_content("123456", "feishu", "acc_1", "peer_1", mode="link")
|
|
assert result == ("https://example.com/pairing?code=123456&channel=feishu&account=acc_1&peer_id=peer_1")
|
|
|
|
def test_link_mode_falls_back_to_code_when_base_url_missing(self, qr_generator: PairingQRGenerator) -> None:
|
|
code = "123456"
|
|
result = qr_generator.generate_content(code, "feishu", "acc_1", "peer_1", mode="link")
|
|
assert result == code
|
|
|
|
|
|
@pytest.mark.unit
|
|
class TestPairingQRGeneratorGenerateImage:
|
|
PNG_HEADER = b"\x89PNG\r\n\x1a\n"
|
|
|
|
def test_generate_image_returns_png_bytes(self, qr_generator: PairingQRGenerator) -> None:
|
|
image = qr_generator.generate_image("test-content")
|
|
assert image
|
|
assert isinstance(image, bytes)
|
|
assert image.startswith(self.PNG_HEADER)
|
|
|
|
@pytest.mark.parametrize(
|
|
("box_size", "border"),
|
|
[
|
|
(1, 0),
|
|
(10, 2),
|
|
(20, 5),
|
|
],
|
|
)
|
|
def test_generate_image_with_various_sizes(
|
|
self,
|
|
qr_generator: PairingQRGenerator,
|
|
box_size: int,
|
|
border: int,
|
|
) -> None:
|
|
image = qr_generator.generate_image("test-content", box_size=box_size, border=border)
|
|
assert image
|
|
assert image.startswith(self.PNG_HEADER)
|