36 lines
1.1 KiB
Python
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"))
|