Files
ai-contract-platform/backend/tests/test_user_service.py
T

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()