130 lines
4.9 KiB
Python
130 lines
4.9 KiB
Python
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()
|