41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
import pytest
|
|
from fastapi import HTTPException
|
|
from pydantic import ValidationError
|
|
|
|
from app.webhook.models import NextcloudEvent, EventType
|
|
from app.webhook.auth import verify_secret
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"raw,expected",
|
|
[
|
|
("created", EventType.CREATED),
|
|
("updated", EventType.UPDATED),
|
|
("deleted", EventType.DELETED),
|
|
],
|
|
)
|
|
def test_event_parses_valid_types(raw, expected):
|
|
evt = NextcloudEvent(event_type=raw, file_path="a/b.pdf", file_name="b.pdf")
|
|
assert evt.event_type == expected
|
|
|
|
|
|
def test_event_invalid_type_raises():
|
|
with pytest.raises(ValidationError):
|
|
NextcloudEvent(event_type="exploded", file_path="a", file_name="a")
|
|
|
|
|
|
def test_verify_secret_pass():
|
|
verify_secret(provided="abc", expected="abc") # no exception
|
|
|
|
|
|
def test_verify_secret_fail():
|
|
with pytest.raises(HTTPException) as exc_info:
|
|
verify_secret(provided="wrong", expected="abc")
|
|
assert exc_info.value.status_code == 401
|
|
|
|
|
|
def test_verify_secret_missing_fail():
|
|
with pytest.raises(HTTPException) as exc_info:
|
|
verify_secret(provided=None, expected="abc")
|
|
assert exc_info.value.status_code == 401
|