92 lines
3.8 KiB
PHP
92 lines
3.8 KiB
PHP
<?php
|
||
require_once dirname(__FILE__, 6) . '/test/lib/ui.php';
|
||
|
||
class resetTester extends tester
|
||
{
|
||
public function __construct()
|
||
{
|
||
parent::__construct();
|
||
$this->login();
|
||
$webRoot = $this->getWebRoot();
|
||
$url = ($this->config->requestType == 'GET') ? 'index.php?m=user&f=reset' : 'user-reset.html';
|
||
$this->page->openURL($webRoot . $url);
|
||
}
|
||
|
||
/**
|
||
* 打开 reset 页面,检查是否存在创建文件提示
|
||
* Verify create file panel exists.
|
||
*/
|
||
public function verifyResetPageMessage()
|
||
{
|
||
$form = $this->loadPage('user', 'reset');
|
||
$form->wait(2);
|
||
|
||
$createPanelNodes = $form->dom->getElementListByXpathKey('createPanel');
|
||
if(!empty($createPanelNodes))
|
||
{
|
||
// 断言提示与返回按钮存在
|
||
$alertExists = !empty($form->dom->getElementListByXpathKey('infoAlert'));
|
||
$goBackExists = !empty($form->dom->getElementListByXpathKey('gobackBtnCF'));
|
||
if(!$alertExists) return $this->failed('创建文件提示面板缺少信息提示');
|
||
if(!$goBackExists) return $this->failed('创建文件提示面板缺少返回按钮');
|
||
return $this->success('reset页面信息提示测试通过');
|
||
}
|
||
|
||
return $this->failed('reset页面信息提示测试失败');
|
||
}
|
||
|
||
/**
|
||
* 验证管理员重置密码功能
|
||
* Verify reset password of admin user.
|
||
*/
|
||
public function verifyAdminResetSubmit()
|
||
{
|
||
$form = $this->loadPage('user', 'reset');
|
||
$form->wait(2);
|
||
|
||
global $uiTester;
|
||
$base = rtrim($uiTester->app->getBasePath(), DIRECTORY_SEPARATOR);
|
||
$randFilename = trim($form->dom->resetFileName->getText());
|
||
$normalizedPath = ltrim(str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $randFilename), DIRECTORY_SEPARATOR);
|
||
$resetFileName = $base . DIRECTORY_SEPARATOR . $normalizedPath;
|
||
if(empty($resetFileName)) return $this->failed('未获取到resetFileName');
|
||
file_put_contents($resetFileName, '');
|
||
|
||
$this->page->refresh();
|
||
$form = $this->loadPage('user', 'reset');
|
||
$form->wait(2);
|
||
|
||
$accountNodes = $form->dom->getElementListByXpathKey('account');
|
||
if(empty($accountNodes)) return $this->failed('未找到账号输入框');
|
||
$pwd1Exists = !empty($form->dom->getElementListByXpathKey('password1'));
|
||
$pwd2Exists = !empty($form->dom->getElementListByXpathKey('password2'));
|
||
$submitExists = !empty($form->dom->getElementListByXpathKey('submitBtn'));
|
||
$verifyRand = !empty($form->dom->getElementListByXpathKey('verifyRand'));
|
||
if(!$pwd1Exists || !$pwd2Exists || !$submitExists || !$verifyRand) return $this->failed('重置表单必要元素缺失');
|
||
|
||
// 保存旧密码MD5,测试完成后恢复,避免影响其他测试
|
||
$oldMD5 = $uiTester->dao->select('password')->from(TABLE_USER)->where('account')->eq('admin')->fetch('password');
|
||
$newPwd = 'StrongPass123!';
|
||
$form->dom->account->setValue('admin');
|
||
$form->dom->password1->setValue($newPwd);
|
||
$form->dom->password2->setValue($newPwd);
|
||
$form->dom->submitBtn->click();
|
||
$form->wait(3);
|
||
|
||
try
|
||
{
|
||
$this->login('admin', $newPwd);
|
||
$html = $this->page->getPageSource();
|
||
|
||
$loginFailed = strpos($html, $this->lang->user->loginFailed) !== false;
|
||
if($loginFailed) return $this->failed('管理员密码重置失败,登录失败');
|
||
}
|
||
catch(Exception $e)
|
||
{
|
||
return $this->failed('管理员密码重置失败' . $e->getMessage());
|
||
}
|
||
// 恢复旧密码MD5
|
||
$uiTester->dao->update(TABLE_USER)->set('password')->eq($oldMD5)->where('account')->eq('admin')->exec();
|
||
return $this->success('reset页面重置密码测试成功');
|
||
}
|
||
} |