# 马莹:导入Django测试相关模块 from django.test import Client, RequestFactory, TestCase from django.utils import timezone # 马莹:导入微信机器人文本消息类 from werobot.messages.messages import TextMessage # 马莹:导入项目内相关模型和工具类 from accounts.models import BlogUser from blog.models import Category, Article from servermanager.api.commonapi import ChatGPT from .models import commands from .robot import MessageHandler, CommandHandler from .robot import search, category, recents # Create your tests here. # 马莹:定义服务器管理模块的测试类,继承自Django的TestCase class ServerManagerTest(TestCase): def setUp(self): """测试初始化方法,在每个测试方法执行前运行""" # 马莹:创建测试客户端,用于模拟HTTP请求 self.client = Client() # 马莹:创建请求工厂,用于构造测试用的请求对象 self.factory = RequestFactory() def test_chat_gpt(self): """测试ChatGPT聊天功能""" # 马莹:调用ChatGPT的chat方法发送"你好"消息 content = ChatGPT.chat("你好") # 马莹:断言返回结果不为空 self.assertIsNotNone(content) def test_validate_comment(self): """综合测试各类功能:文章搜索、分类、最新文章、命令执行、消息处理等""" # 马莹:创建超级用户 user = BlogUser.objects.create_superuser( email="liangliangyy1@gmail.com", username="liangliangyy1", password="liangliangyy1") # 马莹:使用测试客户端登录该超级用户 self.client.login(username='liangliangyy1', password='liangliangyy1') # 马莹:创建测试分类并保存到数据库 c = Category() c.name = "categoryccc" c.save() # 马莹:创建测试文章并保存到数据库 article = Article() article.title = "nicetitleccc" article.body = "nicecontentccc" article.author = user # 关联作者 article.category = c # 关联分类 article.type = 'a' # 文章类型 article.status = 'p' # 发布状态 article.save() # 马莹:构造文本消息对象,内容为"nice" s = TextMessage([]) s.content = "nice" # 马莹:测试文章搜索功能 rsp = search(s, None) # 马莹:测试获取分类功能 rsp = category(None, None) # 马莹:断言分类功能返回结果不为空 self.assertIsNotNone(rsp) # 马莹:测试获取最新文章功能 rsp = recents(None, None) # 马莹:断言最新文章功能返回结果不是"暂时还没有文章" self.assertTrue(rsp != '暂时还没有文章') # 马莹:创建测试命令并保存到数据库 cmd = commands() cmd.title = "test" cmd.command = "ls" cmd.describe = "test" cmd.save() # 马莹:实例化命令处理器 cmdhandler = CommandHandler() # 马莹:测试执行命令功能 rsp = cmdhandler.run('test') # 马莹:断言命令执行结果不为空 self.assertIsNotNone(rsp) # 马莹:设置消息的发送者ID s.source = 'u' # 马莹:设置消息内容为'test' s.content = 'test' # 马莹:实例化消息处理器 msghandler = MessageHandler(s, {}) # 马莹:以下注释代码为管理员权限相关配置(当前测试未启用) # msghandler.userinfo.isPasswordSet = True # msghandler.userinfo.isAdmin = True # 马莹:处理消息内容'test' msghandler.handler() # 马莹:修改消息内容为'y'(模拟确认执行命令) s.content = 'y' msghandler.handler() # 马莹:修改消息内容为身份证查询指令(建设中功能) s.content = 'idcard:12321233' msghandler.handler() # 马莹:修改消息内容为天气查询指令(建设中功能) s.content = 'weather:上海' msghandler.handler() # 马莹:修改消息内容为'admin'(进入管理员模式) s.content = 'admin' msghandler.handler() # 马莹:修改消息内容为'123'(输入管理员密码) s.content = '123' msghandler.handler() # 马莹:修改消息内容为'exit'(退出管理员模式) s.content = 'exit' msghandler.handler()