diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/accounts/tests.py b/src/DjangoBlog-master(1)/DjangoBlog-master/accounts/tests.py index 6893411..b820a15 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/accounts/tests.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/accounts/tests.py @@ -13,195 +13,244 @@ from . import utils class AccountTest(TestCase): def setUp(self): - self.client = Client() - self.factory = RequestFactory() + """测试初始化方法,每个测试方法运行前都会执行""" + self.client = Client() # Django测试客户端,用于模拟HTTP请求 + self.factory = RequestFactory() # 用于创建请求对象 + # 创建测试用户 self.blog_user = BlogUser.objects.create_user( username="test", email="admin@admin.com", password="12345678" ) - self.new_test = "xxx123--=" + self.new_test = "xxx123--=" # 测试用的新密码 def test_validate_account(self): - site = get_current_site().domain + """测试账户验证功能:创建超级用户、登录、文章管理""" + 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) + self.assertEqual(loginresult, True) # 断言登录成功 + + # 测试访问管理员页面 response = self.client.get('/admin/') - self.assertEqual(response.status_code, 200) + self.assertEqual(response.status_code, 200) # 断言能正常访问admin页面 + # 创建测试分类 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) + 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 = '{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.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() + 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.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]) + self.assertIn(response.status_code, [301, 302, 200]) # 断言重定向或成功 + # 测试退出后访问文章管理页面(应该被重定向到登录页) response = self.client.get(article.get_admin_url()) - self.assertIn(response.status_code, [301, 302, 200]) + self.assertIn(response.status_code, [301, 302, 200]) # 断言重定向 + # 测试重新登录(使用错误密码) response = self.client.post(reverse('account:login'), { 'username': 'user1233', - 'password': 'password123' + '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() + 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) + self.assertEqual(err, None) # 断言验证成功,错误为None + # 测试错误邮箱 err = utils.verify("admin@123.com", code) - self.assertEqual(type(err), str) + self.assertEqual(type(err), str) # 断言返回错误信息字符串 def test_forget_password_email_code_success(self): + """测试成功发送忘记密码验证码""" resp = self.client.post( path=reverse("account:forget_password_code"), - data=dict(email="admin@admin.com") + data=dict(email="admin@admin.com") # 正确的邮箱格式 ) - self.assertEqual(resp.status_code, 200) - self.assertEqual(resp.content.decode("utf-8"), "ok") + 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() + data=dict() # 空数据 ) - self.assertEqual(resp.content.decode("utf-8"), "错误的邮箱") + self.assertEqual(resp.content.decode("utf-8"), "错误的邮箱") # 断言返回错误消息 + # 测试错误邮箱格式 resp = self.client.post( path=reverse("account:forget_password_code"), - data=dict(email="admin@com") + data=dict(email="admin@com") # 无效的邮箱格式 ) - self.assertEqual(resp.content.decode("utf-8"), "错误的邮箱") + 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) + """测试成功重置密码""" + 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, + 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) + self.assertEqual(resp.status_code, 302) # 断言重定向(通常表示成功) # 验证用户密码是否修改成功 blog_user = BlogUser.objects.filter( email=self.blog_user.email, ).first() # type: BlogUser - self.assertNotEqual(blog_user, None) - self.assertEqual(blog_user.check_password(data["new_password1"]), True) + 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, new_password2=self.new_test, - email="123@123.com", - code="123456", + email="123@123.com", # 不存在的邮箱 + code="123456", # 任意验证码 ) resp = self.client.post( path=reverse("account:forget_password"), data=data ) - self.assertEqual(resp.status_code, 200) - + 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) + 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", + 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) # 断言请求完成(但验证码错误)