"""Web TUI 模块测试""" from __future__ import annotations import time 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"