|
|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
from django.test import Client, RequestFactory, TestCase
|
|
|
|
|
from django.utils import timezone
|
|
|
|
|
from werobot.messages.messages import TextMessage
|
|
|
|
|
from werobot.messages.messages.messages import TextMessage
|
|
|
|
|
|
|
|
|
|
from accounts.models import BlogUser
|
|
|
|
|
from blog.models import Category, Article
|
|
|
|
|
@ -12,68 +12,100 @@ from .robot import search, category, recents
|
|
|
|
|
|
|
|
|
|
# Create your tests here.
|
|
|
|
|
class ServerManagerTest(TestCase):
|
|
|
|
|
"""测试servermanager应用的核心功能,包括ChatGPT调用、文章查询、命令执行和消息处理逻辑"""
|
|
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
|
self.client = Client()
|
|
|
|
|
self.factory = RequestFactory()
|
|
|
|
|
"""测试前的初始化工作:创建测试客户端、请求工厂,为后续测试准备基础数据"""
|
|
|
|
|
self.client = Client() # Django测试客户端,用于模拟HTTP请求
|
|
|
|
|
self.factory = RequestFactory() # 请求工厂,用于构建测试请求对象
|
|
|
|
|
|
|
|
|
|
def test_chat_gpt(self):
|
|
|
|
|
content = ChatGPT.chat("你好")
|
|
|
|
|
self.assertIsNotNone(content)
|
|
|
|
|
"""测试ChatGPT接口调用是否正常返回结果"""
|
|
|
|
|
content = ChatGPT.chat("你好") # 调用ChatGPT发送简单问候
|
|
|
|
|
self.assertIsNotNone(content) # 断言返回结果不为空(验证接口可用)
|
|
|
|
|
|
|
|
|
|
def test_validate_comment(self):
|
|
|
|
|
"""综合测试:文章搜索、分类查询、命令执行、消息处理器等功能"""
|
|
|
|
|
# 1. 创建测试用户(超级管理员)并登录
|
|
|
|
|
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()
|
|
|
|
|
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)
|
|
|
|
|
s.source = 'u'
|
|
|
|
|
s.content = 'test'
|
|
|
|
|
msghandler = MessageHandler(s, {})
|
|
|
|
|
|
|
|
|
|
# msghandler.userinfo.isPasswordSet = True
|
|
|
|
|
# msghandler.userinfo.isAdmin = True
|
|
|
|
|
msghandler.handler()
|
|
|
|
|
s.content = 'y'
|
|
|
|
|
msghandler.handler()
|
|
|
|
|
s.content = 'idcard:12321233'
|
|
|
|
|
msghandler.handler()
|
|
|
|
|
s.content = 'weather:上海'
|
|
|
|
|
msghandler.handler()
|
|
|
|
|
s.content = 'admin'
|
|
|
|
|
msghandler.handler()
|
|
|
|
|
s.content = '123'
|
|
|
|
|
msghandler.handler()
|
|
|
|
|
|
|
|
|
|
s.content = 'exit'
|
|
|
|
|
msghandler.handler()
|
|
|
|
|
password="liangliangyy1"
|
|
|
|
|
)
|
|
|
|
|
self.client.login(username='liangliangyy1', password='liangliangyy1') # 模拟登录
|
|
|
|
|
|
|
|
|
|
# 2. 创建测试分类和文章(用于后续搜索、分类查询测试)
|
|
|
|
|
test_category = Category(name="categoryccc")
|
|
|
|
|
test_category.save() # 保存分类到数据库
|
|
|
|
|
|
|
|
|
|
test_article = Article(
|
|
|
|
|
title="nicetitleccc",
|
|
|
|
|
body="nicecontentccc",
|
|
|
|
|
author=user,
|
|
|
|
|
category=test_category,
|
|
|
|
|
type='a', # 假设'a'表示文章类型
|
|
|
|
|
status='p' # 假设'p'表示已发布
|
|
|
|
|
)
|
|
|
|
|
test_article.save() # 保存文章到数据库
|
|
|
|
|
|
|
|
|
|
# 3. 测试文章搜索功能
|
|
|
|
|
# 创建模拟文本消息(内容为"nice",用于搜索)
|
|
|
|
|
search_msg = TextMessage([])
|
|
|
|
|
search_msg.content = "nice"
|
|
|
|
|
search_rsp = search(search_msg, None) # 调用搜索函数
|
|
|
|
|
# (此处未断言搜索结果,因实际结果依赖搜索配置,仅验证无异常)
|
|
|
|
|
|
|
|
|
|
# 4. 测试分类查询功能
|
|
|
|
|
category_rsp = category(None, None) # 调用分类查询函数
|
|
|
|
|
self.assertIsNotNone(category_rsp) # 断言返回结果不为空
|
|
|
|
|
|
|
|
|
|
# 5. 测试最新文章查询功能
|
|
|
|
|
recents_rsp = recents(None, None) # 调用最新文章查询函数
|
|
|
|
|
self.assertTrue(recents_rsp != '暂时还没有文章') # 断言返回结果不是"无文章"提示
|
|
|
|
|
|
|
|
|
|
# 6. 测试命令执行功能
|
|
|
|
|
# 创建测试命令
|
|
|
|
|
test_cmd = commands(
|
|
|
|
|
title="test",
|
|
|
|
|
command="ls", # 简单的系统命令(列出目录内容)
|
|
|
|
|
describe="test"
|
|
|
|
|
)
|
|
|
|
|
test_cmd.save() # 保存命令到数据库
|
|
|
|
|
|
|
|
|
|
cmd_handler = CommandHandler()
|
|
|
|
|
cmd_rsp = cmd_handler.run('test') # 执行"test"命令
|
|
|
|
|
self.assertIsNotNone(cmd_rsp) # 断言命令执行结果不为空
|
|
|
|
|
|
|
|
|
|
# 7. 测试消息处理器(MessageHandler)的各种场景
|
|
|
|
|
# 模拟用户消息(来源为'u',内容为'test')
|
|
|
|
|
msg = TextMessage([])
|
|
|
|
|
msg.source = 'u'
|
|
|
|
|
msg.content = 'test'
|
|
|
|
|
msg_handler = MessageHandler(msg, {}) # 初始化消息处理器(空会话)
|
|
|
|
|
|
|
|
|
|
# 7.1 测试普通消息处理(非管理员模式)
|
|
|
|
|
msg_handler.handler() # 处理内容为'test'的消息
|
|
|
|
|
|
|
|
|
|
# 7.2 测试命令确认(假设已处于管理员模式,输入'y'确认执行)
|
|
|
|
|
msg.content = 'y'
|
|
|
|
|
msg_handler.handler()
|
|
|
|
|
|
|
|
|
|
# 7.3 测试待开发功能(身份证查询)
|
|
|
|
|
msg.content = 'idcard:12321233'
|
|
|
|
|
msg_handler.handler()
|
|
|
|
|
|
|
|
|
|
# 7.4 测试待开发功能(天气查询)
|
|
|
|
|
msg.content = 'weather:上海'
|
|
|
|
|
msg_handler.handler()
|
|
|
|
|
|
|
|
|
|
# 7.5 测试进入管理员模式(输入'admin')
|
|
|
|
|
msg.content = 'admin'
|
|
|
|
|
msg_handler.handler()
|
|
|
|
|
|
|
|
|
|
# 7.6 测试管理员密码验证(输入'123')
|
|
|
|
|
msg.content = '123'
|
|
|
|
|
msg_handler.handler()
|
|
|
|
|
|
|
|
|
|
# 7.7 测试退出管理员模式(输入'exit')
|
|
|
|
|
msg.content = 'exit'
|
|
|
|
|
msg_handler.handler()
|
|
|
|
|
|