<?php
|
/**
|
* PhpUnderControl_PhalApiRequestVar_Test
|
*
|
* 针对 ../../PhalApi/Request/Var.php PhalApi_Request_Var 类的PHPUnit单元测试
|
*
|
* @author: dogstar 20141012
|
*/
|
|
require_once dirname(__FILE__) . '/../test_env.php';
|
|
if (!class_exists('PhalApi_Request_Var')) {
|
require dirname(__FILE__) . '/../../PhalApi/Request/Var.php';
|
}
|
|
class PhpUnderControl_PhalApiRequestVar_Test extends PHPUnit_Framework_TestCase
|
{
|
public $coreRequestVar;
|
|
protected function setUp()
|
{
|
parent::setUp();
|
|
$this->coreRequestVar = new PhalApi_Request_Var();
|
}
|
|
protected function tearDown()
|
{
|
}
|
|
|
/**
|
* @group testFormat
|
*/
|
public function testFormat()
|
{
|
$varName = 'testKey';
|
$rule = array('type' => 'int', 'default' => '2014');
|
$params = array();
|
|
$rs = PhalApi_Request_Var::format($varName, $rule, $params);
|
|
$this->assertSame(2014, $rs);
|
}
|
|
/**
|
* @group testFormatString
|
*/
|
public function testFormatString()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('name' => 'testKey'), array('testKey' => 2014));
|
|
$this->assertSame('2014', $rs);
|
}
|
|
/**
|
* @group testFormatStringMinMax
|
*/
|
public function testFormatStringMinMax()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('name' => 'testKey', "max" => 9, 'min' => 9, "format" => 'utf8'), array('testKey' => 'PhalApi测试'));
|
|
$this->assertSame('PhalApi测试', $rs);
|
}
|
|
|
/**
|
* @group testFormatStringMinMax
|
* @expectedException PhalApi_Exception_BadRequest
|
*/
|
public function testFormatStringExceptionMinMax()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('name' => 'testKey', "max" => 8, 'min' => 8, "format" => 'utf8'), array('testKey' => 'PhalApi测试'));
|
|
}
|
|
/**
|
* @group testFormatString
|
* @expectedException PhalApi_Exception_InternalServerError
|
*/
|
public function testFormatStringWithRuleExceptionMinGtMax()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('name' => 'testKey', 'min' => 9, 'max' => 5), array('testKey' => '2014'));
|
}
|
|
/**
|
* @group testFormatString
|
* @expectedException PhalApi_Exception_BadRequest
|
*/
|
public function testFormatStringWithParamExceptionLtMin()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('name' => 'testKey', 'min' => 8), array('testKey' => 2014));
|
}
|
|
/**
|
* @group testFormatString
|
* @expectedException PhalApi_Exception_BadRequest
|
*/
|
public function testFormatStringWithParamExceptionGtMax()
|
{
|
$value = '2014';
|
$rule = array('name' => 'testKey', 'max' => 2, );
|
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('name' => 'testKey', 'max' => 2), array('testKey' => 2014));
|
}
|
|
/**
|
* @group testFormatInt
|
*/
|
public function testFormatInt()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('name' => 'testKey', 'type' => 'int'), array('testKey' => 2014));
|
|
$this->assertSame(2014, $rs);
|
}
|
|
/**
|
* @group testFormatFloat
|
*/
|
public function testFormatFloat()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('name' => 'testKey', 'type' => 'float'), array('testKey' => '3.14'));
|
|
$this->assertSame(3.14, $rs);
|
}
|
|
/**
|
* @dataProvider provideDataForFormatBoolean
|
* @group testFormatBoolean
|
*/
|
public function testFormatBoolean($oriValue, $expValue)
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('name' => 'testKey', 'type' => 'boolean'), array('testKey' => $oriValue));
|
|
$this->assertSame($expValue, $rs);
|
}
|
|
public function provideDataForFormatBoolean()
|
{
|
return array(
|
array('on', true),
|
array('yes', true),
|
array('true', true),
|
array('success', true),
|
array('false', false),
|
array('1', true),
|
);
|
}
|
|
/**
|
* @group testFormatDate
|
*/
|
public function testFormatDate()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('name' => 'testKey', 'type' => 'date', 'format' => 'timestamp'), array('testKey' => '2014-10-01 12:00:00'));
|
|
$this->assertTrue(is_numeric($rs));
|
$this->assertSame(1412136000, $rs);
|
}
|
|
/**
|
* @group testFormatDate
|
*/
|
public function testFormatDateIllegal()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('name' => 'testKey', 'type' => 'date', 'format' => 'timestamp'), array('testKey' => '2014-99-99 XX:XX:XX'));
|
$this->assertEquals(0, $rs);
|
}
|
|
/**
|
* @group testFormatDate
|
* @expectedException PhalApi_Exception_BadRequest
|
*/
|
public function testFormatDateRange()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('name' => 'testKey', 'type' => 'date', 'format' => 'timestamp', 'max' => 100), array('testKey' => '2014-10-01 12:00:00'));
|
}
|
|
/**
|
* @group testFormatArray
|
*/
|
public function testFormatArrayWithJson()
|
{
|
$arr = array('age' => 100, 'sex' => 'male');
|
|
$rs = PhalApi_Request_Var::format(
|
'testKey',
|
array('name' => 'testKey', 'type' => 'array', 'format' => 'json'),
|
array('testKey' => json_encode($arr))
|
);
|
|
$this->assertSame($arr, $rs);
|
}
|
|
public function testFormatArrayWithExplode()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey',
|
array('name' => 'testKey', 'type' => 'array', 'format' => 'explode', 'separator' => '|'),
|
array('testKey' => '1|2|3|4|5')
|
);
|
|
$this->assertEquals(array(1, 2, 3, 4, 5), $rs);
|
}
|
|
public function testFormatArrayDefault()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey',
|
array('name' => 'testKey', 'type' => 'array'),
|
array('testKey' => 'phalapi')
|
);
|
|
$this->assertEquals(array('phalapi'), $rs);
|
}
|
|
/**
|
* @expectedException PhalApi_Exception_BadRequest
|
*/
|
public function testFormatArrayRange()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey',
|
array('name' => 'testKey', 'type' => 'array', 'format' => 'explode', 'separator' => '|', 'max' => 3),
|
array('testKey' => '1|2|3|4|5')
|
);
|
}
|
|
/**
|
* @group testFile
|
*/
|
public function testFormatFile()
|
{
|
$_FILES['aFile'] = array('name' => 'aHa~', 'type' => 'image/jpeg', 'size' => 100, 'tmp_name' => '/tmp/123456', 'error' => 0);
|
|
$rule = array('name' => 'aFile', 'range' => array('image/jpeg'), 'min' => 50, 'max' => 1024, 'require' => true, 'default' => array(), 'type' => 'file');
|
|
$rs = PhalApi_Request_Var::format('aFile', $rule, array());
|
|
$this->assertEquals($_FILES['aFile'], $rs);
|
}
|
|
/**
|
* @group testFile
|
*/
|
public function testFormatFileInsensiveCase()
|
{
|
$_FILES['aFile'] = array('name' => 'aHa~', 'type' => 'image/jpeg', 'size' => 100, 'tmp_name' => '/tmp/123456', 'error' => 0);
|
|
$rule = array('name' => 'aFile', 'range' => array('image/JPEG'), 'min' => 50, 'max' => 1024, 'require' => true, 'default' => array(), 'type' => 'file');
|
|
$rs = PhalApi_Request_Var::format('aFile', $rule, array());
|
|
$this->assertEquals($_FILES['aFile'], $rs);
|
}
|
|
/**
|
* @group testFile
|
* @expectedException PhalApi_Exception_BadRequest
|
*/
|
public function testFormatFileButTooLarge()
|
{
|
$_FILES['aFile'] = array('name' => 'aHa~', 'type' => 'image/jpeg', 'size' => 9999, 'tmp_name' => '/tmp/123456', 'error' => 0);
|
|
$rule = array('name' => 'aFile', 'range' => array('image/jpeg'), 'min' => 50, 'max' => 1024, 'require' => true, 'default' => array(), 'type' => 'file');
|
|
$rs = PhalApi_Request_Var::format('aFile', $rule, array());
|
}
|
|
/**
|
* @group testFile
|
* @expectedException PhalApi_Exception_BadRequest
|
*/
|
public function testFormatFileButWrongType()
|
{
|
$_FILES['aFile'] = array('name' => 'aHa~', 'type' => 'image/png', 'size' => 100, 'tmp_name' => '/tmp/123456', 'error' => 0);
|
|
$rule = array('name' => 'aFile', 'range' => array('image/jpeg'), 'min' => 50, 'max' => 1024, 'require' => true, 'default' => array(), 'type' => 'file');
|
|
$rs = PhalApi_Request_Var::format('aFile', $rule, array());
|
}
|
|
/**
|
* @group testFile
|
* @expectedException PhalApi_Exception_BadRequest
|
*/
|
public function testFormatFileButError()
|
{
|
$_FILES['aFile'] = array('name' => 'aHa~', 'type' => 'image/png', 'size' => 100, 'tmp_name' => '/tmp/123456', 'error' => 2);
|
|
$rule = array('name' => 'aFile', 'range' => array('image/jpeg'), 'min' => 50, 'max' => 1024, 'require' => true, 'default' => array(), 'type' => 'file');
|
|
$rs = PhalApi_Request_Var::format('aFile', $rule, array());
|
}
|
|
/**
|
* @group testFile
|
* @expectedException PhalApi_Exception_BadRequest
|
*/
|
public function testFormatFileEmptyButRequire()
|
{
|
$rule = array('name' => 'aFile', 'type' => 'file');
|
|
$rs = PhalApi_Request_Var::format('aFile', $rule, array());
|
$this->assertEquals(NULL, $rs);
|
}
|
|
/**
|
* $group testFile
|
*/
|
public function testFormatFileEmptyWithDefualt()
|
{
|
$default = array('name' => 'test.txt', 'type' => 'txt', 'tmp_name' => '/tmp/test.txt');
|
$rule = array('name' => 'aFile', 'default' => $default, 'type' => 'file');
|
$_FILES['aFile'] = null;
|
|
$rs = PhalApi_Request_Var::format('aFile', $rule, array());
|
$this->assertEquals($default, $rs);
|
}
|
|
/**
|
* @group testFormatEnum
|
*/
|
public function testFormatEnum()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('range' => array('ios', 'android'), 'type' => 'enum'), array('testKey' => 'ios'));
|
|
$this->assertSame('ios', $rs);
|
}
|
|
/**
|
* @group testFormatEnum
|
* @expectedException PhalApi_Exception_InternalServerError
|
*/
|
public function testFormatEnumWithRuleException()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('type' => 'enum', 'name' => 'testKey'), array('testKey' => 'ios'));
|
}
|
|
/**
|
* @group testFormatEnum
|
* @expectedException PhalApi_Exception_BadRequest
|
*/
|
public function testFormatEnumWithParamException()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey', array('type' => 'enum', 'name' => 'testKey', 'range' => array('ios', 'android')), array('testKey' => 'pc'));
|
}
|
|
public function testFormatAllTypes()
|
{
|
$params = array(
|
'floatVal' => '1.0',
|
'booleanVal' => '1',
|
'dateVal' => '2015-02-05 00:00:00',
|
'arrayVal' => 'a,b,c',
|
'enumVal' => 'male',
|
);
|
|
$rule = array('name' => 'floatVal', 'type' => 'float');
|
$rs = PhalApi_Request_Var::format('floatVal', $rule, $params);
|
$this->assertSame(1.0, $rs);
|
|
$rule = array('name' => 'booleanVal', 'type' => 'boolean');
|
$rs = PhalApi_Request_Var::format('booleanVal', $rule, $params);
|
$this->assertSame(true, $rs);
|
|
$rule = array('name' => 'dateVal', 'type' => 'date', 'format' => 'timestamp');
|
$rs = PhalApi_Request_Var::format('dateVal', $rule, $params);
|
$this->assertSame( 1423065600, $rs);
|
|
$rule = array('name' => 'arrayVal', 'type' => 'array', 'format' => 'explode');
|
$rs = PhalApi_Request_Var::format('arrayVal', $rule, $params);
|
$this->assertSame(array('a', 'b', 'c'), $rs);
|
|
$rule = array('name' => 'enumVal', 'type' => 'enum', 'range' => array('female', 'male'));
|
$rs = PhalApi_Request_Var::format('enumVal', $rule, $params);
|
$this->assertSame('male', $rs);
|
|
$rule = array('name' => 'noThisKey');
|
$rs = PhalApi_Request_Var::format('noThisKey', $rule, $params);
|
$this->assertSame(null, $rs);
|
|
$rule = array('name' => 'noThisKey', 'type' => 'noThisType');
|
$rs = PhalApi_Request_Var::format('noThisKey', $rule, $params);
|
$this->assertSame(null, $rs);
|
|
$_FILES['aFile'] = array('name' => 'aHa~', 'type' => 'image/jpeg', 'size' => 100, 'tmp_name' => '/tmp/123456', 'error' => 0);
|
$rule = array('name' => 'aFile', 'range' => array('image/jpeg'), 'min' => 50, 'max' => 1024, 'require' => true, 'default' => array(), 'type' => 'file');
|
$rs = PhalApi_Request_Var::format('aFile', $rule, $params);
|
$this->assertNotEmpty($rs);
|
}
|
|
/**
|
* @expectedException PhalApi_Exception_InternalServerError
|
*/
|
public function testGetEnumWithEmptyRange()
|
{
|
PhalApi_Request_Var::format('key', array('name' => 'key', 'type' => 'enum', 'range' => array()), array('key' => 'aHa~'));
|
}
|
|
public function testStringWithRegxRight()
|
{
|
//very simple mobile phone
|
$rule = array('name' => 'key', 'type' => 'string', 'regex' => '/^[0-9]{11}/');
|
PhalApi_Request_Var::format('testKey', $rule, array('testKey' => '13800138000'));
|
}
|
|
/**
|
* @expectedException PhalApi_Exception_BadRequest
|
*/
|
public function testStringWithRegxWrong()
|
{
|
$rule = array('name' => 'key', 'type' => 'string', 'regex' => '/^[0-9]{11}/');
|
PhalApi_Request_Var::format('key', $rule, array('key' => 'no a number'));
|
}
|
|
public function testFormatCallable()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey',
|
array('name' => 'testKey', 'type' => 'callable', 'callback' => array('PhalApi_Request_Var_MyCallback', 'go')),
|
array('testKey' => 1)
|
);
|
|
$this->assertSame(2, $rs);
|
}
|
|
/**
|
* @expectedException PhalApi_Exception_InternalServerError
|
*/
|
public function testFormatCallableButWroing()
|
{
|
$rs = PhalApi_Request_Var::format(
|
'testKey',
|
array('name' => 'testKey', 'type' => 'callable', 'callback' => 'xxx'),
|
array('testKey' => 1)
|
);
|
}
|
}
|
|
class PhalApi_Request_Var_MyCallback {
|
|
public static function go($value, $rule) {
|
return $value + 1;
|
}
|
}
|