|  |  |  | @ -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(); | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | } |