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