* userTest: refactor script to test the updatePassword method.

This commit is contained in:
liugang
2023-12-19 13:54:41 +08:00
parent 3e5380a6b6
commit e476c9d78f
2 changed files with 62 additions and 41 deletions
+50 -25
View File
@@ -1,36 +1,61 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/user.class.php';
su('admin');
zdTable('user')->gen(10);
/**
title=测试 userModel->updatePassword();
cid=1
pid=1
编辑用户密码,返回编辑后的密码 >> dcf859ce8dd8f998bdfe4ae6c22c329e
两次密码不相同的情况 >> 两次密码应该相同。<br/>
密码小于设定强度的情况 >> 密码必须6位及以上,且包含大小写字母、数字。<br/>
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/user.class.php';
$user = new userTest();
$normalUser = array();
$normalUser['originalPassword'] = 'bac0bbaaf7192f219bebd5387e88c5d7';
$normalUser['password1'] = 'dcf859ce8dd8f998bdfe4ae6c22c329e';
$normalUser['password2'] = 'dcf859ce8dd8f998bdfe4ae6c22c329e';
$normalUser['passwordStrength'] = 1;
zdTable('user')->gen(1);
$weakPassword = $normalUser;
$weakPassword['passwordStrength'] = 0;
su('admin');
$differentPassword = $normalUser;
$differentPassword['password2'] = 'asdasfasf!@#!@#asfasf';
global $app;
r($user->updatePasswordTest(10, $normalUser)) && p('password') && e('dcf859ce8dd8f998bdfe4ae6c22c329e'); //编辑用户密码,返回编辑后的密码
r($user->updatePasswordTest(10, $differentPassword)) && p('password1:0') && e('两次密码应该相同。'); //两次密码不相同的情况
r($user->updatePasswordTest(10, $weakPassword)) && p('password1:0') && e('密码必须6位及以上,且包含大小写字母、数字。'); //密码小于设定强度的情况
$userTest = new userTest();
/* 安全配置相关功能在 checkPassword 单元测试用例中有详细测试,此处重置为默认值以减少对当前用例的影响。*/
unset($config->safe->mode);
unset($config->safe->weak);
$random = updateSessionRandom();
$password = md5(654321);
$original = md5($app->user->password . $random);
$user1 = (object)array('originalPassword' => $original, 'password' => $password, 'password1' => '', 'password2' => $password, 'passwordStrength' => 0, 'passwordLength' => 6);
$user2 = (object)array('originalPassword' => $original, 'password' => $password, 'password1' => $password, 'password2' => $password, 'passwordStrength' => 0, 'passwordLength' => 5);
$user3 = (object)array('originalPassword' => $original, 'password' => $password, 'password1' => $password, 'password2' => '', 'passwordStrength' => 0, 'passwordLength' => 6);
$user4 = (object)array('originalPassword' => '', 'password' => $password, 'password1' => $password, 'password2' => $password, 'passwordStrength' => 0, 'passwordLength' => 6);
$user5 = (object)array('originalPassword' => $original, 'password' => $password, 'password1' => $password, 'password2' => $password, 'passwordStrength' => 0, 'passwordLength' => 6);
$result = $userTest->updatePasswordTest($user1);
r($result) && p('result') && e(0); // 密码为空,返回 false。
r($result) && p('errors:password1') && e('『密码』不能为空。'); // 密码为空,提示错误信息。
$result = $userTest->updatePasswordTest($user2);
r($result) && p('result') && e(0); // 密码长度不够,返回 false。
r($result) && p('errors:password1') && e('密码须6位及以上。'); // 密码长度不够,提示错误信息。
$result = $userTest->updatePasswordTest($user3);
r($result) && p('result') && e(0); // 两次密码不相同,返回 false。
r($result) && p('errors:password1') && e('两次密码应该相同。'); // 两次密码不相同,提示错误信息。
$result = $userTest->updatePasswordTest($user4);
r($result) && p('result') && e(0); // 原密码不正确,返回 false。
r($result) && p('errors:originalPassword') && e('原密码不正确'); // 原密码不正确,提示错误信息。
$result = $userTest->updatePasswordTest($user5);
r($result) && p('result') && e(1); // 密码符合要求,返回 true。
r($result) && p('errors:0') && e('~~'); // 密码符合要求,不提示错误信息。
r($result) && p('errors:password1') && e('~~'); // 密码符合要求,不提示错误信息。
$resetUser = $userTest->getByIdTest($app->user->account);
r($resetUser->password == $password) && p() && e(1); // 数据库中的密码修改成功。
r($app->user->password == $password) && p() && e(1); // app 中的密码修改成功。
r($app->user->modifyPassword) && p() && e(0); // app 中的是否强制修改免密重置为 false。
r($app->user->modifyPasswordReason) && p() && e(0); // app 中的强制修改密码原因重置为空。
r($_SESSION['user']->password == $password) && p() && e(1); // session 中的密码修改成功。
+12 -16
View File
@@ -339,28 +339,24 @@ class userTest
}
/**
* Test edit a user password.
* 测试更新当前用户的密码。
* Test update password of current user.
*
* @param int $userID
* @param array $params
* @param object $user
* @access public
* @return void
* @return array
*/
public function updatePasswordTest($userID, $params = array())
public function updatePasswordTest(object $user): array
{
$_POST = $params;
$result = $this->objectModel->updatePassword($user);
$errors = dao::getError();
$this->objectModel->updatePassword($userID);
unset($_POST);
foreach($errors as $key => $error)
{
if(is_array($error)) $errors[$key] = implode('', $error);
}
if(dao::isError())
{
return dao::getError();
}
else
{
return $this->objectModel->getByID($userID, 'id');
}
return array('result' => (int)$result, 'errors' => $errors);
}
/**