You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
4.3 KiB
188 lines
4.3 KiB
<?php |
|
/** |
|
* @author Bennet Klarhoelter <boehsermoe@me.com> |
|
*/ |
|
namespace yiiunit\framework\widgets; |
|
use yii\base\Arrayable; |
|
use yii\base\ArrayableTrait; |
|
use yii\base\DynamicModel; |
|
use yii\base\Object; |
|
use yii\widgets\ActiveForm; |
|
use yii\widgets\DetailView; |
|
|
|
/** |
|
* @group widgets |
|
*/ |
|
class DetailViewTest extends \yiiunit\TestCase |
|
{ |
|
/** @var DetailView */ |
|
public $detailView; |
|
|
|
protected function setUp() |
|
{ |
|
parent::setUp(); |
|
|
|
$this->mockWebApplication(); |
|
} |
|
|
|
public function testRelationAttribute() |
|
{ |
|
$model = new ObjectMock(); |
|
$model->id = 'model'; |
|
$model->related = new ObjectMock(); |
|
$model->related->id = 'related'; |
|
|
|
$this->detailView = new PublicDetailView([ |
|
'model' => $model, |
|
'template' => '{label}:{value}', |
|
'attributes' => [ |
|
'id', |
|
'related.id', |
|
], |
|
]); |
|
|
|
$this->assertEquals('Id:model', $this->detailView->renderAttribute($this->detailView->attributes[0], 0)); |
|
$this->assertEquals('Related Id:related', $this->detailView->renderAttribute($this->detailView->attributes[1], 1)); |
|
|
|
// test null relation |
|
$model->related = null; |
|
|
|
$this->detailView = new PublicDetailView([ |
|
'model' => $model, |
|
'template' => '{label}:{value}', |
|
'attributes' => [ |
|
'id', |
|
'related.id', |
|
], |
|
]); |
|
|
|
$this->assertEquals('Id:model', $this->detailView->renderAttribute($this->detailView->attributes[0], 0)); |
|
$this->assertEquals('Related Id:<span class="not-set">(not set)</span>', $this->detailView->renderAttribute($this->detailView->attributes[1], 1)); |
|
} |
|
|
|
public function testArrayableModel() |
|
{ |
|
$expectedValue = [ |
|
[ |
|
'attribute' => 'id', |
|
'format' => 'text', |
|
'label' => 'Id', |
|
'value' => 1 |
|
], |
|
[ |
|
'attribute' => 'text', |
|
'format' => 'text', |
|
'label' => 'Text', |
|
'value' => 'I`m arrayable' |
|
], |
|
]; |
|
|
|
$model = new ArrayableMock(); |
|
$model->id = 1; |
|
$model->text = 'I`m arrayable'; |
|
|
|
$this->detailView = new DetailView([ |
|
'model' => $model, |
|
]); |
|
|
|
$this->assertEquals($expectedValue, $this->detailView->attributes); |
|
} |
|
|
|
public function testObjectModel() |
|
{ |
|
$expectedValue = [ |
|
[ |
|
'attribute' => 'id', |
|
'format' => 'text', |
|
'label' => 'Id', |
|
'value' => 1 |
|
], |
|
[ |
|
'attribute' => 'text', |
|
'format' => 'text', |
|
'label' => 'Text', |
|
'value' => 'I`m an object' |
|
], |
|
]; |
|
|
|
$model = new ObjectMock(); |
|
$model->id = 1; |
|
$model->text = 'I`m an object'; |
|
|
|
$this->detailView = new DetailView([ |
|
'model' => $model, |
|
]); |
|
|
|
$this->assertEquals($expectedValue, $this->detailView->attributes); |
|
} |
|
|
|
public function testArrayModel() |
|
{ |
|
$expectedValue = [ |
|
[ |
|
'attribute' => 'id', |
|
'format' => 'text', |
|
'label' => 'Id', |
|
'value' => 1 |
|
], |
|
[ |
|
'attribute' => 'text', |
|
'format' => 'text', |
|
'label' => 'Text', |
|
'value' => 'I`m an array' |
|
], |
|
]; |
|
|
|
$model = [ |
|
'id' => 1, |
|
'text' => 'I`m an array' |
|
]; |
|
|
|
$this->detailView = new DetailView([ |
|
'model' => $model, |
|
]); |
|
|
|
$this->assertEquals($expectedValue, $this->detailView->attributes); |
|
} |
|
} |
|
|
|
/** |
|
* Helper Class |
|
*/ |
|
class ArrayableMock implements Arrayable |
|
{ |
|
use ArrayableTrait; |
|
|
|
public $id; |
|
|
|
public $text; |
|
} |
|
|
|
/** |
|
* Helper Class |
|
*/ |
|
class ObjectMock extends Object |
|
{ |
|
public $id; |
|
public $text; |
|
|
|
private $_related; |
|
|
|
public function getRelated() |
|
{ |
|
return $this->_related; |
|
} |
|
|
|
public function setRelated($related) |
|
{ |
|
$this->_related = $related; |
|
} |
|
} |
|
|
|
class PublicDetailView extends DetailView |
|
{ |
|
public function renderAttribute($attribute, $index) |
|
{ |
|
return parent::renderAttribute($attribute, $index); |
|
} |
|
} |