ariadne/tests/test_utils.py

90 lines
2.8 KiB
Python
Raw Normal View History

2026-01-19 16:57:18 -03:00
from __future__ import annotations
import re
import httpx
2026-01-19 16:57:18 -03:00
from ariadne.services.mailu import MailuService
from ariadne.utils.errors import safe_error_detail
2026-01-19 19:01:32 -03:00
from ariadne.utils.http import extract_bearer_token
from ariadne.utils.passwords import random_password
2026-01-19 19:01:32 -03:00
class DummyRequest:
def __init__(self, headers):
self.headers = headers
2026-01-19 16:57:18 -03:00
def test_random_password_length() -> None:
password = random_password(24)
assert len(password) == 24
assert re.match(r"^[A-Za-z0-9]+$", password)
def test_mailu_resolve_email_attribute() -> None:
attrs = {"mailu_email": ["custom@bstein.dev"]}
assert MailuService.resolve_mailu_email("alice", attrs) == "custom@bstein.dev"
def test_mailu_resolve_email_string() -> None:
attrs = {"mailu_email": "custom@bstein.dev"}
assert MailuService.resolve_mailu_email("alice", attrs) == "custom@bstein.dev"
2026-01-19 16:57:18 -03:00
def test_mailu_resolve_email_default() -> None:
assert MailuService.resolve_mailu_email("alice", {}) == "alice@bstein.dev"
def test_safe_error_detail_runtime() -> None:
assert safe_error_detail(RuntimeError("boom"), "fallback") == "boom"
2026-01-19 19:01:32 -03:00
def test_safe_error_detail_http_status_json() -> None:
request = httpx.Request("GET", "https://example.com")
response = httpx.Response(400, json={"errorMessage": "bad things"}, request=request)
exc = httpx.HTTPStatusError("bad", request=request, response=response)
detail = safe_error_detail(exc, "fallback")
assert "http 400" in detail
assert "bad things" in detail
def test_safe_error_detail_http_status_text() -> None:
request = httpx.Request("GET", "https://example.com")
response = httpx.Response(500, text="bad error", request=request)
exc = httpx.HTTPStatusError("bad", request=request, response=response)
detail = safe_error_detail(exc, "fallback")
assert "http 500" in detail
assert "bad error" in detail
def test_safe_error_detail_http_status_string() -> None:
request = httpx.Request("GET", "https://example.com")
response = httpx.Response(400, json="bad string", request=request)
exc = httpx.HTTPStatusError("bad", request=request, response=response)
detail = safe_error_detail(exc, "fallback")
assert "http 400" in detail
assert "bad string" in detail
def test_safe_error_detail_timeout() -> None:
exc = httpx.TimeoutException("timeout")
assert safe_error_detail(exc, "fallback") == "timeout"
2026-01-19 19:01:32 -03:00
def test_extract_bearer_token() -> None:
request = DummyRequest({"Authorization": "Bearer token123"})
assert extract_bearer_token(request) == "token123"
def test_extract_bearer_token_invalid() -> None:
request = DummyRequest({"Authorization": "Basic abc"})
assert extract_bearer_token(request) is None
def test_extract_bearer_token_missing_parts() -> None:
request = DummyRequest({"Authorization": "Bearer"})
assert extract_bearer_token(request) is None