znt/module/user/test/model/update.php

378 lines
20 KiB
PHP
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env php
<?php
/**
title=测试 userModel->update();
timeout=0
cid=19658
- 使用系统预留用户名,返回 false。属性result @0
- 使用系统预留用户名提示错误信息。第errors条的account属性 @用户名已被系统预留
- 密码长度不够,返回 false。属性result @0
- 密码长度不够提示错误信息。第errors条的password1属性 @密码须6位及以上。
- 两次密码不同,返回 false。属性result @0
- 两次密码不同提示错误信息。第errors条的password1属性 @两次密码应该相同。
- 当前用户登录密码不正确,返回 false。属性result @0
- 当前用户登录密码不正确提示错误信息。第errors条的verifyPassword属性 @验证失败,请检查您的系统登录密码是否正确
- 公司名称为空,创建外部公司失败,返回 false。属性result @0
- 公司名称为空创建外部公司失败提示错误信息。第errors条的newCompany属性 @『所属公司』不能为空。
- 公司名称不为空,创建外部公司成功,返回 true。属性result @1
- 必填项为空,返回 false。属性result @0
- 用户名为空提示错误信息。第errors条的account属性 @『用户名』不能为空。
- 姓名为空提示错误信息。第errors条的realname属性 @『姓名』不能为空。
- 界面类型为空提示错误信息。第errors条的visions属性 @『界面类型』不能为空。
- 更新 id 为 2 的用户成功,返回 true。属性result @1
- 更新 id 为 3 的用户失败,用户名重复,返回 false。属性result @0
- 更新 id 为 3 的用户失败用户名重复提示错误信息。第errors条的account属性 @『用户名』已经有『user1』这条记录了。如果您确定该记录已删除请到后台-系统设置-回收站还原。
- 用户名不符合格式要求,返回 false。属性result @0
- 用户名不符合格式要求提示错误信息。第errors条的account属性 @『用户名』只能是字母、数字或下划线的组合三位以上。
- 邮箱不符合格式要求,返回 false。属性result @0
- 邮箱不符合格式要求提示错误信息。第errors条的email属性 @『邮箱』应当为合法的EMAIL。
- 电话不符合格式要求提示错误信息。第errors条的phone属性 @『电话』应当为合法的电话号码。
- 手机不符合格式要求提示错误信息。第errors条的mobile属性 @『手机』应当为合法的手机号码。
- 字段不符合数据库设置,返回 false。属性result @0
- 字符串字段长度超过数据库设置提示错误信息。第errors条的type属性 @『用户类型』长度应当不超过『30』且大于『0』。
- 数字字段类型不符合数据库设置提示错误信息。第errors条的company属性 @『所属公司』应当是数字。
- 日期字段类型不符合数据库设置提示错误信息。第errors条的join属性 @『入职日期』应当为合法的日期。
- 枚举字段类型不符合数据库设置提示错误信息。第errors条的gender属性 @『性别』长度应当不超过『1』且大于『0』。
- 创建外部公司成功,更新 id 为 3 的用户失败,用户名重复,返回 false。属性result @0
- 创建外部公司成功,更新 id 为 3 的用户失败用户名重复提示错误信息。第errors条的account属性 @『用户名』已经有『user1』这条记录了。如果您确定该记录已删除请到后台-系统设置-回收站还原。
- 事务回滚成功,没有创建公司。 @0
- 查看用户权限组,返回 2 条记录。 @2
- 第 1 条记录的用户名是 user1权限组 id 是 1。
- 第0条的account属性 @user1
- 第0条的group属性 @1
- 第 2 条记录的用户名是 user1权限组 id 是 2。
- 第1条的account属性 @user1
- 第1条的group属性 @2
- 查看用户视图,返回 2 条记录。 @2
- 第 1 条记录的用户名是 admin。 @1
- 第 2 条记录的用户名是 user1。 @1
- 数据库中超级管理员是 admin,user1。 @,admin,user1,
- $app 对象中超级管理员是 admin,user1。 @,admin,user1,
- 修改用户名成功,返回 true。属性result @1
- 查看用户权限组,返回 2 条记录。 @2
- 第 1 条记录的用户名是 user12权限组 id 是 1。
- 第0条的account属性 @user12
- 第0条的group属性 @1
- 第 2 条记录的用户名是 user12权限组 id 是 2。
- 第1条的account属性 @user12
- 第1条的group属性 @2
- 查看用户视图,返回 2 条记录。 @2
- 第 1 条记录的用户名是 admin。 @1
- 第 2 条记录的用户名是 user12。 @1
- 数据库中超级管理员是 admin,user12。 @,admin,user12,
- $app 对象中超级管理员是 admin,user12。 @,admin,user12,
- 修改用户权限组成功,返回 true。属性result @1
- 查看用户权限组,返回 2 条记录。 @2
- 第 1 条记录的用户名是 user12权限组 id 是 1。
- 第0条的account属性 @user12
- 第0条的group属性 @2
- 第 2 条记录的用户名是 user12权限组 id 是 2。
- 第1条的account属性 @user12
- 第1条的group属性 @3
- 创建日志成功,最后一条日志的对象类型是 user对象 id 是 2操作是 edited。
- 属性objectType @user
- 属性objectID @2
- 属性action @edited
- 创建历史记录成功,最后一条日志的历史记录是 1 条。 @1
- 创建历史记录成功,最后一条日志的历史记录的字段是 account旧值是 user1新值是 user12。
- 属性field @account
- 属性old @user1
- 属性new @user12
- 事务提交成功,能查询到修改的用户。
- 属性id @2
- 属性account @user12
- 当前登录用户的用户名是 admin真实姓名是 admin角色是 qa。
- 属性account @admin
- 属性realname @admin
- 属性role @qa
- 当前登录用户的密码不是 123456。 @0
- 更新当前登录用户成功,返回 true。属性result @1
- 当前登录用户的用户名是 admin真实姓名是 user13角色是 role13。
- 属性account @admin
- 属性realname @user13
- 属性role @role13
- 当前登录用户的密码是 123456。 @1
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/model.class.php';
zenData('user')->gen(3);
$companyTable = zenData('company');
$companyTable->admins->range('`,admin,user1,`');
$companyTable->gen(1);
$viewTable = zenData('userview');
$viewTable->account->range('user1');
$viewTable->gen(1);
$groupTable = zenData('usergroup');
$groupTable->account->range('user1');
$groupTable->group->range('1,2');
$groupTable->gen(2);
su('admin');
global $app;
$app->company->admins = ',admin,user1,';
/* 安全配置相关功能在 checkPassword 单元测试用例中有详细测试,此处重置为默认值以减少对当前用例的影响。*/
unset($config->safe->mode);
unset($config->safe->weak);
$random = updateSessionRandom();
$password = md5('123456');
$verify = md5($app->user->password . $random);
$template = new stdclass();
$template->id = 2;
$template->type = 'inside';
$template->account = 'user1';
$template->realname = 'user1';
$template->password = $password;
$template->password1 = $password;
$template->password2 = $password;
$template->visions = 'rnd';
$template->company = 0;
$template->dept = 0;
$template->new = 0;
$template->newCompany = '';
$template->join = null;
$template->role = '';
$template->group = array(1, 2);
$template->email = '';
$template->phone = '';
$template->mobile = '';
$template->qq = '';
$template->dingding = '';
$template->weixin = '';
$template->skype = '';
$template->whatsapp = '';
$template->slack = '';
$template->commiter = '';
$template->gender = 'm';
$template->verifyPassword = $verify;
$template->passwordLength = 6;
$template->passwordStrength = 0;
$userTest = new userModelTest();
/**
* 检测系统预留用户名。
*/
$user1 = clone $template;
$user1->account = 'guest';
$result = $userTest->updateTest($user1);
r($result) && p('result') && e(0); // 使用系统预留用户名,返回 false。
r($result) && p('errors:account') && e('用户名已被系统预留'); // 使用系统预留用户名,提示错误信息。
/**
*检测密码长度。
*/
$user2 = clone $template;
$user2->password1 = $password;
$user2->passwordLength = 5;
$result = $userTest->updateTest($user2);
r($result) && p('result') && e(0); // 密码长度不够,返回 false。
r($result) && p('errors:password1') && e('密码须6位及以上。'); // 密码长度不够,提示错误信息。
/**
* 检测两次密码是否相同。
*/
$user3 = clone $template;
$user3->password2 = '';
$user3->passwordLength = 6;
$result = $userTest->updateTest($user3);
r($result) && p('result') && e(0); // 两次密码不同,返回 false。
r($result) && p('errors:password1') && e('两次密码应该相同。'); // 两次密码不同,提示错误信息。
/**
* 检测当前用户登录密码。
*/
$user4 = clone $template;
$user4->verifyPassword = '';
$result = $userTest->updateTest($user4);
r($result) && p('result') && e(0); // 当前用户登录密码不正确,返回 false。
r($result) && p('errors:verifyPassword') && e('验证失败,请检查您的系统登录密码是否正确'); // 当前用户登录密码不正确,提示错误信息。
/**
* 检测创建外部公司。
*/
$user5 = clone $template;
$user5->type = 'outside';
$user5->new = 1;
$result = $userTest->updateTest($user5);
r($result) && p('result') && e(0); // 公司名称为空,创建外部公司失败,返回 false。
r($result) && p('errors:newCompany') && e('『所属公司』不能为空。'); // 公司名称为空,创建外部公司失败,提示错误信息。
$user5->newCompany = 'newCompany';
$result = $userTest->updateTest($user5);
r($result) && p('result') && e(1); // 公司名称不为空,创建外部公司成功,返回 true。
/**
* 检测必填项。
* TODO后台自定义必填项不可用待可用后补充此处的测试代码。
*/
$user6 = clone $template;
$user6->account = '';
$user6->realname = '';
$user6->visions = '';
$result = $userTest->updateTest($user6);
r($result) && p('result') && e(0); // 必填项为空,返回 false。
r($result) && p('errors:account') && e('『用户名』不能为空。'); // 用户名为空,提示错误信息。
r($result) && p('errors:realname') && e('『姓名』不能为空。'); // 姓名为空,提示错误信息。
r($result) && p('errors:visions') && e('『界面类型』不能为空。'); // 界面类型为空,提示错误信息。
/**
* 检测用户名唯一性。
*/
$user7 = clone $template;
$result = $userTest->updateTest($user7);
r($result) && p('result') && e(1); // 更新 id 为 2 的用户成功,返回 true。
$user7->id = 3;
$result = $userTest->updateTest($user7);
r($result) && p('result') && e(0); // 更新 id 为 3 的用户失败,用户名重复,返回 false。
r($result) && p('errors:account') && e('『用户名』已经有『user1』这条记录了。如果您确定该记录已删除请到后台-系统设置-回收站还原。'); // 更新 id 为 3 的用户失败,用户名重复,提示错误信息。
/**
* 检测用户名是否符合格式要求。
*/
$user8 = clone $template;
$user8->account = 'user 8';
$result = $userTest->updateTest($user8);
r($result) && p('result') && e(0); // 用户名不符合格式要求,返回 false。
r($result) && p('errors:account') && e('『用户名』只能是字母、数字或下划线的组合三位以上。'); // 用户名不符合格式要求,提示错误信息。
/**
* 检测邮箱、电话和手机是否符合格式要求。
*/
$user9 = clone $template;
$user9->email = 'email@';
$user9->phone = '868930';
$user9->mobile = '1388888888';
$result = $userTest->updateTest($user9);
r($result) && p('result') && e(0); // 邮箱不符合格式要求,返回 false。
r($result) && p('errors:email') && e('『邮箱』应当为合法的EMAIL。'); // 邮箱不符合格式要求,提示错误信息。
r($result) && p('errors:phone') && e('『电话』应当为合法的电话号码。'); // 电话不符合格式要求,提示错误信息。
r($result) && p('errors:mobile') && e('『手机』应当为合法的手机号码。'); // 手机不符合格式要求,提示错误信息。
/**
* 检测字段是否符合数据库设置。
*/
$user10 = clone $template;
$user10->type = '这是一个很长的用户类型。到底有多长呢?长到超出了数据库设置的长度。';
$user10->company = 'company';
$user10->join = 'join';
$user10->gender = 'gender';
$result = $userTest->updateTest($user10);
r($result) && p('result') && e(0); // 字段不符合数据库设置,返回 false。
r($result) && p('errors:type') && e('『用户类型』长度应当不超过『30』且大于『0』。'); // 字符串字段长度超过数据库设置,提示错误信息。
r($result) && p('errors:company') && e('『所属公司』应当是数字。'); // 数字字段类型不符合数据库设置,提示错误信息。
r($result) && p('errors:join') && e('『入职日期』应当为合法的日期。'); // 日期字段类型不符合数据库设置,提示错误信息。
r($result) && p('errors:gender') && e('『性别』长度应当不超过『1』且大于『0』。'); // 枚举字段类型不符合数据库设置,提示错误信息。
/**
* 检测事务回滚功能。
*/
$user11 = clone $template;
$user11->id = 3;
$user11->type = 'outside';
$user11->new = 1;
$user11->newCompany = 'newCompany2';
$result = $userTest->updateTest($user11);
r($result) && p('result') && e(0); // 创建外部公司成功,更新 id 为 3 的用户失败,用户名重复,返回 false。
r($result) && p('errors:account') && e('『用户名』已经有『user1』这条记录了。如果您确定该记录已删除请到后台-系统设置-回收站还原。'); // 创建外部公司成功,更新 id 为 3 的用户失败,用户名重复,提示错误信息。
$company = $tester->dao->select('*')->from(TABLE_COMPANY)->where('name')->eq($user11->newCompany)->fetch();
r($company) && p() && e(0); // 事务回滚成功,没有创建公司。
/**
* 检测修改用户名成功后的用户权限组、用户视图和超级管理员的用户名是否更新。
*/
$groups = $tester->dao->select('*')->from(TABLE_USERGROUP)->fetchAll();
r(count($groups)) && p() && e(2); // 查看用户权限组,返回 2 条记录。
r($groups) && p('0:account,group') && e('user1,1'); // 第 1 条记录的用户名是 user1权限组 id 是 1。
r($groups) && p('1:account,group') && e('user1,2'); // 第 2 条记录的用户名是 user1权限组 id 是 2。
$views = $tester->dao->select('*')->from(TABLE_USERVIEW)->fetchAll('account');
r(count($views)) && p() && e(2); // 查看用户视图,返回 2 条记录。
r(isset($views['admin'])) && p() && e('1'); // 第 1 条记录的用户名是 admin。
r(isset($views['user1'])) && p() && e('1'); // 第 2 条记录的用户名是 user1。
$admins = $tester->dao->select('admins')->from(TABLE_COMPANY)->where('id')->eq(1)->fetch('admins');
r($admins) && p() && e(',admin,user1,'); // 数据库中超级管理员是 admin,user1。
r($app->company->admins) && p() && e(',admin,user1,'); // $app 对象中超级管理员是 admin,user1。
$user12 = clone $template;
$user12->account = 'user12';
$result = $userTest->updateTest($user12);
r($result) && p('result') && e(1); // 修改用户名成功,返回 true。
$groups = $tester->dao->select('*')->from(TABLE_USERGROUP)->fetchAll();
r(count($groups)) && p() && e(2); // 查看用户权限组,返回 2 条记录。
r($groups) && p('0:account,group') && e('user12,1'); // 第 1 条记录的用户名是 user12权限组 id 是 1。
r($groups) && p('1:account,group') && e('user12,2'); // 第 2 条记录的用户名是 user12权限组 id 是 2。
$views = $tester->dao->select('*')->from(TABLE_USERVIEW)->fetchAll('account');
r(count($views)) && p() && e(2); // 查看用户视图,返回 2 条记录。
r(isset($views['admin'])) && p() && e('1'); // 第 1 条记录的用户名是 admin。
r(isset($views['user12'])) && p() && e('1'); // 第 2 条记录的用户名是 user12。
$admins = $tester->dao->select('admins')->from(TABLE_COMPANY)->where('id')->eq(1)->fetch('admins');
r($admins) && p() && e(',admin,user12,'); // 数据库中超级管理员是 admin,user12。
r($app->company->admins) && p() && e(',admin,user12,'); // $app 对象中超级管理员是 admin,user12。
$user12->group = array(0, 2, 3);
$result = $userTest->updateTest($user12);
r($result) && p('result') && e(1); // 修改用户权限组成功,返回 true。
$groups = $tester->dao->select('*')->from(TABLE_USERGROUP)->fetchAll();
r(count($groups)) && p() && e(2); // 查看用户权限组,返回 2 条记录。
r($groups) && p('0:account,group') && e('user12,2'); // 第 1 条记录的用户名是 user12权限组 id 是 1。
r($groups) && p('1:account,group') && e('user12,3'); // 第 2 条记录的用户名是 user12权限组 id 是 2。
/**
* 检测是否创建日志和历史记录。
*/
$action = $tester->dao->select('*')->from(TABLE_ACTION)->orderBy('id_desc')->limit(1)->fetch();
r($action) && p('objectType,objectID,action') && e('user,2,edited'); // 创建日志成功,最后一条日志的对象类型是 user对象 id 是 2操作是 edited。
$histories = $tester->dao->select('*')->from(TABLE_HISTORY)->where('action')->eq($action->id)->fetchAll('', false);
r(count($histories)) && p() && e(1); // 创建历史记录成功,最后一条日志的历史记录是 1 条。
r($histories[0]) && p('field,old,new') && e('account,user1,user12'); // 创建历史记录成功,最后一条日志的历史记录的字段是 account旧值是 user1新值是 user12。
/**
* 检测事务提交功能。
*/
$user = $userTest->getByIdTest('user12');
r($user) && p('id,account') && e('2,user12'); // 事务提交成功,能查询到修改的用户。
/**
* 检测更新当前登录用户。
*/
r($app->user) && p('account,realname,role') && e('admin,admin,qa'); // 当前登录用户的用户名是 admin真实姓名是 admin角色是 qa。
r($app->user->password == $password) && p() && e(0); // 当前登录用户的密码不是 123456。
$user13 = clone $template;
$user13->id = 1;
$user13->account = 'admin';
$user13->realname = 'user13';
$user13->role = 'role13';
$user13->password = $password;
$result = $userTest->updateTest($user13);
r($result) && p('result') && e(1); // 更新当前登录用户成功,返回 true。
r($app->user) && p('account,realname,role') && e('admin,user13,role13'); // 当前登录用户的用户名是 admin真实姓名是 user13角色是 role13。
r($app->user->password == $password) && p() && e(1); // 当前登录用户的密码是 123456。