57 lines
1.3 KiB
Python
57 lines
1.3 KiB
Python
"""
|
|
Tests auth API.
|
|
"""
|
|
|
|
from dataclasses import dataclass
|
|
import pytest
|
|
from fastapi import HTTPException
|
|
|
|
from pricewatch.app.api.main import require_token
|
|
|
|
|
|
@dataclass
|
|
class FakeRedisConfig:
|
|
url: str
|
|
|
|
|
|
@dataclass
|
|
class FakeDbConfig:
|
|
url: str
|
|
|
|
|
|
@dataclass
|
|
class FakeAppConfig:
|
|
db: FakeDbConfig
|
|
redis: FakeRedisConfig
|
|
api_token: str
|
|
|
|
|
|
def test_missing_token_returns_401(monkeypatch):
|
|
"""Sans token, retourne 401."""
|
|
config = FakeAppConfig(
|
|
db=FakeDbConfig(url="sqlite:///:memory:"),
|
|
redis=FakeRedisConfig(url="redis://localhost:6379/0"),
|
|
api_token="secret",
|
|
)
|
|
monkeypatch.setattr("pricewatch.app.api.main.get_config", lambda: config)
|
|
|
|
with pytest.raises(HTTPException) as excinfo:
|
|
require_token(None)
|
|
|
|
assert excinfo.value.status_code == 401
|
|
|
|
|
|
def test_bad_token_returns_403(monkeypatch):
|
|
"""Token invalide retourne 403."""
|
|
config = FakeAppConfig(
|
|
db=FakeDbConfig(url="sqlite:///:memory:"),
|
|
redis=FakeRedisConfig(url="redis://localhost:6379/0"),
|
|
api_token="secret",
|
|
)
|
|
monkeypatch.setattr("pricewatch.app.api.main.get_config", lambda: config)
|
|
|
|
with pytest.raises(HTTPException) as excinfo:
|
|
require_token("Bearer nope")
|
|
|
|
assert excinfo.value.status_code == 403
|