*
* @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 = '';
$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'
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'
HTML
, $result);
}
}