Skip to content

Commit 9cd2936

Browse files
committed
Deprecate FormColumnType, add tests for built-in column types
1 parent da1e2dd commit 9cd2936

15 files changed

+822
-162
lines changed

src/Column/Type/EnumColumnType.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
final class EnumColumnType extends AbstractColumnType
1212
{
1313
public function __construct(
14-
private ?TranslatorInterface $translator,
14+
private ?TranslatorInterface $translator = null,
1515
) {
1616
}
1717

@@ -22,7 +22,11 @@ public function configureOptions(OptionsResolver $resolver): void
2222

2323
protected function format(\UnitEnum $enum): string
2424
{
25-
return $enum instanceof TranslatableInterface ? $enum->trans($this->translator) : $enum->name;
25+
if ($enum instanceof TranslatableInterface && null !== $this->translator) {
26+
return $enum->trans($this->translator);
27+
}
28+
29+
return $enum->name;
2630
}
2731

2832
public function getParent(): ?string

src/Column/Type/FormColumnType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
use Symfony\Component\Form\FormInterface;
1010
use Symfony\Component\OptionsResolver\OptionsResolver;
1111

12+
/**
13+
* @deprecated
14+
*/
1215
final class FormColumnType extends AbstractColumnType
1316
{
1417
public function buildValueView(ColumnValueView $view, ColumnInterface $column, array $options): void

src/Test/Column/Type/ColumnTypeTestCase.php

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
namespace Kreyu\Bundle\DataTableBundle\Test\Column\Type;
66

77
use Kreyu\Bundle\DataTableBundle\Column\ColumnFactoryInterface;
8+
use Kreyu\Bundle\DataTableBundle\Column\ColumnHeaderView;
89
use Kreyu\Bundle\DataTableBundle\Column\ColumnInterface;
910
use Kreyu\Bundle\DataTableBundle\Column\ColumnRegistry;
1011
use Kreyu\Bundle\DataTableBundle\Column\ColumnRegistryInterface;
12+
use Kreyu\Bundle\DataTableBundle\Column\ColumnValueView;
13+
use Kreyu\Bundle\DataTableBundle\Column\Type\ColumnType;
1114
use Kreyu\Bundle\DataTableBundle\Column\Type\ColumnTypeInterface;
1215
use Kreyu\Bundle\DataTableBundle\Column\Type\ResolvedColumnTypeFactory;
1316
use Kreyu\Bundle\DataTableBundle\Column\Type\ResolvedColumnTypeFactoryInterface;
@@ -16,11 +19,14 @@
1619
use Kreyu\Bundle\DataTableBundle\DataTableInterface;
1720
use Kreyu\Bundle\DataTableBundle\DataTableRegistry;
1821
use Kreyu\Bundle\DataTableBundle\DataTableRegistryInterface;
22+
use Kreyu\Bundle\DataTableBundle\DataTableView;
23+
use Kreyu\Bundle\DataTableBundle\HeaderRowView;
1924
use Kreyu\Bundle\DataTableBundle\Query\ArrayProxyQuery;
2025
use Kreyu\Bundle\DataTableBundle\Tests\Fixtures\Column\TestColumnFactory;
2126
use Kreyu\Bundle\DataTableBundle\Type\DataTableType;
2227
use Kreyu\Bundle\DataTableBundle\Type\ResolvedDataTableTypeFactory;
2328
use Kreyu\Bundle\DataTableBundle\Type\ResolvedDataTableTypeFactoryInterface;
29+
use Kreyu\Bundle\DataTableBundle\ValueRowView;
2430
use PHPUnit\Framework\TestCase;
2531

2632
abstract class ColumnTypeTestCase extends TestCase
@@ -35,6 +41,16 @@ abstract class ColumnTypeTestCase extends TestCase
3541

3642
abstract protected function getTestedColumnType(): ColumnTypeInterface;
3743

44+
/**
45+
* @return ColumnTypeInterface[]
46+
*/
47+
protected function getAdditionalColumnTypes(): array
48+
{
49+
return [
50+
new ColumnType(),
51+
];
52+
}
53+
3854
protected function createColumn(array $options = []): ColumnInterface
3955
{
4056
return $this->getColumnFactory()->create($this->getTestedColumnType()::class, $options);
@@ -66,7 +82,10 @@ protected function getColumnRegistry(): ColumnRegistryInterface
6682
protected function createColumnRegistry(): ColumnRegistryInterface
6783
{
6884
return new ColumnRegistry(
69-
types: [$this->getTestedColumnType()],
85+
types: [
86+
$this->getTestedColumnType(),
87+
...$this->getAdditionalColumnTypes(),
88+
],
7089
typeExtensions: [],
7190
resolvedTypeFactory: $this->getResolvedColumnTypeFactory(),
7291
);
@@ -126,4 +145,40 @@ protected function createDataTable(): DataTableInterface
126145
{
127146
return $this->getDataTableFactory()->create(DataTableType::class, new ArrayProxyQuery([]));
128147
}
148+
149+
protected function createHeaderRowView(?DataTableView $dataTableView = null): HeaderRowView
150+
{
151+
return new HeaderRowView($dataTableView ?? new DataTableView());
152+
}
153+
154+
protected function createValueRowView(?DataTableView $dataTableView = null, int $index = 0, mixed $data = null): ValueRowView
155+
{
156+
return new ValueRowView($dataTableView ?? new DataTableView(), $index, $data);
157+
}
158+
159+
protected function createColumnHeaderView(ColumnInterface $column, ?HeaderRowView $headerRowView = null): ColumnHeaderView
160+
{
161+
return $column->createHeaderView($headerRowView ?? $this->createHeaderRowView());
162+
}
163+
164+
protected function createExportColumnHeaderView(ColumnInterface $column, ?HeaderRowView $headerRowView = null): ColumnHeaderView
165+
{
166+
return $column->createExportHeaderView($headerRowView ?? $this->createHeaderRowView());
167+
}
168+
169+
protected function createColumnValueView(ColumnInterface $column, ?ValueRowView $valueRowView = null, mixed $data = null, mixed $rowData = null): ColumnValueView
170+
{
171+
$columnValueView = $column->createValueView($valueRowView ?? $this->createValueRowView(data: $rowData));
172+
$columnValueView->data = $data;
173+
174+
return $columnValueView;
175+
}
176+
177+
protected function createExportColumnValueView(ColumnInterface $column, ?ValueRowView $valueRowView = null, mixed $data = null, mixed $rowData = null): ColumnValueView
178+
{
179+
$columnValueView = $column->createExportValueView($valueRowView ?? $this->createValueRowView(data: $rowData));
180+
$columnValueView->data = $data;
181+
182+
return $columnValueView;
183+
}
129184
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Kreyu\Bundle\DataTableBundle\Tests\Fixtures\Enum;
6+
7+
use Symfony\Contracts\Translation\TranslatableInterface;
8+
use Symfony\Contracts\Translation\TranslatorInterface;
9+
10+
enum TranslatableEnum implements TranslatableInterface
11+
{
12+
case Foo;
13+
case Bar;
14+
15+
public function trans(TranslatorInterface $translator, ?string $locale = null): string
16+
{
17+
return match ($this) {
18+
self::Foo => 'Translated foo',
19+
self::Bar => 'Translated bar',
20+
};
21+
}
22+
}

tests/Fixtures/Enum/UnitEnum.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Kreyu\Bundle\DataTableBundle\Tests\Fixtures\Enum;
6+
7+
enum UnitEnum
8+
{
9+
case Foo;
10+
case Bar;
11+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Kreyu\Bundle\DataTableBundle\Tests\Unit\Column\Type;
6+
7+
use Kreyu\Bundle\DataTableBundle\Column\Type\BooleanColumnType;
8+
use Kreyu\Bundle\DataTableBundle\Column\Type\ColumnTypeInterface;
9+
use Kreyu\Bundle\DataTableBundle\Test\Column\Type\ColumnTypeTestCase;
10+
11+
class BooleanColumnTypeTest extends ColumnTypeTestCase
12+
{
13+
protected function getTestedColumnType(): ColumnTypeInterface
14+
{
15+
return new BooleanColumnType();
16+
}
17+
18+
public function testLabelTrueOption(): void
19+
{
20+
$column = $this->createColumn([
21+
'label_true' => 'True',
22+
]);
23+
24+
$valueView = $this->createColumnValueView($column);
25+
26+
$this->assertEquals('True', $valueView->vars['label_true']);
27+
}
28+
29+
public function testLabelFalseOption(): void
30+
{
31+
$column = $this->createColumn([
32+
'label_false' => 'False',
33+
]);
34+
35+
$valueView = $this->createColumnValueView($column);
36+
37+
$this->assertEquals('False', $valueView->vars['label_false']);
38+
}
39+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Kreyu\Bundle\DataTableBundle\Tests\Unit\Column\Type;
6+
7+
use Kreyu\Bundle\DataTableBundle\Column\Type\CheckboxColumnType;
8+
use Kreyu\Bundle\DataTableBundle\Column\Type\ColumnTypeInterface;
9+
use Kreyu\Bundle\DataTableBundle\Test\Column\Type\ColumnTypeTestCase;
10+
11+
class CheckboxColumnTypeTest extends ColumnTypeTestCase
12+
{
13+
protected function getTestedColumnType(): ColumnTypeInterface
14+
{
15+
return new CheckboxColumnType();
16+
}
17+
18+
public function testPassingIdentifierNameOption(): void
19+
{
20+
$column = $this->createColumn([
21+
'identifier_name' => 'uuid',
22+
]);
23+
24+
$columnHeaderView = $this->createColumnHeaderView($column);
25+
$columnValueView = $this->createColumnValueView($column);
26+
27+
$this->assertEquals('uuid', $columnHeaderView->vars['identifier_name']);
28+
$this->assertEquals('uuid', $columnValueView->vars['identifier_name']);
29+
}
30+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Kreyu\Bundle\DataTableBundle\Tests\Unit\Column\Type;
6+
7+
use Kreyu\Bundle\DataTableBundle\Column\ColumnValueView;
8+
use Kreyu\Bundle\DataTableBundle\Column\Type\CollectionColumnType;
9+
use Kreyu\Bundle\DataTableBundle\Column\Type\ColumnType;
10+
use Kreyu\Bundle\DataTableBundle\Column\Type\ColumnTypeInterface;
11+
use Kreyu\Bundle\DataTableBundle\Column\Type\NumberColumnType;
12+
use Kreyu\Bundle\DataTableBundle\Column\Type\TextColumnType;
13+
use Kreyu\Bundle\DataTableBundle\Test\Column\Type\ColumnTypeTestCase;
14+
15+
class CollectionColumnTypeTest extends ColumnTypeTestCase
16+
{
17+
protected function getTestedColumnType(): ColumnTypeInterface
18+
{
19+
return new CollectionColumnType();
20+
}
21+
22+
protected function getAdditionalColumnTypes(): array
23+
{
24+
return [
25+
new NumberColumnType(),
26+
new TextColumnType(),
27+
new ColumnType(),
28+
];
29+
}
30+
31+
public function testPassingSeparatorOptionAsString(): void
32+
{
33+
$column = $this->createColumn([
34+
'separator' => '|',
35+
]);
36+
37+
$valueView = $this->createColumnValueView($column);
38+
39+
$this->assertEquals('|', $valueView->vars['separator']);
40+
}
41+
42+
public function testPassingSeparatorOptionAsNull(): void
43+
{
44+
$column = $this->createColumn([
45+
'separator' => null,
46+
]);
47+
48+
$valueView = $this->createColumnValueView($column);
49+
50+
$this->assertNull($valueView->vars['separator']);
51+
}
52+
53+
public function testCreatesChildren(): void
54+
{
55+
$column = $this->createColumn([
56+
'entry_type' => NumberColumnType::class,
57+
'entry_options' => [
58+
'use_intl_formatter' => false,
59+
],
60+
]);
61+
62+
$data = new class {
63+
public array $collection = [1, 2, 3];
64+
};
65+
66+
$valueRowView = $this->createValueRowView(data: $data);
67+
$columnValueView = $this->createColumnValueView($column, $valueRowView);
68+
69+
$this->assertCount(3, $columnValueView->vars['children']);
70+
$this->assertContainsOnlyInstancesOf(ColumnValueView::class, $columnValueView->vars['children']);
71+
72+
for ($i = 0; $i <= 2; ++$i) {
73+
/** @var ColumnValueView $child */
74+
$child = $columnValueView->vars['children'][$i];
75+
76+
$expectedValueRowView = clone $valueRowView;
77+
$expectedValueRowView->origin = $valueRowView;
78+
$expectedValueRowView->index = $i;
79+
$expectedValueRowView->data = $data->collection[$i];
80+
81+
$this->assertEquals((string) $i, $child->vars['name']);
82+
$this->assertEquals($expectedValueRowView, $child->vars['row']);
83+
$this->assertFalse($child->vars['use_intl_formatter']);
84+
$this->assertEquals($child->getDataTable(), $columnValueView->getDataTable());
85+
}
86+
}
87+
}

0 commit comments

Comments
 (0)