mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-07 23:22:48 +08:00
提升Model类单元测试覆盖率
This commit is contained in:
@@ -990,6 +990,8 @@ class Model
|
|||||||
*/
|
*/
|
||||||
protected function dataValidate(&$data)
|
protected function dataValidate(&$data)
|
||||||
{
|
{
|
||||||
|
// 验证前清空error
|
||||||
|
$this->error = '';
|
||||||
if (!empty($this->options['validate'])) {
|
if (!empty($this->options['validate'])) {
|
||||||
// 获取自动验证规则
|
// 获取自动验证规则
|
||||||
list($rules, $options, $scene) = $this->getDataRule($this->options['validate'], 'validate');
|
list($rules, $options, $scene) = $this->getDataRule($this->options['validate'], 'validate');
|
||||||
@@ -1938,11 +1940,10 @@ class Model
|
|||||||
*/
|
*/
|
||||||
public function order($field, $order = null)
|
public function order($field, $order = null)
|
||||||
{
|
{
|
||||||
if (is_string($field) && !empty($field) && is_null($order)) {
|
if (!empty($field)) {
|
||||||
$this->options['order'][] = $field;
|
if (!is_array($field)) {
|
||||||
} elseif (is_string($field) && !empty($field) && is_string($order)) {
|
$field = empty($order) ? [$field] : [(string) $field => (string) $order];
|
||||||
$this->options['order'][$field] = $order;
|
}
|
||||||
} elseif (is_array($field) && !empty($field)) {
|
|
||||||
$this->options['order'] = $field;
|
$this->options['order'] = $field;
|
||||||
}
|
}
|
||||||
return $this;
|
return $this;
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class modelTest extends \PHPUnit_Framework_TestCase
|
|||||||
public function testValidate()
|
public function testValidate()
|
||||||
{
|
{
|
||||||
$model = new Model('', $this->getConfig());
|
$model = new Model('', $this->getConfig());
|
||||||
$data = [
|
$data = $_POST = [
|
||||||
'username' => 'username',
|
'username' => 'username',
|
||||||
'nickname' => 'nickname',
|
'nickname' => 'nickname',
|
||||||
'password' => '123456',
|
'password' => '123456',
|
||||||
@@ -60,7 +60,8 @@ class modelTest extends \PHPUnit_Framework_TestCase
|
|||||||
],
|
],
|
||||||
'user' => [
|
'user' => [
|
||||||
['username', [&$this, 'checkName'], '用户名长度为5到15个字符', 'callback', 'username'],
|
['username', [&$this, 'checkName'], '用户名长度为5到15个字符', 'callback', 'username'],
|
||||||
['nickname', 'require', '请填昵称'],
|
['username', function ($value, $data) {return 'admin' == $value ? '此用户名已被使用' : true;}],
|
||||||
|
'nickname' => ['require', '请填昵称'],
|
||||||
'password' => ['[\w-]{6,15}', '密码长度为6到15个字符'],
|
'password' => ['[\w-]{6,15}', '密码长度为6到15个字符'],
|
||||||
'repassword' => ['password', '两次密码不一到致', 'confirm'],
|
'repassword' => ['password', '两次密码不一到致', 'confirm'],
|
||||||
'mobile' => ['mobile', '手机号错误'],
|
'mobile' => ['mobile', '手机号错误'],
|
||||||
@@ -74,17 +75,19 @@ class modelTest extends \PHPUnit_Framework_TestCase
|
|||||||
],
|
],
|
||||||
'value_validate' => 'email',
|
'value_validate' => 'email',
|
||||||
'exists_validate' => 'password,repassword,code',
|
'exists_validate' => 'password,repassword,code',
|
||||||
|
'patch' => true,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
\think\Config::set('validate', $validate);
|
\think\Config::set('validate', $validate);
|
||||||
$result = $model->validate('user.add')->create($data);
|
$result = $model->validate('user.add')->create();
|
||||||
$this->assertEquals('', $model->getError());
|
var_dump($model->getError());
|
||||||
|
$this->assertEmpty($model->getError());
|
||||||
|
|
||||||
unset($data['password'], $data['repassword']);
|
unset($data['password'], $data['repassword']);
|
||||||
$data['email'] = '';
|
$data['email'] = '';
|
||||||
$result = $model->validate('user.edit')->create($data);
|
$result = $model->validate('user.edit')->create($data);
|
||||||
$this->assertEquals('', $model->getError());
|
$this->assertEmpty($model->getError());
|
||||||
|
|
||||||
// 测试带.和*的键名
|
// 测试带.和*的键名
|
||||||
$data = [
|
$data = [
|
||||||
@@ -122,13 +125,18 @@ class modelTest extends \PHPUnit_Framework_TestCase
|
|||||||
'sku.0.1.price' => 'mast int',
|
'sku.0.1.price' => 'mast int',
|
||||||
];
|
];
|
||||||
$this->assertEquals($msg, $model->getError());
|
$this->assertEquals($msg, $model->getError());
|
||||||
|
|
||||||
|
unset($test['__option__']['patch']);
|
||||||
|
$result = $model->field('code')->validate($test)->create($data);
|
||||||
|
$this->assertEquals(['code' => 'not empty'], $model->getError());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function checkName($value, $field)
|
public function checkName($value, $field)
|
||||||
{
|
{
|
||||||
switch ($field) {
|
switch ($field) {
|
||||||
case 'username':
|
case 'username':
|
||||||
return !empty($value);
|
$len = strlen($value);
|
||||||
|
return $len >= 5 && $len <= 15;
|
||||||
case 'mobile':
|
case 'mobile':
|
||||||
return 13 == strlen($value);
|
return 13 == strlen($value);
|
||||||
}
|
}
|
||||||
@@ -143,11 +151,13 @@ class modelTest extends \PHPUnit_Framework_TestCase
|
|||||||
'phone' => ' 123456',
|
'phone' => ' 123456',
|
||||||
'hobby' => ['1', '2'],
|
'hobby' => ['1', '2'],
|
||||||
'cityid' => '1',
|
'cityid' => '1',
|
||||||
|
'a' => 'a',
|
||||||
|
'b' => 'b',
|
||||||
];
|
];
|
||||||
$auto = [
|
$auto = [
|
||||||
'user' => [
|
'user' => [
|
||||||
'__option__' => [
|
'__option__' => [
|
||||||
'value_fill' => ['username', 'password', 'phone'],
|
'value_fill' => 'username,password,phone',
|
||||||
'exists_fill' => 'nickname',
|
'exists_fill' => 'nickname',
|
||||||
],
|
],
|
||||||
'username' => ['strtolower', 'callback'],
|
'username' => ['strtolower', 'callback'],
|
||||||
@@ -164,6 +174,7 @@ class modelTest extends \PHPUnit_Framework_TestCase
|
|||||||
['login_time', function ($value, $data) {
|
['login_time', function ($value, $data) {
|
||||||
return $data['reg_time'];
|
return $data['reg_time'];
|
||||||
}],
|
}],
|
||||||
|
'ab' => ['a,b', 'serialize'],
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
\think\Config::set('auto', $auto);
|
\think\Config::set('auto', $auto);
|
||||||
@@ -175,7 +186,8 @@ class modelTest extends \PHPUnit_Framework_TestCase
|
|||||||
$data['integral'] = 0;
|
$data['integral'] = 0;
|
||||||
$data['reg_time'] = time();
|
$data['reg_time'] = time();
|
||||||
$data['login_time'] = $data['reg_time'];
|
$data['login_time'] = $data['reg_time'];
|
||||||
unset($data['cityid']);
|
$data['ab'] = serialize(['a' => 'a', 'b' => 'b']);
|
||||||
|
unset($data['cityid'], $data['a'], $data['b']);
|
||||||
$this->assertEquals($data, $result);
|
$this->assertEquals($data, $result);
|
||||||
|
|
||||||
// 测试带.和*的键名
|
// 测试带.和*的键名
|
||||||
@@ -252,6 +264,7 @@ DROP TABLE IF EXISTS `tp_role_user`;
|
|||||||
CREATE TABLE `tp_role_user` (
|
CREATE TABLE `tp_role_user` (
|
||||||
`role_id` smallint(5) unsigned NOT NULL,
|
`role_id` smallint(5) unsigned NOT NULL,
|
||||||
`user_id` int(10) unsigned NOT NULL,
|
`user_id` int(10) unsigned NOT NULL,
|
||||||
|
`remark` varchar(250) NOT NULL DEFAULT '',
|
||||||
PRIMARY KEY (`role_id`,`user_id`)
|
PRIMARY KEY (`role_id`,`user_id`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||||
EOF;
|
EOF;
|
||||||
@@ -265,7 +278,7 @@ EOF;
|
|||||||
$config = $this->getConfig();
|
$config = $this->getConfig();
|
||||||
$time = time();
|
$time = time();
|
||||||
|
|
||||||
$user_model = new Model('user', $config);
|
$user_model = new Model('test.user', $config);
|
||||||
$data = [
|
$data = [
|
||||||
'username' => 'test',
|
'username' => 'test',
|
||||||
'password' => md5('123456'),
|
'password' => md5('123456'),
|
||||||
@@ -333,6 +346,8 @@ EOF;
|
|||||||
'user_id' => $user_id,
|
'user_id' => $user_id,
|
||||||
'role_id' => 1,
|
'role_id' => 1,
|
||||||
];
|
];
|
||||||
|
$config['db_name'] = 'test';
|
||||||
|
$config['attr_case'] = 2;
|
||||||
$model = new Model('', $config);
|
$model = new Model('', $config);
|
||||||
$model->table($config['prefix'] . 'role_user')->add($data);
|
$model->table($config['prefix'] . 'role_user')->add($data);
|
||||||
}
|
}
|
||||||
@@ -363,15 +378,29 @@ EOF;
|
|||||||
];
|
];
|
||||||
$this->assertEquals($data, $result['test']);
|
$this->assertEquals($data, $result['test']);
|
||||||
|
|
||||||
$time = $user_model->where(['status'=>1])->getField('create_time');
|
$result = $user_model->where(['status' => 1])->field('password,create_time', true)->order('id', 'desc')->index('id,username')->page('0,10')->select();
|
||||||
$ids = $user_model->where(['status'=>1])->getField('id', true);
|
$data = [
|
||||||
|
'1' => 'test',
|
||||||
|
'2' => 'test2',
|
||||||
|
]; $this->assertEquals($data, $result);
|
||||||
|
|
||||||
|
$time = $user_model->where(['status' => 1])->cache('user_create_time')->getField('create_time');
|
||||||
|
$ids = $user_model->where(['status' => 1])->cache('user_id')->getField('id', true);
|
||||||
$this->assertEquals(2, count($ids));
|
$this->assertEquals(2, count($ids));
|
||||||
$result = $user_model->getField('username,status,create_time', '|');
|
|
||||||
|
$result = $user_model->cache(true)->getField('username,status,create_time', '|');
|
||||||
$data = [
|
$data = [
|
||||||
'test' => '1|' . $time,
|
'test' => '1|' . $time,
|
||||||
'test2' => '1|' . $time,
|
'test2' => '1|' . $time,
|
||||||
];
|
];
|
||||||
$this->assertEquals($data, $result);
|
$this->assertEquals($data, $result);
|
||||||
|
|
||||||
|
$result = $user_model->cache(10)->getField('username,status');
|
||||||
|
$data = [
|
||||||
|
'test' => '1',
|
||||||
|
'test2' => '1',
|
||||||
|
];
|
||||||
|
$this->assertEquals($data, $result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testJoin()
|
public function testJoin()
|
||||||
@@ -398,6 +427,13 @@ EOF;
|
|||||||
];
|
];
|
||||||
$this->assertEquals($data, $result[0]);
|
$this->assertEquals($data, $result[0]);
|
||||||
|
|
||||||
|
$result = $user_model->alias('u')->join('role_user ru', 'u.id=ru.user_id', 'left')->field('u.username,ru.role_id')->select();
|
||||||
|
$data = [
|
||||||
|
'username' => 'test',
|
||||||
|
'role_id' => '1',
|
||||||
|
];
|
||||||
|
$this->assertEquals($data, $result[0]);
|
||||||
|
|
||||||
$subsql = "(select user_id,amount from {$config['prefix']}order where status=1 limit 1) o";
|
$subsql = "(select user_id,amount from {$config['prefix']}order where status=1 limit 1) o";
|
||||||
$result = $user_model->alias('u')->join($subsql, 'u.id=o.user_id', 'left')->field('u.username,o.amount')->select();
|
$result = $user_model->alias('u')->join($subsql, 'u.id=o.user_id', 'left')->field('u.username,o.amount')->select();
|
||||||
$data = [
|
$data = [
|
||||||
@@ -450,19 +486,63 @@ EOF;
|
|||||||
$flag = $order_model->where(['id' => 2])->setField($data);
|
$flag = $order_model->where(['id' => 2])->setField($data);
|
||||||
$this->assertEquals(1, $flag);
|
$this->assertEquals(1, $flag);
|
||||||
|
|
||||||
$flag = $order_model->where(['amount'=>['lt',200]])->setField('freight_fee', 15);
|
$flag = $order_model->where(['amount' => ['lt', 200]])->setField('freight_fee', 15);
|
||||||
$this->assertEquals(1, $flag);
|
$this->assertEquals(1, $flag);
|
||||||
|
|
||||||
$map = [
|
$map = [
|
||||||
'amount' => ['gt', 300],
|
'amount' => ['gt', 300],
|
||||||
'freight_fee' =>['gt', 5],
|
'freight_fee' => ['gt', 0],
|
||||||
];
|
];
|
||||||
$flag = $order_model->where($map)->setDec('freight_fee', 5, 1);
|
$flag = $order_model->where($map)->setDec('freight_fee', 5, 30);
|
||||||
|
$this->assertTrue($flag);
|
||||||
|
|
||||||
|
$flag = $order_model->where($map)->setInc('freight_fee', 5, 30);
|
||||||
|
$this->assertTrue($flag);
|
||||||
|
|
||||||
|
$flag = $order_model->where($map)->setDec('freight_fee', 5);
|
||||||
$this->assertEquals(1, $flag);
|
$this->assertEquals(1, $flag);
|
||||||
|
|
||||||
sleep(1);
|
$flag = $order_model->where($map)->setInc('freight_fee', 5);
|
||||||
$flag = $order_model->where($map)->setInc('freight_fee', 5, 1);
|
|
||||||
$this->assertEquals(1, $flag);
|
$this->assertEquals(1, $flag);
|
||||||
|
|
||||||
|
$ru_model = new Model('role_user', $config);
|
||||||
|
$data = [
|
||||||
|
'user_id' => 1,
|
||||||
|
'role_id' => 1,
|
||||||
|
'remark' => 'remark',
|
||||||
|
];
|
||||||
|
$flag = $ru_model->save($data);
|
||||||
|
$this->assertEquals(1, $flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMagicMethods()
|
||||||
|
{
|
||||||
|
$model = new Model('user', $this->getConfig());
|
||||||
|
$model->data("first=a&last=z");
|
||||||
|
$model->username = 'test';
|
||||||
|
|
||||||
|
$this->assertEquals('a', $model->first);
|
||||||
|
|
||||||
|
$this->assertTrue(isset($model->last));
|
||||||
|
|
||||||
|
unset($model->username);
|
||||||
|
$this->assertTrue(!isset($model->username));
|
||||||
|
|
||||||
|
$this->assertEquals(2, $model->count());
|
||||||
|
|
||||||
|
$info = $model->getByUsername('test');
|
||||||
|
$this->assertEquals(1, $info['id']);
|
||||||
|
|
||||||
|
$id = $model->getFieldByUsername('test', 'id');
|
||||||
|
$this->assertEquals(1, $id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testError()
|
||||||
|
{
|
||||||
|
$config = $this->getConfig();
|
||||||
|
|
||||||
|
$model = new Model('', $config);
|
||||||
|
//$model->select();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testDelete()
|
public function testDelete()
|
||||||
@@ -478,7 +558,7 @@ EOF;
|
|||||||
$this->assertEquals(1, $flag);
|
$this->assertEquals(1, $flag);
|
||||||
|
|
||||||
$address_model = new Model('user_address', $config);
|
$address_model = new Model('user_address', $config);
|
||||||
$flag = $address_model->delete(['1','2']);
|
$flag = $address_model->delete(['1', '2']);
|
||||||
$this->assertEquals(2, $flag);
|
$this->assertEquals(2, $flag);
|
||||||
|
|
||||||
$user_model = new Model('user', $config);
|
$user_model = new Model('user', $config);
|
||||||
@@ -486,7 +566,7 @@ EOF;
|
|||||||
$this->assertEquals(2, $flag);
|
$this->assertEquals(2, $flag);
|
||||||
|
|
||||||
$ru_model = new Model('role_user', $config);
|
$ru_model = new Model('role_user', $config);
|
||||||
$flag = $ru_model->delete(['1','1']);
|
$flag = $ru_model->delete(['1', '1']);
|
||||||
$this->assertEquals(1, $flag);
|
$this->assertEquals(1, $flag);
|
||||||
|
|
||||||
$sql = <<<EOF
|
$sql = <<<EOF
|
||||||
@@ -497,5 +577,7 @@ DROP TABLE IF EXISTS `tp_role_user`;
|
|||||||
EOF;
|
EOF;
|
||||||
$model = new Model('', $this->getConfig());
|
$model = new Model('', $this->getConfig());
|
||||||
$model->execute($sql);
|
$model->execute($sql);
|
||||||
|
$flag = $model->db(0, null);
|
||||||
|
$this->assertNull($flag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user