31 lines
877 B
Python
31 lines
877 B
Python
import base64
|
|
import io
|
|
|
|
from PIL import Image
|
|
|
|
from app.services.captcha import (
|
|
CAPTCHA_FONT_SIZE,
|
|
CAPTCHA_HEIGHT,
|
|
CAPTCHA_WIDTH,
|
|
load_captcha_font,
|
|
make_captcha,
|
|
verify_captcha,
|
|
)
|
|
|
|
|
|
def test_captcha_can_only_be_used_once():
|
|
captcha = make_captcha()
|
|
captcha_id = captcha["captcha_id"]
|
|
# The real code is intentionally not exposed. This test locks in one-time consumption behavior.
|
|
assert not verify_captcha(captcha_id, "bad")
|
|
assert not verify_captcha(captcha_id, "bad")
|
|
|
|
|
|
def test_captcha_uses_large_font_and_expected_image_size():
|
|
captcha = make_captcha()
|
|
encoded_image = captcha["image"].split(",", 1)[1]
|
|
image = Image.open(io.BytesIO(base64.b64decode(encoded_image)))
|
|
|
|
assert image.size == (CAPTCHA_WIDTH, CAPTCHA_HEIGHT)
|
|
assert getattr(load_captcha_font(), "size", CAPTCHA_FONT_SIZE) == CAPTCHA_FONT_SIZE
|