@ -1,135 +1,186 @@
# 导入Django测试相关模块
from django . test import Client , RequestFactory , TestCase
# 导入URL反向解析
from django . urls import reverse
# 导入时区工具
from django . utils import timezone
# 导入国际化翻译函数
from django . utils . translation import gettext_lazy as _
# 导入账户模型
from accounts . models import BlogUser
# 导入博客文章和分类模型
from blog . models import Article , Category
# 导入工具函数
from djangoblog . utils import *
# 导入当前模块的工具函数
from . import utils
# Create your tests here.
# 在此创建测试
# 账户测试类, 继承自TestCase
class AccountTest ( TestCase ) :
# 测试前置设置方法
def setUp ( self ) :
# 创建测试客户端
self . client = Client ( )
# 创建请求工厂
self . factory = RequestFactory ( )
# 创建测试用户
self . blog_user = BlogUser . objects . create_user (
username = " test " ,
email = " admin@admin.com " ,
password = " 12345678 "
)
# 设置新测试密码
self . new_test = " xxx123--= "
# 测试账户验证功能
def test_validate_account ( self ) :
# 获取当前站点域名
site = get_current_site ( ) . domain
# 创建超级用户
user = BlogUser . objects . create_superuser (
email = " liangliangyy1@gmail.com " ,
username = " liangliangyy1 " ,
password = " qwer!@#$ggg " )
# 获取刚创建的用户
testuser = BlogUser . objects . get ( username = ' liangliangyy1 ' )
# 测试登录功能
loginresult = self . client . login (
username = ' liangliangyy1 ' ,
password = ' qwer!@#$ggg ' )
# 断言登录成功
self . assertEqual ( loginresult , True )
# 访问管理后台
response = self . client . get ( ' /admin/ ' )
# 断言访问成功
self . assertEqual ( response . status_code , 200 )
# 创建分类
category = Category ( )
category . name = " categoryaaa "
category . creation_time = timezone . now ( )
category . last_modify_time = timezone . now ( )
category . save ( )
# 创建文章
article = Article ( )
article . title = " nicetitleaaa "
article . body = " nicecontentaaa "
article . author = user
article . category = category
article . type = ' a '
article . status = ' p '
article . type = ' a ' # 文章类型
article . status = ' p ' # 发布状态
article . save ( )
# 访问文章管理页面
response = self . client . get ( article . get_admin_url ( ) )
# 断言访问成功
self . assertEqual ( response . status_code , 200 )
# 测试注册功能
def test_validate_register ( self ) :
# 断言邮箱尚未注册
self . assertEquals (
0 , len (
BlogUser . objects . filter (
email = ' user123@user.com ' ) ) )
# 发送注册请求
response = self . client . post ( reverse ( ' account:register ' ) , {
' username ' : ' user1233 ' ,
' email ' : ' user123@user.com ' ,
' password1 ' : ' password123!q@wE#R$T ' ,
' password2 ' : ' password123!q@wE#R$T ' ,
} )
# 断言用户创建成功
self . assertEquals (
1 , len (
BlogUser . objects . filter (
email = ' user123@user.com ' ) ) )
# 获取新创建的用户
user = BlogUser . objects . filter ( email = ' user123@user.com ' ) [ 0 ]
# 生成验证签名
sign = get_sha256 ( get_sha256 ( settings . SECRET_KEY + str ( user . id ) ) )
path = reverse ( ' accounts:result ' )
# 构建验证URL
url = ' {path} ?type=validation&id= {id} &sign= {sign} ' . format (
path = path , id = user . id , sign = sign )
# 访问验证页面
response = self . client . get ( url )
self . assertEqual ( response . status_code , 200 )
# 登录新用户
self . client . login ( username = ' user1233 ' , password = ' password123!q@wE#R$T ' )
user = BlogUser . objects . filter ( email = ' user123@user.com ' ) [ 0 ]
# 设置为超级用户和员工
user . is_superuser = True
user . is_staff = True
user . save ( )
# 删除侧边栏缓存
delete_sidebar_cache ( )
# 创建分类
category = Category ( )
category . name = " categoryaaa "
category . creation_time = timezone . now ( )
category . last_modify_time = timezone . now ( )
category . save ( )
# 创建文章
article = Article ( )
article . category = category
article . title = " nicetitle333 "
article . body = " nicecontentttt "
article . author = user
article . type = ' a '
article . status = ' p '
article . type = ' a ' # 文章类型
article . status = ' p ' # 发布状态
article . save ( )
# 访问文章管理页面
response = self . client . get ( article . get_admin_url ( ) )
self . assertEqual ( response . status_code , 200 )
# 测试登出功能
response = self . client . get ( reverse ( ' account:logout ' ) )
self . assertIn ( response . status_code , [ 301 , 302 , 200 ] )
# 登出后访问管理页面应该重定向
response = self . client . get ( article . get_admin_url ( ) )
self . assertIn ( response . status_code , [ 301 , 302 , 200 ] )
# 使用错误密码登录
response = self . client . post ( reverse ( ' account:login ' ) , {
' username ' : ' user1233 ' ,
' password ' : ' password123 '
} )
self . assertIn ( response . status_code , [ 301 , 302 , 200 ] )
# 登录失败后访问管理页面应该重定向
response = self . client . get ( article . get_admin_url ( ) )
self . assertIn ( response . status_code , [ 301 , 302 , 200 ] )
# 测试邮箱验证码功能
def test_verify_email_code ( self ) :
to_email = " admin@admin.com "
# 生成验证码
code = generate_code ( )
# 设置验证码
utils . set_code ( to_email , code )
# 发送验证邮件
utils . send_verify_email ( to_email , code )
# 测试正确验证码验证
err = utils . verify ( " admin@admin.com " , code )
self . assertEqual ( err , None )
# 测试错误邮箱验证
err = utils . verify ( " admin@123.com " , code )
self . assertEqual ( type ( err ) , str )
# 测试忘记密码邮箱验证码成功情况
def test_forget_password_email_code_success ( self ) :
resp = self . client . post (
path = reverse ( " account:forget_password_code " ) ,
@ -139,21 +190,26 @@ class AccountTest(TestCase):
self . assertEqual ( resp . status_code , 200 )
self . assertEqual ( resp . content . decode ( " utf-8 " ) , " ok " )
# 测试忘记密码邮箱验证码失败情况
def test_forget_password_email_code_fail ( self ) :
# 测试空数据提交
resp = self . client . post (
path = reverse ( " account:forget_password_code " ) ,
data = dict ( )
)
self . assertEqual ( resp . content . decode ( " utf-8 " ) , " 错误的邮箱 " )
# 测试错误邮箱格式
resp = self . client . post (
path = reverse ( " account:forget_password_code " ) ,
data = dict ( email = " admin@com " )
)
self . assertEqual ( resp . content . decode ( " utf-8 " ) , " 错误的邮箱 " )
# 测试忘记密码邮箱成功重置
def test_forget_password_email_success ( self ) :
code = generate_code ( )
# 设置验证码
utils . set_code ( self . blog_user . email , code )
data = dict (
new_password1 = self . new_test ,
@ -165,15 +221,18 @@ class AccountTest(TestCase):
path = reverse ( " account:forget_password " ) ,
data = data
)
# 断言重定向响应
self . assertEqual ( resp . status_code , 302 )
# 验证用户密码是否修改成功
blog_user = BlogUser . objects . filter (
email = self . blog_user . email ,
) . first ( ) # type: BlogUser
) . first ( ) # 类型注解: BlogUser
self . assertNotEqual ( blog_user , None )
# 检查新密码是否正确设置
self . assertEqual ( blog_user . check_password ( data [ " new_password1 " ] ) , True )
# 测试不存在的用户忘记密码
def test_forget_password_email_not_user ( self ) :
data = dict (
new_password1 = self . new_test ,
@ -188,7 +247,7 @@ class AccountTest(TestCase):
self . assertEqual ( resp . status_code , 200 )
# 测试验证码错误情况
def test_forget_password_email_code_error ( self ) :
code = generate_code ( )
utils . set_code ( self . blog_user . email , code )
@ -196,12 +255,11 @@ class AccountTest(TestCase):
new_password1 = self . new_test ,
new_password2 = self . new_test ,
email = self . blog_user . email ,
code = " 111111 " ,
code = " 111111 " , # 错误的验证码
)
resp = self . client . post (
path = reverse ( " account:forget_password " ) ,
data = data
)
self . assertEqual ( resp . status_code , 200 )
self . assertEqual ( resp . status_code , 200 )