mockApplication(); } public function testGetAttributeLabel() { $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 specify both attribute names and validator type.'); $invalid = new InvalidRulesModel(); $invalid->createValidators(); } }