Skip to content

Commit

Permalink
More tests for DataColumn (#250)
Browse files Browse the repository at this point in the history
  • Loading branch information
samdark authored Feb 14, 2025
1 parent 85b03c0 commit de2eb91
Showing 1 changed file with 231 additions and 0 deletions.
231 changes: 231 additions & 0 deletions tests/Column/DataColumnTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -548,4 +548,235 @@ public function testColumnClasses(): void
->render()
);
}

public function testFilterEmptyDefault(): void
{
$data = [
['id' => 1, 'status' => 0],
['id' => 2, 'status' => 1],
];

$output = GridView::widget()
->columns(
new DataColumn(
'status',
filter: true,
filterEmpty: true
),
)
->id('w1-grid')
->dataReader($this->createOffsetPaginator($data, 10))
->render();

$this->assertStringContainsString('<input type="text" name="status"', $output);
$this->assertStringContainsString('<td>&nbsp;</td>', $output);
$this->assertStringContainsString('<td>1</td>', $output);
}

public function testFilterEmptyCustom(): void
{
$data = [
['id' => 1, 'status' => 0],
['id' => 2, 'status' => 1],
];

$output = GridView::widget()
->columns(
new DataColumn(
'status',
filter: true,
filterEmpty: fn($value): bool => $value === 0
),
)
->id('w1-grid')
->dataReader($this->createOffsetPaginator($data, 10))
->render();

$this->assertStringContainsString('<input type="text" name="status"', $output);
$this->assertStringContainsString('<td>&nbsp;</td>', $output);
$this->assertStringContainsString('<td>1</td>', $output);
}

public function testDropdownFilter(): void
{
$data = [
['id' => 1, 'status' => 'active'],
['id' => 2, 'status' => 'inactive'],
];

$output = GridView::widget()
->columns(
new DataColumn(
'status',
filter: ['active' => 'Active', 'inactive' => 'Inactive']
),
)
->id('w1-grid')
->dataReader($this->createOffsetPaginator($data, 10))
->render();

$this->assertStringContainsString('<select name="status"', $output);
$this->assertStringContainsString('<option value="active">Active</option>', $output);
$this->assertStringContainsString('<option value="inactive">Inactive</option>', $output);
}

public function testHeaderWithoutProperty(): void
{
$output = GridView::widget()
->columns(
new DataColumn(
content: fn($data) => $data['id']
),
)
->id('w1-grid')
->dataReader($this->createOffsetPaginator($this->data, 10))
->render();

$this->assertStringContainsString('<th></th>', $output);
}

public function testHeaderWithCustomText(): void
{
$output = GridView::widget()
->columns(
new DataColumn(
property: 'id',
header: '<b>ID</b>',
encodeHeader: false
),
)
->id('w1-grid')
->dataReader($this->createOffsetPaginator($this->data, 10))
->render();

$this->assertStringContainsString('<th><b>ID</b></th>', $output);
}

public function testHeaderWithDefaultText(): void
{
$output = GridView::widget()
->columns(
new DataColumn('user_name'),
)
->id('w1-grid')
->dataReader($this->createOffsetPaginator($this->data, 10))
->render();

$this->assertStringContainsString('<th>User_name</th>', $output);
}

public function testColumnAndHeaderClass(): void
{
$output = GridView::widget()
->columns(
new DataColumn(
'id',
columnClass: 'column-class',
headerClass: 'header-class'
),
)
->id('w1-grid')
->dataReader($this->createOffsetPaginator($this->data, 10))
->columnGrouping()
->render();

$this->assertStringContainsString('<col class="column-class"', $output);
$this->assertStringContainsString('<th class="header-class"', $output);
}

public function testFilterWithValidationError(): void
{
$data = [
['id' => 1, 'email' => '[email protected]'],
['id' => 2, 'email' => 'invalid'],
];

$_GET['email'] = 'not-an-email';

$output = GridView::widget()
->columns(
new DataColumn(
'email',
filter: true,
filterValidation: new \Yiisoft\Validator\Rule\Email()
),
)
->id('w1-grid')
->dataReader($this->createOffsetPaginator($data, 10))
->render();

$this->assertStringContainsString('name="email"', $output);
$this->assertStringContainsString('[email protected]', $output);
$this->assertStringContainsString('invalid', $output);

unset($_GET['email']);
}

public function testSortingWithField(): void
{
$output = GridView::widget()
->columns(
new DataColumn(
'name',
field: 'user.name',
withSorting: true
),
)
->id('w1-grid')
->dataReader($this->createOffsetPaginator($this->data, 10))
->render();

$this->assertStringContainsString('<th>Name</th>', $output);
$this->assertStringContainsString('John', $output);
$this->assertStringContainsString('Mary', $output);
}

public function testCustomFilterFactory(): void
{
$data = [
['id' => 1, 'status' => 'active'],
['id' => 2, 'status' => 'inactive'],
];

$_GET['status'] = 'active';

$output = GridView::widget()
->columns(
new DataColumn(
'status',
filter: true,
filterFactory: new \Yiisoft\Yii\DataView\Filter\Factory\EqualsFilterFactory()
),
)
->id('w1-grid')
->dataReader($this->createOffsetPaginator($data, 10))
->render();

$this->assertStringContainsString('<input type="text" name="status"', $output);
$this->assertStringContainsString('active', $output);

unset($_GET['status']);
}

public function testContentWithNullValue(): void
{
$data = [
['id' => 1, 'name' => null],
['id' => 2, 'name' => 'Mary'],
];

$output = GridView::widget()
->columns(
new DataColumn(
'name',
content: fn($data) => $data['name'] ?? 'N/A'
),
)
->id('w1-grid')
->dataReader($this->createOffsetPaginator($data, 10))
->render();

$this->assertStringContainsString('<td>N/A</td>', $output);
$this->assertStringContainsString('<td>Mary</td>', $output);
}
}

0 comments on commit de2eb91

Please sign in to comment.