diff --git a/src/DjangoBlog/blog/tests.py b/src/DjangoBlog/blog/tests.py index ee13505..1833cfd 100644 --- a/src/DjangoBlog/blog/tests.py +++ b/src/DjangoBlog/blog/tests.py @@ -19,214 +19,215 @@ from oauth.models import OAuthUser, OAuthConfig # Create your tests here. -class ArticleTest(TestCase): - def setUp(self): - self.client = Client() - self.factory = RequestFactory() - - def test_validate_article(self): - site = get_current_site().domain - user = BlogUser.objects.get_or_create( +class ArticleTest(TestCase): #ZNY 定义文章测试类,继承Django测试用例 + def setUp(self): #ZNY 测试初始化方法 + self.client = Client() #ZNY 创建测试客户端 + self.factory = RequestFactory() #ZNY 创建请求工厂 + + def test_validate_article(self): #ZNY 测试文章验证方法 + site = get_current_site().domain #ZNY 获取当前站点域名 + user = BlogUser.objects.get_or_create( #ZNY 获取或创建测试用户 email="liangliangyy@gmail.com", username="liangliangyy")[0] - user.set_password("liangliangyy") - user.is_staff = True - user.is_superuser = True - user.save() - response = self.client.get(user.get_absolute_url()) - self.assertEqual(response.status_code, 200) - response = self.client.get('/admin/servermanager/emailsendlog/') - response = self.client.get('admin/admin/logentry/') - s = SideBar() - s.sequence = 1 - s.name = 'test' - s.content = 'test content' - s.is_enable = True - s.save() - - category = Category() - category.name = "category" - category.creation_time = timezone.now() - category.last_mod_time = timezone.now() - category.save() - - tag = Tag() - tag.name = "nicetag" - tag.save() - - article = Article() - article.title = "nicetitle" - article.body = "nicecontent" - article.author = user - article.category = category - article.type = 'a' - article.status = 'p' - - article.save() - self.assertEqual(0, article.tags.count()) - article.tags.add(tag) - article.save() - self.assertEqual(1, article.tags.count()) - - for i in range(20): - article = Article() - article.title = "nicetitle" + str(i) - article.body = "nicetitle" + str(i) - article.author = user - article.category = category - article.type = 'a' - article.status = 'p' - article.save() - article.tags.add(tag) - article.save() - from blog.documents import ELASTICSEARCH_ENABLED - if ELASTICSEARCH_ENABLED: - call_command("build_index") - response = self.client.get('/search', {'q': 'nicetitle'}) - self.assertEqual(response.status_code, 200) - - response = self.client.get(article.get_absolute_url()) - self.assertEqual(response.status_code, 200) - from djangoblog.spider_notify import SpiderNotify - SpiderNotify.notify(article.get_absolute_url()) - response = self.client.get(tag.get_absolute_url()) - self.assertEqual(response.status_code, 200) - - response = self.client.get(category.get_absolute_url()) - self.assertEqual(response.status_code, 200) - - response = self.client.get('/search', {'q': 'django'}) - self.assertEqual(response.status_code, 200) - s = load_articletags(article) - self.assertIsNotNone(s) - - self.client.login(username='liangliangyy', password='liangliangyy') - - response = self.client.get(reverse('blog:archives')) - self.assertEqual(response.status_code, 200) - - p = Paginator(Article.objects.all(), settings.PAGINATE_BY) - self.check_pagination(p, '', '') - - p = Paginator(Article.objects.filter(tags=tag), settings.PAGINATE_BY) - self.check_pagination(p, '分类标签归档', tag.slug) - - p = Paginator( + user.set_password("liangliangyy") #ZNY 设置用户密码 + user.is_staff = True #ZNY 设置为管理员 + user.is_superuser = True #ZNY 设置为超级用户 + user.save() #ZNY 保存用户 + response = self.client.get(user.get_absolute_url()) #ZNY 访问用户详情页 + self.assertEqual(response.status_code, 200) #ZNY 断言响应状态码为200 + response = self.client.get('/admin/servermanager/emailsendlog/') #ZNY 访问邮件发送日志管理页 + response = self.client.get('admin/admin/logentry/') #ZNY 访问日志条目管理页 + s = SideBar() #ZNY 创建侧边栏实例 + s.sequence = 1 #ZNY 设置排序序号 + s.name = 'test' #ZNY 设置侧边栏名称 + s.content = 'test content' #ZNY 设置侧边栏内容 + s.is_enable = True #ZNY 启用侧边栏 + s.save() #ZNY 保存侧边栏 + + category = Category() #ZNY 创建分类实例 + category.name = "category" #ZNY 设置分类名称 + category.creation_time = timezone.now() #ZNY 设置创建时间 + category.last_mod_time = timezone.now() #ZNY 设置修改时间 + category.save() #ZNY 保存分类 + + tag = Tag() #ZNY 创建标签实例 + tag.name = "nicetag" #ZNY 设置标签名称 + tag.save() #ZNY 保存标签 + + article = Article() #ZNY 创建文章实例 + article.title = "nicetitle" #ZNY 设置文章标题 + article.body = "nicecontent" #ZNY 设置文章正文 + article.author = user #ZNY 设置文章作者 + article.category = category #ZNY 设置文章分类 + article.type = 'a' #ZNY 设置文章类型为普通文章 + article.status = 'p' #ZNY 设置文章状态为发布 + + article.save() #ZNY 保存文章 + self.assertEqual(0, article.tags.count()) #ZNY 断言初始标签数量为0 + article.tags.add(tag) #ZNY 添加标签到文章 + article.save() #ZNY 保存文章 + self.assertEqual(1, article.tags.count()) #ZNY 断言标签数量为1 + + for i in range(20): #ZNY 循环创建20篇文章 + article = Article() #ZNY 创建文章实例 + article.title = "nicetitle" + str(i) #ZNY 设置带编号的文章标题 + article.body = "nicetitle" + str(i) #ZNY 设置带编号的文章正文 + article.author = user #ZNY 设置文章作者 + article.category = category #ZNY 设置文章分类 + article.type = 'a' #ZNY 设置文章类型为普通文章 + article.status = 'p' #ZNY 设置文章状态为发布 + article.save() #ZNY 保存文章 + article.tags.add(tag) #ZNY 添加标签到文章 + article.save() #ZNY 保存文章 + from blog.documents import ELASTICSEARCH_ENABLED #ZNY 导入Elasticsearch启用标志 + if ELASTICSEARCH_ENABLED: #ZNY 如果Elasticsearch已启用 + call_command("build_index") #ZNY 调用构建索引命令 + response = self.client.get('/search', {'q': 'nicetitle'}) #ZNY 搜索文章 + self.assertEqual(response.status_code, 200) #ZNY 断言搜索响应状态码为200 + + response = self.client.get(article.get_absolute_url()) #ZNY 访问文章详情页 + self.assertEqual(response.status_code, 200) #ZNY 断言响应状态码为200 + from djangoblog.spider_notify import SpiderNotify #ZNY 导入蜘蛛通知模块 + SpiderNotify.notify(article.get_absolute_url()) #ZNY 通知蜘蛛文章URL + response = self.client.get(tag.get_absolute_url()) #ZNY 访问标签详情页 + self.assertEqual(response.status_code, 200) #ZNY 断言响应状态码为200 + + response = self.client.get(category.get_absolute_url()) #ZNY 访问分类详情页 + self.assertEqual(response.status_code, 200) #ZNY 断言响应状态码为200 + + response = self.client.get('/search', {'q': 'django'}) #ZNY 搜索django相关内容 + self.assertEqual(response.status_code, 200) #ZNY 断言响应状态码为200 + s = load_articletags(article) #ZNY 加载文章标签 + self.assertIsNotNone(s) #ZNY 断言标签不为空 + + self.client.login(username='liangliangyy', password='liangliangyy') #ZNY 登录用户 + + response = self.client.get(reverse('blog:archives')) #ZNY 访问文章归档页 + self.assertEqual(response.status_code, 200) #ZNY 断言响应状态码为200 + + p = Paginator(Article.objects.all(), settings.PAGINATE_BY) #ZNY 创建文章分页器 + self.check_pagination(p, '', '') #ZNY 检查首页分页 + + p = Paginator(Article.objects.filter(tags=tag), settings.PAGINATE_BY) #ZNY 创建标签文章分页器 + self.check_pagination(p, '分类标签归档', tag.slug) #ZNY 检查标签分页 + + p = Paginator( #ZNY 创建作者文章分页器 Article.objects.filter( author__username='liangliangyy'), settings.PAGINATE_BY) - self.check_pagination(p, '作者文章归档', 'liangliangyy') + self.check_pagination(p, '作者文章归档', 'liangliangyy') #ZNY 检查作者分页 - p = Paginator(Article.objects.filter(category=category), settings.PAGINATE_BY) - self.check_pagination(p, '分类目录归档', category.slug) + p = Paginator(Article.objects.filter(category=category), settings.PAGINATE_BY) #ZNY 创建分类文章分页器 + self.check_pagination(p, '分类目录归档', category.slug) #ZNY 检查分类分页 - f = BlogSearchForm() - f.search() - # self.client.login(username='liangliangyy', password='liangliangyy') - from djangoblog.spider_notify import SpiderNotify - SpiderNotify.baidu_notify([article.get_full_url()]) + f = BlogSearchForm() #ZNY 创建搜索表单实例 + f.search() #ZNY 执行搜索 + # self.client.login(username='liangliangyy', password='liangliangyy') #ZNY 注释掉的登录代码 + from djangoblog.spider_notify import SpiderNotify #ZNY 导入蜘蛛通知模块 + SpiderNotify.baidu_notify([article.get_full_url()]) #ZNY 通知百度文章完整URL - from blog.templatetags.blog_tags import gravatar_url, gravatar - u = gravatar_url('liangliangyy@gmail.com') - u = gravatar('liangliangyy@gmail.com') + from blog.templatetags.blog_tags import gravatar_url, gravatar #ZNY 导入Gravatar相关函数 + u = gravatar_url('liangliangyy@gmail.com') #ZNY 获取Gravatar头像URL + u = gravatar('liangliangyy@gmail.com') #ZNY 获取Gravatar头像HTML - link = Links( + link = Links( #ZNY 创建友情链接实例 sequence=1, name="lylinux", link='https://wwww.lylinux.net') - link.save() - response = self.client.get('/links.html') - self.assertEqual(response.status_code, 200) - - response = self.client.get('/feed/') - self.assertEqual(response.status_code, 200) - - response = self.client.get('/sitemap.xml') - self.assertEqual(response.status_code, 200) - - self.client.get("/admin/blog/article/1/delete/") - self.client.get('/admin/servermanager/emailsendlog/') - self.client.get('/admin/admin/logentry/') - self.client.get('/admin/admin/logentry/1/change/') - - def check_pagination(self, p, type, value): - for page in range(1, p.num_pages + 1): - s = load_pagination_info(p.page(page), type, value) - self.assertIsNotNone(s) - if s['previous_url']: - response = self.client.get(s['previous_url']) - self.assertEqual(response.status_code, 200) - if s['next_url']: - response = self.client.get(s['next_url']) - self.assertEqual(response.status_code, 200) - - def test_image(self): - import requests - rsp = requests.get( + link.save() #ZNY 保存链接 + response = self.client.get('/links.html') #ZNY 访问友情链接页 + self.assertEqual(response.status_code, 200) #ZNY 断言响应状态码为200 + + response = self.client.get('/feed/') #ZNY 访问RSS订阅 + self.assertEqual(response.status_code, 200) #ZNY 断言响应状态码为200 + + response = self.client.get('/sitemap.xml') #ZNY 访问站点地图 + self.assertEqual(response.status_code, 200) #ZNY 断言响应状态码为200 + + self.client.get("/admin/blog/article/1/delete/") #ZNY 访问文章删除页 + self.client.get('/admin/servermanager/emailsendlog/') #ZNY 访问邮件发送日志管理页 + self.client.get('/admin/admin/logentry/') #ZNY 访问日志条目管理页 + self.client.get('/admin/admin/logentry/1/change/') #ZNY 访问日志条目编辑页 + + def check_pagination(self, p, type, value): #ZNY 检查分页方法 + for page in range(1, p.num_pages + 1): #ZNY 遍历所有分页 + s = load_pagination_info(p.page(page), type, value) #ZNY 加载分页信息 + self.assertIsNotNone(s) #ZNY 断言分页信息不为空 + if s['previous_url']: #ZNY 如果存在上一页URL + response = self.client.get(s['previous_url']) #ZNY 访问上一页 + self.assertEqual(response.status_code, 200) #ZNY 断言响应状态码为200 + if s['next_url']: #ZNY 如果存在下一页URL + response = self.client.get(s['next_url']) #ZNY 访问下一页 + self.assertEqual(response.status_code, 200) #ZNY 断言响应状态码为200 + + def test_image(self): #ZNY 测试图片相关功能 + import requests #ZNY 导入requests库 + rsp = requests.get( #ZNY 下载图片 'https://www.python.org/static/img/python-logo.png') - imagepath = os.path.join(settings.BASE_DIR, 'python.png') - with open(imagepath, 'wb') as file: + imagepath = os.path.join(settings.BASE_DIR, 'python.png') #ZNY 构建图片保存路径 + with open(imagepath, 'wb') as file: #ZNY 保存图片到本地 file.write(rsp.content) - rsp = self.client.post('/upload') - self.assertEqual(rsp.status_code, 403) - sign = get_sha256(get_sha256(settings.SECRET_KEY)) - with open(imagepath, 'rb') as file: - imgfile = SimpleUploadedFile( + rsp = self.client.post('/upload') #ZNY 测试未授权上传 + self.assertEqual(rsp.status_code, 403) #ZNY 断言返回403禁止访问 + sign = get_sha256(get_sha256(settings.SECRET_KEY)) #ZNY 生成上传签名 + with open(imagepath, 'rb') as file: #ZNY 打开图片文件 + imgfile = SimpleUploadedFile( #ZNY 创建上传文件对象 'python.png', file.read(), content_type='image/jpg') - form_data = {'python.png': imgfile} - rsp = self.client.post( + form_data = {'python.png': imgfile} #ZNY 构建表单数据 + rsp = self.client.post( #ZNY 执行上传请求 '/upload?sign=' + sign, form_data, follow=True) - self.assertEqual(rsp.status_code, 200) - os.remove(imagepath) - from djangoblog.utils import save_user_avatar, send_email - send_email(['qq@qq.com'], 'testTitle', 'testContent') - save_user_avatar( + self.assertEqual(rsp.status_code, 200) #ZNY 断言上传成功 + os.remove(imagepath) #ZNY 删除临时图片文件 + from djangoblog.utils import save_user_avatar, send_email #ZNY 导入工具函数 + send_email(['qq@qq.com'], 'testTitle', 'testContent') #ZNY 测试发送邮件 + save_user_avatar( #ZNY 测试保存用户头像 'https://www.python.org/static/img/python-logo.png') - def test_errorpage(self): - rsp = self.client.get('/eee') - self.assertEqual(rsp.status_code, 404) + def test_errorpage(self): #ZNY 测试错误页面 + rsp = self.client.get('/eee') #ZNY 访问不存在的页面 + self.assertEqual(rsp.status_code, 404) #ZNY 断言返回404错误 - def test_commands(self): - user = BlogUser.objects.get_or_create( + def test_commands(self): #ZNY 测试管理命令 + user = BlogUser.objects.get_or_create( #ZNY 获取或创建测试用户 email="liangliangyy@gmail.com", username="liangliangyy")[0] - user.set_password("liangliangyy") - user.is_staff = True - user.is_superuser = True - user.save() - - c = OAuthConfig() - c.type = 'qq' - c.appkey = 'appkey' - c.appsecret = 'appsecret' - c.save() - - u = OAuthUser() - u.type = 'qq' - u.openid = 'openid' - u.user = user - u.picture = static("/blog/img/avatar.png") - u.metadata = ''' + user.set_password("liangliangyy") #ZNY 设置用户密码 + user.is_staff = True #ZNY 设置为管理员 + user.is_superuser = True #ZNY 设置为超级用户 + user.save() #ZNY 保存用户 + + c = OAuthConfig() #ZNY 创建OAuth配置实例 + c.type = 'qq' #ZNY 设置OAuth类型为QQ + c.appkey = 'appkey' #ZNY 设置应用密钥 + c.appsecret = 'appsecret' #ZNY 设置应用密钥 + c.save() #ZNY 保存配置 + + u = OAuthUser() #ZNY 创建OAuth用户实例 + u.type = 'qq' #ZNY 设置OAuth类型为QQ + u.openid = 'openid' #ZNY 设置OpenID + u.user = user #ZNY 关联用户 + u.picture = static("/blog/img/avatar.png") #ZNY 设置头像路径 + u.metadata = ''' #ZNY 设置元数据 { "figureurl": "https://qzapp.qlogo.cn/qzapp/101513904/C740E30B4113EAA80E0D9918ABC78E82/30" }''' - u.save() + u.save() #ZNY 保存OAuth用户 - u = OAuthUser() - u.type = 'qq' - u.openid = 'openid1' - u.picture = 'https://qzapp.qlogo.cn/qzapp/101513904/C740E30B4113EAA80E0D9918ABC78E82/30' - u.metadata = ''' + u = OAuthUser() #ZNY 创建另一个OAuth用户实例 + u.type = 'qq' #ZNY 设置OAuth类型为QQ + u.openid = 'openid1' #ZNY 设置不同的OpenID + u.picture = 'https://qzapp.qlogo.cn/qzapp/101513904/C740E30B4113EAA80E0D9918ABC78E82/30' #ZNY 设置头像URL + u.metadata = ''' #ZNY 设置元数据 { "figureurl": "https://qzapp.qlogo.cn/qzapp/101513904/C740E30B4113EAA80E0D9918ABC78E82/30" }''' - u.save() - - from blog.documents import ELASTICSEARCH_ENABLED - if ELASTICSEARCH_ENABLED: - call_command("build_index") - call_command("ping_baidu", "all") - call_command("create_testdata") - call_command("clear_cache") - call_command("sync_user_avatar") - call_command("build_search_words") + u.save() #ZNY 保存OAuth用户 + + from blog.documents import ELASTICSEARCH_ENABLED #ZNY 导入Elasticsearch启用标志 + if ELASTICSEARCH_ENABLED: #ZNY 如果Elasticsearch已启用 + call_command("build_index") #ZNY 调用构建索引命令 + call_command("ping_baidu", "all") #ZNY 调用百度推送命令 + call_command("create_testdata") #ZNY 调用创建测试数据命令 + call_command("clear_cache") #ZNY 调用清除缓存命令 + call_command("sync_user_avatar") #ZNY 调用同步用户头像命令 + call_command("build_search_words") #ZNY 调用构建搜索词命令 +