Files

36 lines
1.1 KiB
Python

import base64
from types import SimpleNamespace
import pytest
from pydantic import SecretStr
from app.domain import DomainError
from app.main import basic_auth, bearer_auth
def request_with(authorization: str):
settings = SimpleNamespace(
service_token=SecretStr("s" * 43),
callback_username=SecretStr("callback-user"),
callback_password=SecretStr("callback-password"),
)
return SimpleNamespace(
headers={"Authorization": authorization},
app=SimpleNamespace(state=SimpleNamespace(settings=settings)),
)
@pytest.mark.asyncio
async def test_internal_api_requires_exact_bearer_token() -> None:
await bearer_auth(request_with(f"Bearer {'s' * 43}"))
with pytest.raises(DomainError) as error:
await bearer_auth(request_with("Bearer wrong"))
assert error.value.code == "unauthorized"
def test_callback_requires_exact_basic_credentials() -> None:
encoded = base64.b64encode(b"callback-user:callback-password").decode()
basic_auth(request_with(f"Basic {encoded}"))
with pytest.raises(DomainError):
basic_auth(request_with("Basic invalid"))