2 changed files with 212 additions and 0 deletions
			
			
		| @ -0,0 +1,40 @@ | ||||
| <?php | ||||
| namespace yiiunit\data\base; | ||||
| 
 | ||||
| /** | ||||
|  * Speaker | ||||
|  */ | ||||
| use yii\base\Model; | ||||
| 
 | ||||
| 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,172 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace yiiunit\framework\base; | ||||
| use yiiunit\TestCase; | ||||
| use yiiunit\data\base\Speaker; | ||||
| 
 | ||||
| /** | ||||
|  * 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'])); | ||||
| 	} | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue