| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- """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
|