Files
shanxia2.0/backend/tests/test_delete_guard.py
T
2026-06-29 11:15:39 +08:00

52 lines
1.5 KiB
Python

"""delete_guard 单元测试。"""
from __future__ import annotations
from types import SimpleNamespace
import pytest
from fastapi import HTTPException
from app.core.delete_guard import (
assert_row_deletable_by_creator,
can_delete_by_creator,
row_creator_id,
)
def test_row_creator_id_from_object():
row = SimpleNamespace(create_by="u-1")
assert row_creator_id(row) == "u-1"
def test_creator_can_delete():
row = SimpleNamespace(create_by="u-1")
assert can_delete_by_creator(row, {"user_id": "u-1", "role": "admin"}) is True
def test_non_creator_cannot_delete():
row = SimpleNamespace(create_by="u-1")
assert can_delete_by_creator(row, {"user_id": "u-2", "role": "admin"}) is False
def test_super_admin_can_delete_any():
row = SimpleNamespace(create_by="u-1")
assert can_delete_by_creator(row, {"user_id": "u-2", "role": "super_admin"}) is True
def test_empty_create_by_only_super_admin():
row = SimpleNamespace(create_by="")
assert can_delete_by_creator(row, {"user_id": "u-2", "role": "admin"}) is False
assert can_delete_by_creator(row, {"user_id": "u-2", "role": "super_admin"}) is True
def test_assert_raises_for_non_creator():
row = SimpleNamespace(create_by="u-1")
with pytest.raises(HTTPException) as exc:
assert_row_deletable_by_creator(row, {"user_id": "u-2"})
assert exc.value.status_code == 403
def test_legacy_name_match():
row = SimpleNamespace(create_by="张三")
assert can_delete_by_creator(row, {"user_id": "u-2", "real_name": "张三"}) is True