| from math import inf |
| from secrets import token_urlsafe |
|
|
| import pytest |
| from fastapi.testclient import TestClient |
| from httpx import Response |
| from pytest_benchmark.fixture import BenchmarkFixture |
|
|
|
|
| @pytest.fixture(scope="package") |
| def client(): |
| from hibiapi.app import app, application |
|
|
| application.RATE_LIMIT_MAX = inf |
|
|
| with TestClient(app, base_url="http://testserver/api/") as client: |
| yield client |
|
|
|
|
| def test_qrcode_generate(client: TestClient, in_stress: bool = False): |
| response = client.get( |
| "qrcode/", |
| params={ |
| "text": token_urlsafe(32), |
| "encode": "raw", |
| }, |
| ) |
| assert response.status_code == 200 |
| assert "image/png" in response.headers["content-type"] |
|
|
| if in_stress: |
| return True |
|
|
|
|
| def test_qrcode_all(client: TestClient): |
| from hibiapi.api.qrcode import QRCodeLevel, ReturnEncode |
|
|
| encodes = [i.value for i in ReturnEncode.__members__.values()] |
| levels = [i.value for i in QRCodeLevel.__members__.values()] |
| responses: list[Response] = [] |
| for encode in encodes: |
| for level in levels: |
| response = client.get( |
| "qrcode/", |
| params={"text": "Hello, World!", "encode": encode, "level": level}, |
| ) |
| responses.append(response) |
| assert not any(map(lambda r: r.status_code != 200, responses)) |
|
|
|
|
| def test_qrcode_stress(client: TestClient, benchmark: BenchmarkFixture): |
| assert benchmark.pedantic( |
| test_qrcode_generate, |
| args=(client, True), |
| rounds=50, |
| iterations=3, |
| ) |
|
|
|
|
| def test_qrcode_redirect(client: TestClient): |
| response = client.get("http://testserver/qrcode/", params={"text": "Hello, World!"}) |
|
|
| assert response.status_code == 200 |
|
|
| redirect1, redirect2 = response.history |
|
|
| assert redirect1.status_code == 301 |
| assert redirect2.status_code == 302 |
|
|