Qiang Xue
12 years ago
5 changed files with 281 additions and 1 deletions
@ -0,0 +1,17 @@
|
||||
<?php |
||||
namespace yiiunit\data\base; |
||||
use yii\base\Model; |
||||
|
||||
/** |
||||
* InvalidRulesModel |
||||
*/ |
||||
class InvalidRulesModel extends Model |
||||
{ |
||||
public function rules() |
||||
{ |
||||
return array( |
||||
array('test'), |
||||
); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,21 @@
|
||||
<?php |
||||
namespace yiiunit\data\base; |
||||
use yii\base\Model; |
||||
|
||||
/** |
||||
* Singer |
||||
*/ |
||||
class Singer extends Model |
||||
{ |
||||
public $fistName; |
||||
public $lastName; |
||||
|
||||
public function rules() |
||||
{ |
||||
return array( |
||||
array('lastName', 'default', 'value' => 'Lennon'), |
||||
array('lastName', 'required'), |
||||
array('underscore_style', 'yii\validators\CaptchaValidator'), |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,39 @@
|
||||
<?php |
||||
namespace yiiunit\data\base; |
||||
use yii\base\Model; |
||||
|
||||
/** |
||||
* Speaker |
||||
*/ |
||||
class Speaker extends Model |
||||
{ |
||||
public $firstName; |
||||
public $lastName; |
||||
|
||||
public $customLabel; |
||||
public $underscore_style; |
||||
|
||||
protected $protectedProperty; |
||||
private $_privateProperty; |
||||
|
||||
public function attributeLabels() |
||||
{ |
||||
return array( |
||||
'customLabel' => 'This is the custom label', |
||||
); |
||||
} |
||||
|
||||
public function rules() |
||||
{ |
||||
return array( |
||||
|
||||
); |
||||
} |
||||
|
||||
public function scenarios() |
||||
{ |
||||
return array( |
||||
'test' => array('firstName', 'lastName', '!underscore_style'), |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,203 @@
|
||||
<?php |
||||
|
||||
namespace yiiunit\framework\base; |
||||
use yii\base\Model; |
||||
use yiiunit\TestCase; |
||||
use yiiunit\data\base\Speaker; |
||||
use yiiunit\data\base\Singer; |
||||
use yiiunit\data\base\InvalidRulesModel; |
||||
|
||||
/** |
||||
* ModelTest |
||||
*/ |
||||
class ModelTest extends TestCase |
||||
{ |
||||
public function testGetAttributeLalel() |
||||
{ |
||||
$speaker = new Speaker(); |
||||
$this->assertEquals('First Name', $speaker->getAttributeLabel('firstName')); |
||||
$this->assertEquals('This is the custom label', $speaker->getAttributeLabel('customLabel')); |
||||
$this->assertEquals('Underscore Style', $speaker->getAttributeLabel('underscore_style')); |
||||
} |
||||
|
||||
public function testGetAttributes() |
||||
{ |
||||
$speaker = new Speaker(); |
||||
$speaker->firstName = 'Qiang'; |
||||
$speaker->lastName = 'Xue'; |
||||
|
||||
$this->assertEquals(array( |
||||
'firstName' => 'Qiang', |
||||
'lastName' => 'Xue', |
||||
'customLabel' => null, |
||||
'underscore_style' => null, |
||||
), $speaker->getAttributes()); |
||||
|
||||
$this->assertEquals(array( |
||||
'firstName' => 'Qiang', |
||||
'lastName' => 'Xue', |
||||
), $speaker->getAttributes(array('firstName', 'lastName'))); |
||||
|
||||
$this->assertEquals(array( |
||||
'firstName' => 'Qiang', |
||||
'lastName' => 'Xue', |
||||
), $speaker->getAttributes(null, array('customLabel', 'underscore_style'))); |
||||
|
||||
$this->assertEquals(array( |
||||
'firstName' => 'Qiang', |
||||
), $speaker->getAttributes(array('firstName', 'lastName'), array('lastName', 'customLabel', 'underscore_style'))); |
||||
} |
||||
|
||||
public function testSetAttributes() |
||||
{ |
||||
// by default mass assignment doesn't work at all |
||||
$speaker = new Speaker(); |
||||
$speaker->setAttributes(array('firstName' => 'Qiang', 'underscore_style' => 'test')); |
||||
$this->assertNull($speaker->firstName); |
||||
$this->assertNull($speaker->underscore_style); |
||||
|
||||
// in the test scenario |
||||
$speaker = new Speaker(); |
||||
$speaker->setScenario('test'); |
||||
$speaker->setAttributes(array('firstName' => 'Qiang', 'underscore_style' => 'test')); |
||||
$this->assertNull($speaker->underscore_style); |
||||
$this->assertEquals('Qiang', $speaker->firstName); |
||||
|
||||
$speaker->setAttributes(array('firstName' => 'Qiang', 'underscore_style' => 'test'), false); |
||||
$this->assertEquals('test', $speaker->underscore_style); |
||||
$this->assertEquals('Qiang', $speaker->firstName); |
||||
} |
||||
|
||||
public function testActiveAttributes() |
||||
{ |
||||
// by default mass assignment doesn't work at all |
||||
$speaker = new Speaker(); |
||||
$this->assertEmpty($speaker->activeAttributes()); |
||||
|
||||
$speaker = new Speaker(); |
||||
$speaker->setScenario('test'); |
||||
$this->assertEquals(array('firstName', 'lastName', 'underscore_style'), $speaker->activeAttributes()); |
||||
} |
||||
|
||||
public function testIsAttributeSafe() |
||||
{ |
||||
// by default mass assignment doesn't work at all |
||||
$speaker = new Speaker(); |
||||
$this->assertFalse($speaker->isAttributeSafe('firstName')); |
||||
|
||||
$speaker = new Speaker(); |
||||
$speaker->setScenario('test'); |
||||
$this->assertTrue($speaker->isAttributeSafe('firstName')); |
||||
|
||||
} |
||||
|
||||
public function testErrors() |
||||
{ |
||||
$speaker = new Speaker(); |
||||
|
||||
$this->assertEmpty($speaker->getErrors()); |
||||
$this->assertEmpty($speaker->getErrors('firstName')); |
||||
$this->assertEmpty($speaker->getFirstErrors()); |
||||
|
||||
$this->assertFalse($speaker->hasErrors()); |
||||
$this->assertFalse($speaker->hasErrors('firstName')); |
||||
|
||||
$speaker->addError('firstName', 'Something is wrong!'); |
||||
$this->assertEquals(array('firstName' => array('Something is wrong!')), $speaker->getErrors()); |
||||
$this->assertEquals(array('Something is wrong!'), $speaker->getErrors('firstName')); |
||||
|
||||
$speaker->addError('firstName', 'Totally wrong!'); |
||||
$this->assertEquals(array('firstName' => array('Something is wrong!', 'Totally wrong!')), $speaker->getErrors()); |
||||
$this->assertEquals(array('Something is wrong!', 'Totally wrong!'), $speaker->getErrors('firstName')); |
||||
|
||||
$this->assertTrue($speaker->hasErrors()); |
||||
$this->assertTrue($speaker->hasErrors('firstName')); |
||||
$this->assertFalse($speaker->hasErrors('lastName')); |
||||
|
||||
$this->assertEquals(array('Something is wrong!'), $speaker->getFirstErrors()); |
||||
$this->assertEquals('Something is wrong!', $speaker->getFirstError('firstName')); |
||||
$this->assertNull($speaker->getFirstError('lastName')); |
||||
|
||||
$speaker->addError('lastName', 'Another one!'); |
||||
$this->assertEquals(array( |
||||
'firstName' => array( |
||||
'Something is wrong!', |
||||
'Totally wrong!', |
||||
), |
||||
'lastName' => array('Another one!'), |
||||
), $speaker->getErrors()); |
||||
|
||||
$speaker->clearErrors('firstName'); |
||||
$this->assertEquals(array( |
||||
'lastName' => array('Another one!'), |
||||
), $speaker->getErrors()); |
||||
|
||||
$speaker->clearErrors(); |
||||
$this->assertEmpty($speaker->getErrors()); |
||||
$this->assertFalse($speaker->hasErrors()); |
||||
} |
||||
|
||||
public function testArraySyntax() |
||||
{ |
||||
$speaker = new Speaker(); |
||||
|
||||
// get |
||||
$this->assertNull($speaker['firstName']); |
||||
|
||||
// isset |
||||
$this->assertFalse(isset($speaker['firstName'])); |
||||
|
||||
// set |
||||
$speaker['firstName'] = 'Qiang'; |
||||
|
||||
$this->assertEquals('Qiang', $speaker['firstName']); |
||||
$this->assertTrue(isset($speaker['firstName'])); |
||||
|
||||
// iteration |
||||
$attributes = array(); |
||||
foreach($speaker as $key => $attribute) { |
||||
$attributes[$key] = $attribute; |
||||
} |
||||
$this->assertEquals(array( |
||||
'firstName' => 'Qiang', |
||||
'lastName' => null, |
||||
'customLabel' => null, |
||||
'underscore_style' => null, |
||||
), $attributes); |
||||
|
||||
// unset |
||||
unset($speaker['firstName']); |
||||
|
||||
// exception isn't expected here |
||||
$this->assertNull($speaker['firstName']); |
||||
$this->assertFalse(isset($speaker['firstName'])); |
||||
} |
||||
|
||||
public function testDefaults() |
||||
{ |
||||
$singer = new Model(); |
||||
$this->assertEquals(array(), $singer->rules()); |
||||
$this->assertEquals(array(), $singer->attributeLabels()); |
||||
} |
||||
|
||||
public function testDefaultScenarios() |
||||
{ |
||||
$singer = new Singer(); |
||||
$this->assertEquals(array('default' => array('lastName', 'underscore_style')), $singer->scenarios()); |
||||
} |
||||
|
||||
public function testIsAttributeRequired() |
||||
{ |
||||
$singer = new Singer(); |
||||
$this->assertFalse($singer->isAttributeRequired('firstName')); |
||||
$this->assertTrue($singer->isAttributeRequired('lastName')); |
||||
} |
||||
|
||||
public function testCreateValidators() |
||||
{ |
||||
$this->setExpectedException('yii\base\InvalidConfigException', 'Invalid validation rule: a rule must be an array specifying both attribute names and validator type.'); |
||||
|
||||
$invalid = new InvalidRulesModel(); |
||||
$invalid->createValidators(); |
||||
} |
||||
} |
Loading…
Reference in new issue