Yii2 framework backup
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.

197 lines
5.7 KiB

<?php
namespace yiiunit\framework\grid;
use Yii;
use yii\data\ArrayDataProvider;
use yii\grid\DataColumn;
use yii\grid\GridView;
use yiiunit\data\ar\ActiveRecord;
use yiiunit\data\ar\Order;
/**
* @author Dmitry Naumenko <d.naumenko.a@gmail.com>
*
* @group grid
*/
class DataColumnTest extends \yiiunit\TestCase
{
/**
* @see DataColumn::getHeaderCellLabel()
*/
public function testColumnLabels_OnEmpty_ArrayProvider()
{
$this->mockApplication();
$grid = new GridView([
'dataProvider' => new ArrayDataProvider([
'allModels' => [],
'totalCount' => 0,
'modelClass' => Order::className()
]),
'columns' => ['customer_id', 'total'],
]);
$labels = [];
foreach ($grid->columns as $column) {
$method = new \ReflectionMethod($column, 'getHeaderCellLabel');
$method->setAccessible(true);
$labels[] = $method->invoke($column);
}
$this->assertEquals(['Customer', 'Invoice Total'], $labels);
}
/**
* @see DataColumn::getHeaderCellLabel()
*/
public function testColumnLabels_OnEmpty_ArrayProvider_WithFilterModel()
{
$this->mockApplication();
$grid = new GridView([
'dataProvider' => new ArrayDataProvider([
'allModels' => [],
'totalCount' => 0,
]),
'columns' => ['customer_id', 'total'],
'filterModel' => new Order,
]);
$labels = [];
foreach ($grid->columns as $column) {
$method = new \ReflectionMethod($column, 'getHeaderCellLabel');
$method->setAccessible(true);
$labels[] = $method->invoke($column);
}
$this->assertEquals(['Customer', 'Invoice Total'], $labels);
}
/**
* @see DataColumn::$filter
* @see DataColumn::renderFilterCellContent()
*/
public function testFilterInput_String()
{
$this->mockApplication();
$filterInput = '<input type="text"/>';
$grid = new GridView([
'dataProvider' => new ArrayDataProvider([
'allModels' => [],
'totalCount' => 0,
]),
'columns' => [
0 => [
'attribute' => 'customer_id',
'filter' => $filterInput,
],
],
]);
//print_r($grid->columns);exit();
$dataColumn = $grid->columns[0];
$method = new \ReflectionMethod($dataColumn, 'renderFilterCellContent');
$method->setAccessible(true);
$result = $method->invoke($dataColumn);
$this->assertEquals($result, $filterInput);
}
/**
* @see DataColumn::$filter
* @see DataColumn::renderFilterCellContent()
*/
public function testFilterInput_Array()
{
$this->mockApplication([
'components' => [
'db' => [
'class' => '\yii\db\Connection',
'dsn' => 'sqlite::memory:',
]
]
]);
$columns = [
'id' => 'pk',
'customer_id' => 'integer',
];
ActiveRecord::$db = Yii::$app->getDb();
Yii::$app->getDb()->createCommand()->createTable(Order::tableName(), $columns)->execute();
$filterInput = [1, 2];
$grid = new GridView([
'dataProvider' => new ArrayDataProvider([
'allModels' => [],
'totalCount' => 0,
]),
'columns' => [
0 => [
'attribute' => 'customer_id',
'filter' => $filterInput,
]
],
'filterModel' => new Order,
]);
$dataColumn = $grid->columns[0];
$method = new \ReflectionMethod($dataColumn, 'renderFilterCellContent');
$method->setAccessible(true);
$result = $method->invoke($dataColumn);
$this->assertEqualsWithoutLE(<<<HTML
<select class="form-control" name="Order[customer_id]">
<option value=""></option>
<option value="0">1</option>
<option value="1">2</option>
</select>
HTML
, $result);
}
/**
* @see DataColumn::$filter
* @see DataColumn::renderFilterCellContent()
*/
public function testFilterInput_FormatBoolean()
{
$this->mockApplication([
'components' => [
'db' => [
'class' => '\yii\db\Connection',
'dsn' => 'sqlite::memory:',
]
]
]);
$columns = [
'id' => 'pk',
'customer_id' => 'integer',
];
ActiveRecord::$db = Yii::$app->getDb();
Yii::$app->getDb()->createCommand()->createTable(Order::tableName(), $columns)->execute();
$grid = new GridView([
'dataProvider' => new ArrayDataProvider([
'allModels' => [],
'totalCount' => 0,
]),
'columns' => [
0 => [
'attribute' => 'customer_id',
'format' => 'boolean', // does not make sense for this column but should still output proper dropdown list
],
],
'filterModel' => new Order,
]);
$dataColumn = $grid->columns[0];
$method = new \ReflectionMethod($dataColumn, 'renderFilterCellContent');
$method->setAccessible(true);
$result = $method->invoke($dataColumn);
$this->assertEqualsWithoutLE(<<<HTML
<select class="form-control" name="Order[customer_id]">
<option value=""></option>
<option value="0">No</option>
<option value="1">Yes</option>
</select>
HTML
, $result);
}
}