96 lines
2.7 KiB
Python
96 lines
2.7 KiB
Python
import unittest
|
|
|
|
from fastapi import HTTPException, status
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy.orm import sessionmaker
|
|
|
|
from app.db import Base
|
|
from app.models.user import User
|
|
from app.services.user_service import UserService
|
|
|
|
|
|
class UserServiceRoleTestCase(unittest.TestCase):
|
|
def setUp(self):
|
|
self.engine = create_engine("sqlite:///:memory:")
|
|
Base.metadata.create_all(bind=self.engine)
|
|
self.SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=self.engine)
|
|
self.db = self.SessionLocal()
|
|
self.service = UserService(self.db)
|
|
self.admin_user = {"id": "user-admin", "tenant_id": "tenant-demo-001", "role": "admin"}
|
|
self.db.add(
|
|
User(
|
|
id="user-admin",
|
|
tenant_id="tenant-demo-001",
|
|
username="admin@example.com",
|
|
display_name="管理员",
|
|
password_hash="hash",
|
|
role="admin",
|
|
status="active",
|
|
)
|
|
)
|
|
self.db.commit()
|
|
|
|
def tearDown(self):
|
|
self.db.close()
|
|
self.engine.dispose()
|
|
|
|
def test_create_user_accepts_legal_and_business_roles(self):
|
|
legal_user = self.service.create_user(
|
|
self.admin_user,
|
|
"legal@example.com",
|
|
"法务用户",
|
|
"123456",
|
|
"legal",
|
|
"active",
|
|
)
|
|
business_user = self.service.create_user(
|
|
self.admin_user,
|
|
"business@example.com",
|
|
"业务用户",
|
|
"123456",
|
|
"business",
|
|
"active",
|
|
)
|
|
|
|
self.assertEqual(legal_user["role"], "legal")
|
|
self.assertEqual(business_user["role"], "business")
|
|
|
|
def test_update_user_accepts_legacy_member_role(self):
|
|
created = self.service.create_user(
|
|
self.admin_user,
|
|
"legacy@example.com",
|
|
"历史成员",
|
|
"123456",
|
|
"business",
|
|
"active",
|
|
)
|
|
|
|
updated = self.service.update_user(
|
|
self.admin_user,
|
|
created["id"],
|
|
"legacy@example.com",
|
|
"历史成员",
|
|
None,
|
|
"member",
|
|
"active",
|
|
)
|
|
|
|
self.assertEqual(updated["role"], "member")
|
|
|
|
def test_invalid_role_rejected(self):
|
|
with self.assertRaises(HTTPException) as ctx:
|
|
self.service.create_user(
|
|
self.admin_user,
|
|
"invalid@example.com",
|
|
"非法角色",
|
|
"123456",
|
|
"viewer",
|
|
"active",
|
|
)
|
|
|
|
self.assertEqual(ctx.exception.status_code, status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|