feat: 添加项目规则、环境配置示例及开发文档
This commit is contained in:
158
tests/test_webtui.py
Normal file
158
tests/test_webtui.py
Normal file
@@ -0,0 +1,158 @@
|
||||
"""Web TUI 模块测试"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import time
|
||||
|
||||
import pytest
|
||||
|
||||
from minenasai.webtui.auth import AuthManager, AuthToken
|
||||
|
||||
|
||||
class TestAuthToken:
|
||||
"""AuthToken 测试"""
|
||||
|
||||
def test_token_not_expired(self):
|
||||
"""测试未过期令牌"""
|
||||
token = AuthToken(
|
||||
token="test",
|
||||
user_id="user1",
|
||||
created_at=time.time(),
|
||||
expires_at=time.time() + 3600,
|
||||
)
|
||||
assert not token.is_expired
|
||||
assert token.remaining_time > 0
|
||||
|
||||
def test_token_expired(self):
|
||||
"""测试已过期令牌"""
|
||||
token = AuthToken(
|
||||
token="test",
|
||||
user_id="user1",
|
||||
created_at=time.time() - 7200,
|
||||
expires_at=time.time() - 3600,
|
||||
)
|
||||
assert token.is_expired
|
||||
assert token.remaining_time == 0
|
||||
|
||||
|
||||
class TestAuthManager:
|
||||
"""AuthManager 测试"""
|
||||
|
||||
def setup_method(self):
|
||||
"""初始化"""
|
||||
self.manager = AuthManager(secret_key="test-secret-key")
|
||||
|
||||
def test_generate_token(self):
|
||||
"""测试生成令牌"""
|
||||
token = self.manager.generate_token("user1")
|
||||
|
||||
assert token is not None
|
||||
assert len(token) > 20
|
||||
|
||||
def test_verify_token(self):
|
||||
"""测试验证令牌"""
|
||||
token = self.manager.generate_token("user1")
|
||||
auth_token = self.manager.verify_token(token)
|
||||
|
||||
assert auth_token is not None
|
||||
assert auth_token.user_id == "user1"
|
||||
|
||||
def test_verify_invalid_token(self):
|
||||
"""测试验证无效令牌"""
|
||||
auth_token = self.manager.verify_token("invalid-token")
|
||||
assert auth_token is None
|
||||
|
||||
def test_verify_expired_token(self):
|
||||
"""测试验证过期令牌"""
|
||||
token = self.manager.generate_token("user1", expires_in=0)
|
||||
|
||||
# 等待过期
|
||||
time.sleep(0.1)
|
||||
|
||||
auth_token = self.manager.verify_token(token)
|
||||
assert auth_token is None
|
||||
|
||||
def test_revoke_token(self):
|
||||
"""测试撤销令牌"""
|
||||
token = self.manager.generate_token("user1")
|
||||
|
||||
assert self.manager.revoke_token(token) is True
|
||||
assert self.manager.verify_token(token) is None
|
||||
|
||||
def test_revoke_nonexistent_token(self):
|
||||
"""测试撤销不存在的令牌"""
|
||||
assert self.manager.revoke_token("nonexistent") is False
|
||||
|
||||
def test_revoke_user_tokens(self):
|
||||
"""测试撤销用户所有令牌"""
|
||||
self.manager.generate_token("user1")
|
||||
self.manager.generate_token("user1")
|
||||
self.manager.generate_token("user2")
|
||||
|
||||
count = self.manager.revoke_user_tokens("user1")
|
||||
|
||||
assert count == 2
|
||||
assert self.manager.get_stats()["total_tokens"] == 1
|
||||
|
||||
def test_refresh_token(self):
|
||||
"""测试刷新令牌"""
|
||||
old_token = self.manager.generate_token("user1")
|
||||
new_token = self.manager.refresh_token(old_token)
|
||||
|
||||
assert new_token is not None
|
||||
assert new_token != old_token
|
||||
assert self.manager.verify_token(old_token) is None
|
||||
assert self.manager.verify_token(new_token) is not None
|
||||
|
||||
def test_token_metadata(self):
|
||||
"""测试令牌元数据"""
|
||||
metadata = {"channel": "wework", "task_id": "123"}
|
||||
token = self.manager.generate_token("user1", metadata=metadata)
|
||||
|
||||
auth_token = self.manager.verify_token(token)
|
||||
|
||||
assert auth_token is not None
|
||||
assert auth_token.metadata == metadata
|
||||
|
||||
def test_cleanup_expired(self):
|
||||
"""测试清理过期令牌"""
|
||||
self.manager.generate_token("user1", expires_in=0)
|
||||
self.manager.generate_token("user2", expires_in=3600)
|
||||
|
||||
time.sleep(0.1)
|
||||
count = self.manager.cleanup_expired()
|
||||
|
||||
assert count == 1
|
||||
assert self.manager.get_stats()["total_tokens"] == 1
|
||||
|
||||
|
||||
class TestSSHManager:
|
||||
"""SSHManager 测试(不实际连接)"""
|
||||
|
||||
def test_import_ssh_manager(self):
|
||||
"""测试导入 SSH 管理器"""
|
||||
from minenasai.webtui import SSHManager, get_ssh_manager
|
||||
|
||||
manager = get_ssh_manager()
|
||||
assert isinstance(manager, SSHManager)
|
||||
|
||||
def test_ssh_manager_stats(self):
|
||||
"""测试 SSH 管理器统计"""
|
||||
from minenasai.webtui import SSHManager
|
||||
|
||||
manager = SSHManager()
|
||||
stats = manager.get_stats()
|
||||
|
||||
assert "active_sessions" in stats
|
||||
assert stats["active_sessions"] == 0
|
||||
|
||||
|
||||
class TestWebTUIServer:
|
||||
"""Web TUI 服务器测试"""
|
||||
|
||||
def test_import_server(self):
|
||||
"""测试导入服务器"""
|
||||
from minenasai.webtui.server import app
|
||||
|
||||
assert app is not None
|
||||
assert app.title == "MineNASAI Web TUI"
|
||||
Reference in New Issue
Block a user