You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ReviewAndAnalyzeOpenSourceS.../comments/tests.py

145 lines
5.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# zy: 评论模块测试文件 - 测试评论功能的各项业务逻辑
from django.test import Client, RequestFactory, TransactionTestCase
from django.urls import reverse
# zy: 导入相关模型类,用于测试数据准备
from accounts.models import BlogUser
from blog.models import Category, Article
from comments.models import Comment
from comments.templatetags.comments_tags import *
from djangoblog.utils import get_max_articleid_commentid
# zy: 评论功能测试类 - 测试评论的创建、验证、回复等功能
class CommentsTest(TransactionTestCase):
# zy: 测试初始化方法 - 在每个测试方法执行前运行,准备测试数据
def setUp(self):
self.client = Client() # zy: 创建测试客户端用于模拟HTTP请求
self.factory = RequestFactory() # zy: 创建请求工厂,用于构建请求对象
# zy: 配置博客设置,设置评论需要审核
from blog.models import BlogSettings
value = BlogSettings()
value.comment_need_review = True
value.save()
# zy: 创建测试超级用户,用于登录和权限测试
self.user = BlogUser.objects.create_superuser(
email="liangliangyy1@gmail.com",
username="liangliangyy1",
password="liangliangyy1")
# zy: 辅助方法 - 更新文章评论的审核状态为已通过
@staticmethod
def update_article_comment_status(article):
comments = article.comment_set.all()
for comment in comments:
comment.is_enable = True
comment.save()
# zy: 测试评论验证功能 - 测试评论的创建、回复和显示
def test_validate_comment(self):
self.client.login(username='liangliangyy1', password='liangliangyy1')
# zy: 创建测试分类
category = Category()
category.name = "categoryccc"
category.save()
# zy: 创建测试文章
article = Article()
article.title = "nicetitleccc"
article.body = "nicecontentccc"
article.author = self.user # zy: 设置文章作者为测试用户
article.category = category # zy: 设置文章分类
article.type = 'a' # zy: 设置文章类型
article.status = 'p' # zy: 设置文章状态为发布
article.save()
# zy: 获取发表评论的URL地址
comment_url = reverse(
'comments:postcomment', kwargs={
'article_id': article.id})
# zy: 测试1: 发表第一条评论
response = self.client.post(comment_url,
{
'body': '123ffffffffff' # zy: 评论内容
})
# zy: 断言响应状态码为302重定向表示评论提交成功
self.assertEqual(response.status_code, 302)
# zy: 重新从数据库获取文章对象,确保获取最新数据
article = Article.objects.get(pk=article.pk)
# zy: 断言评论列表为空(因为评论需要审核,默认不显示)
self.assertEqual(len(article.comment_list()), 0)
# zy: 更新评论状态为已审核通过
self.update_article_comment_status(article)
# zy: 断言现在评论列表中有1条评论
self.assertEqual(len(article.comment_list()), 1)
# zy: 测试2: 发表第二条评论
response = self.client.post(comment_url,
{
'body': '123ffffffffff', # zy: 第二条评论内容
})
# zy: 断言响应状态码为302重定向
self.assertEqual(response.status_code, 302)
# zy: 重新获取文章并更新评论状态
article = Article.objects.get(pk=article.pk)
self.update_article_comment_status(article)
# zy: 断言现在有2条评论
self.assertEqual(len(article.comment_list()), 2)
# zy: 获取第一条评论的ID用于回复测试
parent_comment_id = article.comment_list()[0].id
# zy: 测试3: 发表带格式的回复评论
response = self.client.post(comment_url,
{
'body': '''
# Title1
```python
import os
```
[url](https://www.lylinux.net/)
[ddd](http://www.baidu.com)
''', # zy: 测试包含Markdown格式的评论内容
'parent_comment_id': parent_comment_id # zy: 设置父评论ID表示这是回复
})
# zy: 断言响应状态码为302重定向
self.assertEqual(response.status_code, 302)
# zy: 更新评论状态并重新获取文章
self.update_article_comment_status(article)
article = Article.objects.get(pk=article.pk)
# zy: 断言现在有3条评论2条顶级评论 + 1条回复
self.assertEqual(len(article.comment_list()), 3)
# zy: 测试评论树解析功能
comment = Comment.objects.get(id=parent_comment_id)
# zy: 解析评论树结构,检查回复关系
tree = parse_commenttree(article.comment_list(), comment)
self.assertEqual(len(tree), 1) # zy: 断言评论树解析正确
# zy: 测试评论项显示功能
data = show_comment_item(comment, True)
self.assertIsNotNone(data) # zy: 断言评论项数据不为空
# zy: 测试获取最大文章ID和评论ID的工具函数
s = get_max_articleid_commentid()
self.assertIsNotNone(s) # zy: 断言返回值不为空
# zy: 测试评论邮件发送功能
from comments.utils import send_comment_email
send_comment_email(comment) # zy: 发送评论通知邮件