import unittest from main import app # 假设你的FastAPI应用实例名为app from fastapi import Depends from fastapi.testclient import TestClient from models import User, Tenant # from database import engine,create_db_and_tables from sqlmodel import Session from sqlmodel import Field, Session, SQLModel, create_engine class Hero(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) name: str secret_name: str age: int | None = None sqlite_file_name = ":memory:" sqlite_url = f"sqlite:///{sqlite_file_name}" engine = create_engine(sqlite_url, echo=True) def create_db_and_tables(): SQLModel.metadata.create_all(engine) # 创建一个测试客户端 client = TestClient(app) class TestLoginReg(unittest.TestCase): @classmethod def setUpClass(cls): create_db_and_tables() def setUp(self): # 创建一个模拟的数据库会话 self.session = Session(engine) def tearDown(self): # 清理数据库 # self.session.delete() self.session.close() def test_login(self): # 创建测试用户 test_user = User(username="testuser", password="testpassword", role=1) self.session.add(test_user) self.session.commit() # 发送登录请求 response = client.post("/api/s1/login", json={"username": "testuser", "password": "testpassword"}) self.assertEqual(response.status_code, 200) self.assertEqual(response.json(), {"message": "Login successful"}) def test_register(self): # 发送注册请求 response = client.post("/api/s1/register", json={"name": "testtenant", "username": "newuser", "password": "newpassword"}) self.assertEqual(response.status_code, 200) self.assertEqual(response.json(), {"detail": "注册成功"}) def test_list_users(self): # 创建测试用户 test_user = User(username="testuser", password="testpassword", role=1) self.session.add(test_user) self.session.commit() # 发送登录请求以获取cookie login_response = client.post("/api/s1/login", json={"username": "testuser", "password": "testpassword"}) self.assertEqual(login_response.status_code, 200) cookie = login_response.cookies.get("session_token") # 发送枚举成员请求 response = client.get("/api/s1/user", cookies={"session_token": cookie}) self.assertEqual(response.status_code, 200) # 这里可以添加更多的断言来检查返回的用户列表 def test_add_or_update_user(self): # 创建测试用户 test_user = User(username="testuser", password="testpassword", role=1) self.session.add(test_user) self.session.commit() # 发送登录请求以获取cookie login_response = client.post("/api/s1/login", json={"username": "testuser", "password": "testpassword"}) self.assertEqual(login_response.status_code, 200) cookie = login_response.cookies.get("session_token") # 测试新增成员 response = client.post("/api/s1/user", json={"username": "newuser", "password": "newpassword", "role": "estimator"}, cookies={"session_token": cookie}) self.assertEqual(response.status_code, 200) self.assertEqual(response.json(), {"detail": "User added successfully"}) # 测试修改成员 response = client.post("/api/s1/user", json={"username": "newuser", "password": "", "role": "auditor"}, cookies={"session_token": cookie}) self.assertEqual(response.status_code, 200) self.assertEqual(response.json(), {"detail": "User updated successfully"}) def test_delete_user(self): # 创建测试用户 test_user = User(username="testuser", password="testpassword", role=1) self.session.add(test_user) self.session.commit() # 发送登录请求以获取cookie login_response = client.post("/api/s1/login", json={"username": "testuser", "password": "testpassword"}) self.assertEqual(login_response.status_code, 200) cookie = login_response.cookies.get("session_token") # 添加一个用户用于测试删除 add_response = client.post("/api/s1/user", json={"username": "todeleteuser", "password": "deletepassword", "role": "estimator"}, cookies={"session_token": cookie}) self.assertEqual(add_response.status_code, 200) # 发送删除用户请求 response = client.delete("/api/s1/user", json={"username": "todeleteuser"}, cookies={"session_token": cookie}) self.assertEqual(response.status_code, 200) self.assertEqual(response.json(), {"detail": "User deleted successfully"}) if __name__ == '__main__': unittest.main()