from django.test import Client, RequestFactory, TestCase 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. class AccountTest(TestCase): def setUp(self): #sjt 测试初始化:创建测试客户端和测试用户 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--=" # sjt 测试用新密码 def test_validate_account(self): #sjt 测试用户账号验证:管理员登录、文章创建等功能 site = get_current_site().domain # sjt 创建超级用户 user = BlogUser.objects.create_superuser( email="liangliangyy1@gmail.com", username="liangliangyy1", password="qwer!@#$ggg") testuser = BlogUser.objects.get(username='liangliangyy1') # sjt 测试登录 loginresult = self.client.login( username='liangliangyy1', password='qwer!@#$ggg') self.assertEqual(loginresult, True) response = self.client.get('/admin/') self.assertEqual(response.status_code, 200) # sjt 测试创建分类 category = Category() category.name = "categoryaaa" category.creation_time = timezone.now() category.last_modify_time = timezone.now() category.save() # sjt 测试创建文章 article = Article() article.title = "nicetitleaaa" article.body = "nicecontentaaa" article.author = user article.category = category article.type = 'a' article.status = 'p' article.save() # sjt 测试访问文章管理页 response = self.client.get(article.get_admin_url()) self.assertEqual(response.status_code, 200) def test_validate_register(self): #sjt 测试注册流程:注册->邮箱验证->登录->功能验证 # sjt 验证初始状态无此用户 self.assertEquals( 0, len( BlogUser.objects.filter( email='user123@user.com'))) # sjt 提交注册表单 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', }) # sjt 验证用户创建成功 self.assertEquals( 1, len( BlogUser.objects.filter( email='user123@user.com'))) # sjt 验证邮箱并激活用户 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 = '{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) # sjt 测试登录及权限 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() # ... 后续测试创建分类、文章等功能 def test_verify_email_code(self): #sjt 测试验证码验证功能 to_email = "admin@admin.com" code = generate_code() # sjt 生成验证码 utils.set_code(to_email, code) # sjt 缓存验证码 utils.send_verify_email(to_email, code) # sjt 发送验证码邮件 # sjt 验证正确验证码 err = utils.verify("admin@admin.com", code) self.assertEqual(err, None) # sjt 验证错误邮箱的验证码 err = utils.verify("admin@123.com", code) self.assertEqual(type(err), str) def test_forget_password_email_code_success(self): #sjt 测试成功发送密码找回验证码 resp = self.client.post( path=reverse("account:forget_password_code"), data=dict(email="admin@admin.com") ) self.assertEqual(resp.status_code, 200) self.assertEqual(resp.content.decode("utf-8"), "ok") def test_forget_password_email_code_fail(self): #sjt 测试发送密码找回验证码失败情况(无效邮箱) 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): #sjt 测试成功找回密码流程 code = generate_code() utils.set_code(self.blog_user.email, code) data = dict( new_password1=self.new_test, new_password2=self.new_test, email=self.blog_user.email, code=code, ) resp = self.client.post( path=reverse("account:forget_password"), data=data ) self.assertEqual(resp.status_code, 302) # sjt 验证密码是否修改成功 blog_user = BlogUser.objects.filter( email=self.blog_user.email, ).first() self.assertNotEqual(blog_user, None) self.assertEqual(blog_user.check_password(data["new_password1"]), True) def test_forget_password_email_not_user(self): #sjt 测试使用未注册邮箱找回密码 data = dict( new_password1=self.new_test, new_password2=self.new_test, email="123@123.com", code="123456", ) resp = self.client.post( path=reverse("account:forget_password"), data=data ) self.assertEqual(resp.status_code, 200) def test_forget_password_email_code_error(self): #sjt 测试使用错误验证码找回密码 code = generate_code() utils.set_code(self.blog_user.email, code) data = dict( new_password1=self.new_test, new_password2=self.new_test, email=self.blog_user.email, code="111111", # sjt 错误验证码 ) resp = self.client.post( path=reverse("account:forget_password"), data=data ) self.assertEqual(resp.status_code, 200)