feat: BossAi 老板AI助手初始版本
包含功能: - 法务参谋/经营决策/生活助理/情绪中心四大AI对话模块 - 专家咨询系统(用户选定→专家确认→咨询→回复→评价) - 角色登录(用户/专家/管理员)+ ProtectedRoute 权限控制 - 管理后台(用户管理/专家管理/AI使用统计/专家活跃度) - 专家工作台(待确认服务/待回复咨询/已回复咨询/服务中用户) - 服务关系取消(用户和专家均可取消,需自己确认) - 全页面移动端响应式适配 - 知识库RAG检索 - 对话历史(普通/保密模式) Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import unittest
|
||||
from datetime import datetime, timedelta, timezone
|
||||
|
||||
from bossai import SessionManager, assess
|
||||
|
||||
|
||||
class Clock:
|
||||
def __init__(self):
|
||||
self.now = datetime(2026, 1, 1, tzinfo=timezone.utc)
|
||||
def __call__(self):
|
||||
return self.now
|
||||
|
||||
|
||||
class BossAiMVPTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.clock = Clock()
|
||||
self.manager = SessionManager(self.clock)
|
||||
|
||||
def test_ephemeral_session_is_destroyed_and_unreadable(self):
|
||||
s = self.manager.create("ephemeral", ttl=timedelta(seconds=30))
|
||||
self.manager.append(s.session_id, "user", "家庭隐私")
|
||||
self.clock.now += timedelta(seconds=31)
|
||||
self.assertEqual(self.manager.purge_expired(), 1)
|
||||
self.assertTrue(s.destroyed)
|
||||
self.assertEqual(s.messages, [])
|
||||
with self.assertRaises(KeyError):
|
||||
self.manager.append(s.session_id, "user", "再次写入")
|
||||
|
||||
def test_manual_destroy_is_idempotent(self):
|
||||
s = self.manager.create("confidential")
|
||||
self.manager.append(s.session_id, "user", "合同")
|
||||
self.assertTrue(self.manager.destroy(s.session_id))
|
||||
self.assertFalse(self.manager.destroy(s.session_id))
|
||||
self.assertEqual(s.key_digest, "")
|
||||
|
||||
def test_risk_triage_escalates_red_and_orange(self):
|
||||
self.assertEqual(assess("收到税务稽查通知").level, "red")
|
||||
self.assertTrue(assess("员工工伤后能否开除").escalation)
|
||||
self.assertEqual(assess("如何安排下周会议").level, "green")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user