From 8a1161ee7a78d8a28f04042c2f97f8dfa83ccee7 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Thu, 6 Mar 2025 02:14:48 +0300 Subject: [PATCH 01/10] tests --- src/UrlParametersFactory.php | 3 + tests/Column/Base/GlobalContextTest.php | 85 ++++++++ tests/Column/Base/RendererContainerTest.php | 114 ++++++++++ tests/Column/CheckboxColumnRendererTest.php | 224 ++++++++++++++++++++ tests/Column/DataColumnRendererTest.php | 219 +++++++++++++++++++ tests/UrlParametersFactoryTest.php | 76 ++++--- 6 files changed, 688 insertions(+), 33 deletions(-) create mode 100644 tests/Column/Base/GlobalContextTest.php create mode 100644 tests/Column/Base/RendererContainerTest.php create mode 100644 tests/Column/CheckboxColumnRendererTest.php diff --git a/src/UrlParametersFactory.php b/src/UrlParametersFactory.php index 063f5ab73..d100a327c 100644 --- a/src/UrlParametersFactory.php +++ b/src/UrlParametersFactory.php @@ -32,6 +32,9 @@ final class UrlParametersFactory * - Path arguments as key-value pairs * - Query parameters as key-value pairs */ + /** + * @return array{0: array, 1: array} + */ public static function create( ?PageToken $pageToken, int|string|null $pageSize, diff --git a/tests/Column/Base/GlobalContextTest.php b/tests/Column/Base/GlobalContextTest.php new file mode 100644 index 000000000..bbdf46b80 --- /dev/null +++ b/tests/Column/Base/GlobalContextTest.php @@ -0,0 +1,85 @@ +createMock(ReadableDataInterface::class); + $translator = $this->createMock(TranslatorInterface::class); + $pathArguments = ['id' => 123]; + $queryParameters = ['sort' => 'name']; + $translationCategory = 'app'; + + $context = new GlobalContext( + $dataReader, + $pathArguments, + $queryParameters, + $translator, + $translationCategory + ); + + $this->assertSame($dataReader, $context->dataReader); + $this->assertSame($pathArguments, $context->pathArguments); + $this->assertSame($queryParameters, $context->queryParameters); + } + + public function testTranslateWithString(): void + { + $translator = $this->createMock(TranslatorInterface::class); + $translator + ->expects($this->once()) + ->method('translate') + ->with('test.message', [], 'app') + ->willReturn('Test Message'); + + $context = new GlobalContext( + $this->createMock(ReadableDataInterface::class), + [], + [], + $translator, + 'app' + ); + + $this->assertSame('Test Message', $context->translate('test.message')); + } + + public function testTranslateWithStringable(): void + { + $stringable = new class implements Stringable { + public function __toString(): string + { + return 'test.stringable'; + } + }; + + $translator = $this->createMock(TranslatorInterface::class); + $translator + ->expects($this->once()) + ->method('translate') + ->with('test.stringable', [], 'app') + ->willReturn('Test Stringable'); + + $context = new GlobalContext( + $this->createMock(ReadableDataInterface::class), + [], + [], + $translator, + 'app' + ); + + $this->assertSame('Test Stringable', $context->translate($stringable)); + } +} diff --git a/tests/Column/Base/RendererContainerTest.php b/tests/Column/Base/RendererContainerTest.php new file mode 100644 index 000000000..cecb00059 --- /dev/null +++ b/tests/Column/Base/RendererContainerTest.php @@ -0,0 +1,114 @@ +renderer = new TestRenderer(); + $this->container = $this->createMock(ContainerInterface::class); + $this->container + ->method('get') + ->willReturnCallback(fn(string $class) => match ($class) { + TestRenderer::class => $this->renderer, + default => throw new \RuntimeException("Unexpected class: $class"), + }); + $this->rendererContainer = new RendererContainer($this->container); + } + + public function testGetCreatesNewInstance(): void + { + $instance = $this->rendererContainer->get(TestRenderer::class); + $this->assertInstanceOf(TestRenderer::class, $instance); + } + + public function testGetReturnsCachedInstance(): void + { + $instance1 = $this->rendererContainer->get(TestRenderer::class); + $instance2 = $this->rendererContainer->get(TestRenderer::class); + $this->assertSame($instance1, $instance2); + } + + public function testAddConfigsCreatesNewInstanceWithConfig(): void + { + $container = $this->rendererContainer->addConfigs([ + TestRenderer::class => ['value' => 'custom'], + ]); + + $instance = $container->get(TestRenderer::class); + $this->assertSame('custom', $instance->getValue()); + } + + public function testAddConfigsMergesExistingConfig(): void + { + $container = $this->rendererContainer + ->addConfigs([TestRenderer::class => ['value' => 'first']]) + ->addConfigs([TestRenderer::class => ['option' => 'second']]); + + $instance = $container->get(TestRenderer::class); + $this->assertSame('first', $instance->getValue()); + $this->assertSame('second', $instance->getOption()); + } +} + +/** + * Test renderer implementation. + */ +final class TestRenderer implements ColumnRendererInterface +{ + public function __construct( + private string $value = 'default', + private string $option = 'default', + ) { + } + + public function getValue(): string + { + return $this->value; + } + + public function getOption(): string + { + return $this->option; + } + + public function renderColumn(ColumnInterface $column, Cell $cell, GlobalContext $context): Cell + { + return $cell; + } + + public function renderHeader(ColumnInterface $column, Cell $cell, HeaderContext $context): ?Cell + { + return $cell; + } + + public function renderBody(ColumnInterface $column, Cell $cell, DataContext $context): Cell + { + return $cell; + } + + public function renderFooter(ColumnInterface $column, Cell $cell, GlobalContext $context): Cell + { + return $cell; + } +} diff --git a/tests/Column/CheckboxColumnRendererTest.php b/tests/Column/CheckboxColumnRendererTest.php new file mode 100644 index 000000000..85ba7c6bb --- /dev/null +++ b/tests/Column/CheckboxColumnRendererTest.php @@ -0,0 +1,224 @@ +renderer = new CheckboxColumnRenderer(); + $this->cell = new Cell(); + $this->dataReader = new IterableDataReader([ + ['id' => 1, 'name' => 'John'], + ['id' => 2, 'name' => 'Mary'], + ]); + $this->globalContext = new GlobalContext( + $this->dataReader, + [], + [], + Mock::translator('en'), + 'test' + ); + } + + public function testRenderColumn(): void + { + $column = new CheckboxColumn(columnAttributes: ['class' => 'test-class']); + $result = $this->renderer->renderColumn($column, $this->cell, $this->globalContext); + $this->assertSame(['class' => 'test-class'], $result->getAttributes()); + } + + public function testRenderHeaderWithoutHeaderAndSingleSelection(): void + { + $column = new CheckboxColumn(multiple: false); + $sort = Sort::any(); + $context = new HeaderContext( + $sort, + $sort, + ['test' => 'test'], + 'sortable', + '', + '', + 'asc', + '', + '', + 'desc', + '', + '', + [], + 'asc-link', + 'desc-link', + null, + 10, + false, + new UrlConfig(), + null, + Mock::translator('en'), + 'test' + ); + $result = $this->renderer->renderHeader($column, $this->cell, $context); + $this->assertNull($result); + } + + public function testRenderHeaderWithoutHeaderAndMultipleSelection(): void + { + $column = new CheckboxColumn(multiple: true); + $sort = Sort::any(); + $context = new HeaderContext( + $sort, + $sort, + ['test' => 'test'], + 'sortable', + '', + '', + 'asc', + '', + '', + 'desc', + '', + '', + [], + 'asc-link', + 'desc-link', + null, + 10, + false, + new UrlConfig(), + null, + Mock::translator('en'), + 'test' + ); + $result = $this->renderer->renderHeader($column, $this->cell, $context); + $this->assertNotNull($result); + $this->assertStringContainsString('checkbox-selection-all', (string) $result->getContent()[0]); + } + + public function testRenderHeaderWithCustomHeader(): void + { + $column = new CheckboxColumn( + header: 'Custom Header', + headerAttributes: ['class' => 'header-class'] + ); + $sort = Sort::any(); + $context = new HeaderContext( + $sort, + $sort, + ['test' => 'test'], + 'sortable', + '', + '', + 'asc', + '', + '', + 'desc', + '', + '', + [], + 'asc-link', + 'desc-link', + null, + 10, + false, + new UrlConfig(), + null, + Mock::translator('en'), + 'test' + ); + $result = $this->renderer->renderHeader($column, $this->cell, $context); + $this->assertNotNull($result); + $this->assertSame('Custom Header', $result->getContent()[0]); + $this->assertSame(['class' => 'header-class'], $result->getAttributes()); + } + + public function testRenderBodyWithDefaultNameAndValue(): void + { + $column = new CheckboxColumn(); + $context = new DataContext( + $this->dataReader, + $column, + ['id' => 1, 'name' => 'John'], + 1, + 0 + ); + $result = $this->renderer->renderBody($column, $this->cell, $context); + $content = (string) $result->getContent()[0]; + $this->assertStringContainsString('name="checkbox-selection"', $content); + $this->assertStringContainsString('value="1"', $content); + $this->assertFalse($result->shouldEncode()); + } + + public function testRenderBodyWithCustomNameAndValue(): void + { + $column = new CheckboxColumn( + inputAttributes: [ + 'name' => 'custom-name', + 'value' => 'custom-value', + 'class' => 'custom-class', + ] + ); + $context = new DataContext( + $this->dataReader, + $column, + ['id' => 1, 'name' => 'John'], + 1, + 0 + ); + $result = $this->renderer->renderBody($column, $this->cell, $context); + $content = (string) $result->getContent()[0]; + $this->assertStringContainsString('name="custom-name"', $content); + $this->assertStringContainsString('value="custom-value"', $content); + $this->assertStringContainsString('class="custom-class"', $content); + } + + public function testRenderBodyWithCustomContent(): void + { + $column = new CheckboxColumn( + content: static fn(Checkbox $input, DataContext $context): string => "
{$input->render()}
" + ); + $context = new DataContext( + $this->dataReader, + $column, + ['id' => 1, 'name' => 'John'], + 1, + 0 + ); + $result = $this->renderer->renderBody($column, $this->cell, $context); + $content = (string) $result->getContent()[0]; + $this->assertStringStartsWith('
', $content); + $this->assertStringEndsWith('
', $content); + } + + public function testRenderFooterWithContent(): void + { + $column = new CheckboxColumn(footer: 'Test Footer'); + $result = $this->renderer->renderFooter($column, $this->cell, $this->globalContext); + $this->assertSame('Test Footer', $result->getContent()[0]); + } + + public function testRenderFooterWithoutContent(): void + { + $column = new CheckboxColumn(); + $result = $this->renderer->renderFooter($column, $this->cell, $this->globalContext); + $this->assertEmpty($result->getContent()); + } +} diff --git a/tests/Column/DataColumnRendererTest.php b/tests/Column/DataColumnRendererTest.php index 47709bcb0..7a93d8a82 100644 --- a/tests/Column/DataColumnRendererTest.php +++ b/tests/Column/DataColumnRendererTest.php @@ -15,11 +15,14 @@ use Yiisoft\Yii\DataView\Column\Base\DataContext; use Yiisoft\Yii\DataView\Column\Base\GlobalContext; use Yiisoft\Yii\DataView\Column\Base\HeaderContext; +use Yiisoft\Yii\DataView\Column\Base\FilterContext; +use Yiisoft\Yii\DataView\Column\Base\MakeFilterContext; use Yiisoft\Yii\DataView\Column\DataColumn; use Yiisoft\Yii\DataView\Column\DataColumnRenderer; use Yiisoft\Yii\DataView\Tests\Support\Mock; use Yiisoft\Yii\DataView\Tests\Support\TestTrait; use Yiisoft\Yii\DataView\UrlConfig; +use Yiisoft\Validator\Rule\Number; final class DataColumnRendererTest extends TestCase { @@ -144,4 +147,220 @@ public function testGetOrderProperties(): void $result = $renderer->getOrderProperties($column); $this->assertEquals(['test' => 'test'], $result); } + + public function testRenderBodyWithCustomContentCallback(): void + { + $column = new DataColumn( + 'name', + content: static fn (array $data) => strtoupper($data['name']) + ); + $cell = new Cell(); + $data = ['id' => 1, 'name' => 'John Doe', 'age' => 20]; + + $context = new DataContext( + $this->dataReader, + $column, + $data, + 1, + 0 + ); + + $renderer = new DataColumnRenderer( + $this->filterFactoryContainer, + new Validator() + ); + + $result = $renderer->renderBody($column, $cell, $context); + $content = $result->getContent(); + $this->assertNotEmpty($content); + $this->assertStringContainsString('JOHN DOE', (string)$content[0]); + } + + public function testRenderBodyWithDateTime(): void + { + $date = new \DateTime('2025-03-06 02:00:22'); + $column = new DataColumn('created_at', dateTimeFormat: 'Y-m-d'); + $cell = new Cell(); + $data = ['id' => 1, 'created_at' => $date]; + + $context = new DataContext( + $this->dataReader, + $column, + $data, + 1, + 0 + ); + + $renderer = new DataColumnRenderer( + $this->filterFactoryContainer, + new Validator() + ); + + $result = $renderer->renderBody($column, $cell, $context); + $content = $result->getContent(); + $this->assertNotEmpty($content); + $this->assertStringContainsString('2025-03-06', (string)$content[0]); + } + + public function testRenderBodyWithDynamicAttributes(): void + { + $column = new DataColumn( + 'age', + bodyAttributes: static fn (array $data) => ['class' => $data['age'] >= 21 ? 'adult' : 'minor'] + ); + $cell = new Cell(); + $data = ['id' => 2, 'name' => 'Mary', 'age' => 21]; + + $context = new DataContext( + $this->dataReader, + $column, + $data, + 1, + 0 + ); + + $renderer = new DataColumnRenderer( + $this->filterFactoryContainer, + new Validator() + ); + + $result = $renderer->renderBody($column, $cell, $context); + $this->assertStringContainsString('adult', $result->getAttributes()['class']); + } + + public function testRenderFilterWithDropdown(): void + { + $column = new DataColumn( + 'status', + filter: ['active' => 'Active', 'inactive' => 'Inactive'] + ); + $cell = new Cell(); + + $urlParameterProvider = new class implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + public function get(string $name, int $type): ?string + { + return 'active'; + } + }; + + $context = new FilterContext( + 'filter-form', + new \Yiisoft\Validator\Result(), + 'invalid', + ['class' => 'error-container'], + $urlParameterProvider + ); + + $renderer = new DataColumnRenderer( + $this->filterFactoryContainer, + new Validator() + ); + + $result = $renderer->renderFilter($column, $cell, $context); + $this->assertNotNull($result); + $content = $result->getContent(); + $this->assertStringContainsString('select', (string)$content[0]); + $this->assertStringContainsString('Active', (string)$content[0]); + $this->assertStringContainsString('Inactive', (string)$content[0]); + } + + public function testMakeFilterWithCustomFactory(): void + { + $column = new DataColumn( + 'name', + filterFactory: \Yiisoft\Yii\DataView\Filter\Factory\LikeFilterFactory::class + ); + + $urlParameterProvider = new class implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + public function get(string $name, int $type): ?string + { + return match ($name) { + 'name' => 'John', + 'age' => 'not-a-number', + 'status' => '', + default => null, + }; + } + }; + + $context = new MakeFilterContext( + new \Yiisoft\Validator\Result(), + $urlParameterProvider + ); + + $renderer = new DataColumnRenderer( + $this->filterFactoryContainer, + new Validator() + ); + + $result = $renderer->makeFilter($column, $context); + $this->assertNotNull($result); + } + + public function testMakeFilterWithValidation(): void + { + $column = new DataColumn( + 'age', + filterValidation: [new Number()] + ); + + $urlParameterProvider = new class implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + public function get(string $name, int $type): ?string + { + return match ($name) { + 'name' => 'John', + 'age' => 'not-a-number', + 'status' => '', + default => null, + }; + } + }; + + $context = new MakeFilterContext( + new \Yiisoft\Validator\Result(), + $urlParameterProvider + ); + + $renderer = new DataColumnRenderer( + $this->filterFactoryContainer, + new Validator() + ); + + $result = $renderer->makeFilter($column, $context); + $this->assertNull($result); + $this->assertNotEmpty($context->validationResult->getErrors()); + } + + public function testMakeFilterWithEmptyValue(): void + { + $column = new DataColumn( + 'status', + filterEmpty: true + ); + + $urlParameterProvider = new class implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + public function get(string $name, int $type): ?string + { + return match ($name) { + 'name' => 'John', + 'age' => 'not-a-number', + 'status' => '', + default => null, + }; + } + }; + + $context = new MakeFilterContext( + new \Yiisoft\Validator\Result(), + $urlParameterProvider + ); + + $renderer = new DataColumnRenderer( + $this->filterFactoryContainer, + new Validator() + ); + + $result = $renderer->makeFilter($column, $context); + $this->assertNull($result); + } } diff --git a/tests/UrlParametersFactoryTest.php b/tests/UrlParametersFactoryTest.php index 63166e1ff..90022f22e 100644 --- a/tests/UrlParametersFactoryTest.php +++ b/tests/UrlParametersFactoryTest.php @@ -16,31 +16,6 @@ */ final class UrlParametersFactoryTest extends TestCase { - public function testCreateWithNullValues(): void - { - $config = new UrlConfig( - pageParameterType: UrlParameterType::QUERY, - previousPageParameterType: UrlParameterType::QUERY, - pageSizeParameterType: UrlParameterType::QUERY, - sortParameterType: UrlParameterType::QUERY - ); - - [$arguments, $queryParameters] = UrlParametersFactory::create( - null, - null, - null, - $config - ); - - $this->assertSame([], $arguments); - $this->assertSame([ - 'page' => null, - 'prev-page' => null, - 'pagesize' => null, - 'sort' => null, - ], $queryParameters); - } - public function testCreateWithNextPageTokenInQueryParameter(): void { $config = new UrlConfig( @@ -293,25 +268,60 @@ public function testCreateWithExistingArgumentsAndQueryParameters(): void ], $queryParameters); } - public function testCreateWithInstanceMethod(): void + public function testCreateWithMixedParameterTypesAndValues(): void { $config = new UrlConfig( - pageParameterType: UrlParameterType::QUERY, + pageParameterType: UrlParameterType::PATH, previousPageParameterType: UrlParameterType::QUERY, + pageSizeParameterType: UrlParameterType::PATH, + sortParameterType: UrlParameterType::QUERY, + arguments: ['id' => 123], + queryParameters: ['filter' => 'active'] + ); + + [$arguments, $queryParameters] = UrlParametersFactory::create( + PageToken::next('token123'), + 20, + 'name,-date', + $config + ); + + $this->assertSame([ + 'id' => 123, + 'page' => 'token123', + 'pagesize' => 20, + ], $arguments); + $this->assertSame([ + 'filter' => 'active', + 'prev-page' => null, + 'sort' => 'name,-date', + ], $queryParameters); + } + + public function testCreateWithNullPageToken(): void + { + $config = new UrlConfig( + pageParameterType: UrlParameterType::PATH, + previousPageParameterType: UrlParameterType::PATH, pageSizeParameterType: UrlParameterType::QUERY, sortParameterType: UrlParameterType::QUERY ); - $result = UrlParametersFactory::create(null, null, null, $config); - - [$arguments, $queryParameters] = $result; + [$arguments, $queryParameters] = UrlParametersFactory::create( + null, + 20, + 'name,-date', + $config + ); - $this->assertSame([], $arguments); $this->assertSame([ 'page' => null, 'prev-page' => null, - 'pagesize' => null, - 'sort' => null, + ], $arguments); + $this->assertSame([ + 'pagesize' => 20, + 'sort' => 'name,-date', ], $queryParameters); } } + From c99b92819ea9b2f6f8b3d8255e82c68a3850431d Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Thu, 6 Mar 2025 00:09:57 +0000 Subject: [PATCH 02/10] Apply fixes from StyleCI --- src/UrlParametersFactory.php | 2 +- tests/Column/Base/GlobalContextTest.php | 2 +- tests/Column/DataColumnRendererTest.php | 8 ++++---- tests/UrlParametersFactoryTest.php | 1 - 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/UrlParametersFactory.php b/src/UrlParametersFactory.php index d100a327c..d7dcfec5c 100644 --- a/src/UrlParametersFactory.php +++ b/src/UrlParametersFactory.php @@ -33,7 +33,7 @@ final class UrlParametersFactory * - Query parameters as key-value pairs */ /** - * @return array{0: array, 1: array} + * @return array{0: array, 1: array} */ public static function create( ?PageToken $pageToken, diff --git a/tests/Column/Base/GlobalContextTest.php b/tests/Column/Base/GlobalContextTest.php index bbdf46b80..73dc983a2 100644 --- a/tests/Column/Base/GlobalContextTest.php +++ b/tests/Column/Base/GlobalContextTest.php @@ -58,7 +58,7 @@ public function testTranslateWithString(): void public function testTranslateWithStringable(): void { - $stringable = new class implements Stringable { + $stringable = new class () implements Stringable { public function __toString(): string { return 'test.stringable'; diff --git a/tests/Column/DataColumnRendererTest.php b/tests/Column/DataColumnRendererTest.php index 7a93d8a82..9a59995d5 100644 --- a/tests/Column/DataColumnRendererTest.php +++ b/tests/Column/DataColumnRendererTest.php @@ -236,7 +236,7 @@ public function testRenderFilterWithDropdown(): void ); $cell = new Cell(); - $urlParameterProvider = new class implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + $urlParameterProvider = new class () implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { public function get(string $name, int $type): ?string { return 'active'; @@ -271,7 +271,7 @@ public function testMakeFilterWithCustomFactory(): void filterFactory: \Yiisoft\Yii\DataView\Filter\Factory\LikeFilterFactory::class ); - $urlParameterProvider = new class implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + $urlParameterProvider = new class () implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { public function get(string $name, int $type): ?string { return match ($name) { @@ -304,7 +304,7 @@ public function testMakeFilterWithValidation(): void filterValidation: [new Number()] ); - $urlParameterProvider = new class implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + $urlParameterProvider = new class () implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { public function get(string $name, int $type): ?string { return match ($name) { @@ -338,7 +338,7 @@ public function testMakeFilterWithEmptyValue(): void filterEmpty: true ); - $urlParameterProvider = new class implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + $urlParameterProvider = new class () implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { public function get(string $name, int $type): ?string { return match ($name) { diff --git a/tests/UrlParametersFactoryTest.php b/tests/UrlParametersFactoryTest.php index 90022f22e..2d06b47ec 100644 --- a/tests/UrlParametersFactoryTest.php +++ b/tests/UrlParametersFactoryTest.php @@ -324,4 +324,3 @@ public function testCreateWithNullPageToken(): void ], $queryParameters); } } - From a57bed6e54b0b019af30c33b09fc99a50a24b99a Mon Sep 17 00:00:00 2001 From: samdark <47294+samdark@users.noreply.github.com> Date: Thu, 6 Mar 2025 00:10:52 +0000 Subject: [PATCH 03/10] Apply Rector changes (CI) --- tests/Column/Base/RendererContainerTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Column/Base/RendererContainerTest.php b/tests/Column/Base/RendererContainerTest.php index cecb00059..e0b2d31d2 100644 --- a/tests/Column/Base/RendererContainerTest.php +++ b/tests/Column/Base/RendererContainerTest.php @@ -77,8 +77,8 @@ public function testAddConfigsMergesExistingConfig(): void final class TestRenderer implements ColumnRendererInterface { public function __construct( - private string $value = 'default', - private string $option = 'default', + private readonly string $value = 'default', + private readonly string $option = 'default', ) { } From 5cb328b10ab591552aedf4bf17718e31f17614d2 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Thu, 6 Mar 2025 03:11:35 +0300 Subject: [PATCH 04/10] Remove unnecessary change --- src/UrlParametersFactory.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/UrlParametersFactory.php b/src/UrlParametersFactory.php index d7dcfec5c..063f5ab73 100644 --- a/src/UrlParametersFactory.php +++ b/src/UrlParametersFactory.php @@ -32,9 +32,6 @@ final class UrlParametersFactory * - Path arguments as key-value pairs * - Query parameters as key-value pairs */ - /** - * @return array{0: array, 1: array} - */ public static function create( ?PageToken $pageToken, int|string|null $pageSize, From 948a90c54a05ee73de82bf5ee8627b0d87e7b871 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Thu, 6 Mar 2025 08:59:54 +0300 Subject: [PATCH 05/10] Fix --- tests/Column/Base/GlobalContextTest.php | 36 ++-- tests/Column/CheckboxColumnRendererTest.php | 172 ++++++++++---------- 2 files changed, 103 insertions(+), 105 deletions(-) diff --git a/tests/Column/Base/GlobalContextTest.php b/tests/Column/Base/GlobalContextTest.php index 73dc983a2..76ead0050 100644 --- a/tests/Column/Base/GlobalContextTest.php +++ b/tests/Column/Base/GlobalContextTest.php @@ -6,19 +6,27 @@ use PHPUnit\Framework\TestCase; use Stringable; -use Yiisoft\Data\Reader\ReadableDataInterface; +use Yiisoft\Data\Reader\Iterable\IterableDataReader; use Yiisoft\Translator\TranslatorInterface; use Yiisoft\Yii\DataView\Column\Base\GlobalContext; +use Yiisoft\Yii\DataView\Tests\Support\Mock; +use Yiisoft\Yii\DataView\Tests\Support\TestTrait; /** * @covers \Yiisoft\Yii\DataView\Column\Base\GlobalContext */ final class GlobalContextTest extends TestCase { + use TestTrait; + + private array $data = [ + ['id' => 1, 'name' => 'John'], + ['id' => 2, 'name' => 'Mary'], + ]; public function testConstructor(): void { - $dataReader = $this->createMock(ReadableDataInterface::class); - $translator = $this->createMock(TranslatorInterface::class); + $dataReader = new IterableDataReader($this->data); + $translator = Mock::translator('en'); $pathArguments = ['id' => 123]; $queryParameters = ['sort' => 'name']; $translationCategory = 'app'; @@ -38,22 +46,17 @@ public function testConstructor(): void public function testTranslateWithString(): void { - $translator = $this->createMock(TranslatorInterface::class); - $translator - ->expects($this->once()) - ->method('translate') - ->with('test.message', [], 'app') - ->willReturn('Test Message'); + $translator = Mock::translator('en'); $context = new GlobalContext( - $this->createMock(ReadableDataInterface::class), + new IterableDataReader($this->data), [], [], $translator, 'app' ); - $this->assertSame('Test Message', $context->translate('test.message')); + $this->assertSame('test.message', $context->translate('test.message')); } public function testTranslateWithStringable(): void @@ -65,21 +68,16 @@ public function __toString(): string } }; - $translator = $this->createMock(TranslatorInterface::class); - $translator - ->expects($this->once()) - ->method('translate') - ->with('test.stringable', [], 'app') - ->willReturn('Test Stringable'); + $translator = Mock::translator('en'); $context = new GlobalContext( - $this->createMock(ReadableDataInterface::class), + new IterableDataReader($this->data), [], [], $translator, 'app' ); - $this->assertSame('Test Stringable', $context->translate($stringable)); + $this->assertSame('test.stringable', $context->translate($stringable)); } } diff --git a/tests/Column/CheckboxColumnRendererTest.php b/tests/Column/CheckboxColumnRendererTest.php index 85ba7c6bb..2eec6e977 100644 --- a/tests/Column/CheckboxColumnRendererTest.php +++ b/tests/Column/CheckboxColumnRendererTest.php @@ -33,11 +33,11 @@ protected function setUp(): void ['id' => 2, 'name' => 'Mary'], ]); $this->globalContext = new GlobalContext( - $this->dataReader, - [], - [], - Mock::translator('en'), - 'test' + dataReader: $this->dataReader, + pathArguments: [], + queryParameters: [], + translator: Mock::translator('en'), + translationCategory: 'test' ); } @@ -53,28 +53,28 @@ public function testRenderHeaderWithoutHeaderAndSingleSelection(): void $column = new CheckboxColumn(multiple: false); $sort = Sort::any(); $context = new HeaderContext( - $sort, - $sort, - ['test' => 'test'], - 'sortable', - '', - '', - 'asc', - '', - '', - 'desc', - '', - '', - [], - 'asc-link', - 'desc-link', - null, - 10, - false, - new UrlConfig(), - null, - Mock::translator('en'), - 'test' + originalSort: $sort, + sort: $sort, + orderProperties: ['test' => 'test'], + sortableHeaderClass: 'sortable', + sortableHeaderPrepend: '', + sortableHeaderAppend: '', + sortableHeaderAscClass: 'asc', + sortableHeaderAscPrepend: '', + sortableHeaderAscAppend: '', + sortableHeaderDescClass: 'desc', + sortableHeaderDescPrepend: '', + sortableHeaderDescAppend: '', + sortableLinkAttributes: [], + sortableLinkAscClass: 'asc-link', + sortableLinkDescClass: 'desc-link', + pageToken: null, + pageSize: 10, + multiSort: false, + urlConfig: new UrlConfig(), + urlCreator: null, + translator: Mock::translator('en'), + translationCategory: 'test' ); $result = $this->renderer->renderHeader($column, $this->cell, $context); $this->assertNull($result); @@ -85,28 +85,28 @@ public function testRenderHeaderWithoutHeaderAndMultipleSelection(): void $column = new CheckboxColumn(multiple: true); $sort = Sort::any(); $context = new HeaderContext( - $sort, - $sort, - ['test' => 'test'], - 'sortable', - '', - '', - 'asc', - '', - '', - 'desc', - '', - '', - [], - 'asc-link', - 'desc-link', - null, - 10, - false, - new UrlConfig(), - null, - Mock::translator('en'), - 'test' + originalSort: $sort, + sort: $sort, + orderProperties: ['test' => 'test'], + sortableHeaderClass: 'sortable', + sortableHeaderPrepend: '', + sortableHeaderAppend: '', + sortableHeaderAscClass: 'asc', + sortableHeaderAscPrepend: '', + sortableHeaderAscAppend: '', + sortableHeaderDescClass: 'desc', + sortableHeaderDescPrepend: '', + sortableHeaderDescAppend: '', + sortableLinkAttributes: [], + sortableLinkAscClass: 'asc-link', + sortableLinkDescClass: 'desc-link', + pageToken: null, + pageSize: 10, + multiSort: false, + urlConfig: new UrlConfig(), + urlCreator: null, + translator: Mock::translator('en'), + translationCategory: 'test' ); $result = $this->renderer->renderHeader($column, $this->cell, $context); $this->assertNotNull($result); @@ -121,28 +121,28 @@ public function testRenderHeaderWithCustomHeader(): void ); $sort = Sort::any(); $context = new HeaderContext( - $sort, - $sort, - ['test' => 'test'], - 'sortable', - '', - '', - 'asc', - '', - '', - 'desc', - '', - '', - [], - 'asc-link', - 'desc-link', - null, - 10, - false, - new UrlConfig(), - null, - Mock::translator('en'), - 'test' + originalSort: $sort, + sort: $sort, + orderProperties: ['test' => 'test'], + sortableHeaderClass: 'sortable', + sortableHeaderPrepend: '', + sortableHeaderAppend: '', + sortableHeaderAscClass: 'asc', + sortableHeaderAscPrepend: '', + sortableHeaderAscAppend: '', + sortableHeaderDescClass: 'desc', + sortableHeaderDescPrepend: '', + sortableHeaderDescAppend: '', + sortableLinkAttributes: [], + sortableLinkAscClass: 'asc-link', + sortableLinkDescClass: 'desc-link', + pageToken: null, + pageSize: 10, + multiSort: false, + urlConfig: new UrlConfig(), + urlCreator: null, + translator: Mock::translator('en'), + translationCategory: 'test' ); $result = $this->renderer->renderHeader($column, $this->cell, $context); $this->assertNotNull($result); @@ -154,11 +154,11 @@ public function testRenderBodyWithDefaultNameAndValue(): void { $column = new CheckboxColumn(); $context = new DataContext( - $this->dataReader, - $column, - ['id' => 1, 'name' => 'John'], - 1, - 0 + preparedDataReader: $this->dataReader, + column: $column, + data: ['id' => 1, 'name' => 'John'], + key: 1, + index: 0 ); $result = $this->renderer->renderBody($column, $this->cell, $context); $content = (string) $result->getContent()[0]; @@ -177,11 +177,11 @@ public function testRenderBodyWithCustomNameAndValue(): void ] ); $context = new DataContext( - $this->dataReader, - $column, - ['id' => 1, 'name' => 'John'], - 1, - 0 + preparedDataReader: $this->dataReader, + column: $column, + data: ['id' => 1, 'name' => 'John'], + key: 1, + index: 0 ); $result = $this->renderer->renderBody($column, $this->cell, $context); $content = (string) $result->getContent()[0]; @@ -196,11 +196,11 @@ public function testRenderBodyWithCustomContent(): void content: static fn(Checkbox $input, DataContext $context): string => "
{$input->render()}
" ); $context = new DataContext( - $this->dataReader, - $column, - ['id' => 1, 'name' => 'John'], - 1, - 0 + preparedDataReader: $this->dataReader, + column: $column, + data: ['id' => 1, 'name' => 'John'], + key: 1, + index: 0 ); $result = $this->renderer->renderBody($column, $this->cell, $context); $content = (string) $result->getContent()[0]; From 370e6c82b2a89e9eafc4bb7e5d00c0fa4cb6d57f Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Thu, 6 Mar 2025 06:03:40 +0000 Subject: [PATCH 06/10] Apply fixes from StyleCI --- tests/Column/Base/GlobalContextTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Column/Base/GlobalContextTest.php b/tests/Column/Base/GlobalContextTest.php index 76ead0050..36a82f6af 100644 --- a/tests/Column/Base/GlobalContextTest.php +++ b/tests/Column/Base/GlobalContextTest.php @@ -7,7 +7,6 @@ use PHPUnit\Framework\TestCase; use Stringable; use Yiisoft\Data\Reader\Iterable\IterableDataReader; -use Yiisoft\Translator\TranslatorInterface; use Yiisoft\Yii\DataView\Column\Base\GlobalContext; use Yiisoft\Yii\DataView\Tests\Support\Mock; use Yiisoft\Yii\DataView\Tests\Support\TestTrait; @@ -23,6 +22,7 @@ final class GlobalContextTest extends TestCase ['id' => 1, 'name' => 'John'], ['id' => 2, 'name' => 'Mary'], ]; + public function testConstructor(): void { $dataReader = new IterableDataReader($this->data); From 4b69c63f1c4db691db2c5af2ded4c038747e30af Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Thu, 6 Mar 2025 09:06:20 +0300 Subject: [PATCH 07/10] Cleanup --- tests/Column/Base/RendererContainerTest.php | 42 +-------- tests/Column/DataColumnRendererTest.php | 94 ++++++++++----------- tests/Support/TestRenderer.php | 54 ++++++++++++ 3 files changed, 102 insertions(+), 88 deletions(-) create mode 100644 tests/Support/TestRenderer.php diff --git a/tests/Column/Base/RendererContainerTest.php b/tests/Column/Base/RendererContainerTest.php index e0b2d31d2..23d4cc337 100644 --- a/tests/Column/Base/RendererContainerTest.php +++ b/tests/Column/Base/RendererContainerTest.php @@ -13,6 +13,7 @@ use Yiisoft\Yii\DataView\Column\Base\RendererContainer; use Yiisoft\Yii\DataView\Column\ColumnInterface; use Yiisoft\Yii\DataView\Column\ColumnRendererInterface; +use Yiisoft\Yii\DataView\Tests\Support\TestRenderer; /** * @covers \Yiisoft\Yii\DataView\Column\Base\RendererContainer @@ -71,44 +72,3 @@ public function testAddConfigsMergesExistingConfig(): void } } -/** - * Test renderer implementation. - */ -final class TestRenderer implements ColumnRendererInterface -{ - public function __construct( - private readonly string $value = 'default', - private readonly string $option = 'default', - ) { - } - - public function getValue(): string - { - return $this->value; - } - - public function getOption(): string - { - return $this->option; - } - - public function renderColumn(ColumnInterface $column, Cell $cell, GlobalContext $context): Cell - { - return $cell; - } - - public function renderHeader(ColumnInterface $column, Cell $cell, HeaderContext $context): ?Cell - { - return $cell; - } - - public function renderBody(ColumnInterface $column, Cell $cell, DataContext $context): Cell - { - return $cell; - } - - public function renderFooter(ColumnInterface $column, Cell $cell, GlobalContext $context): Cell - { - return $cell; - } -} diff --git a/tests/Column/DataColumnRendererTest.php b/tests/Column/DataColumnRendererTest.php index 9a59995d5..f3a2765e8 100644 --- a/tests/Column/DataColumnRendererTest.php +++ b/tests/Column/DataColumnRendererTest.php @@ -52,11 +52,11 @@ public function testRenderColumn(): void $translator = Mock::translator('en'); $context = new GlobalContext( - $this->dataReader, - [], - [], - $translator, - 'test' + dataReader: $this->dataReader, + pathArguments: [], + queryParameters: [], + translator: $translator, + translationCategory: 'test' ); $renderer = new DataColumnRenderer( @@ -76,28 +76,28 @@ public function testRenderHeader(): void $sort = Sort::any(); $context = new HeaderContext( - $sort, - $sort, - ['test' => 'test'], - 'sortable', - '', - '', - 'asc', - '', - '', - 'desc', - '', - '', - [], - 'asc-link', - 'desc-link', - null, - 10, - false, - new UrlConfig(), - null, - $translator, - 'test' + originalSort: $sort, + sort: $sort, + orderProperties: ['test' => 'test'], + sortableHeaderClass: 'sortable', + sortableHeaderPrepend: '', + sortableHeaderAppend: '', + sortableHeaderAscClass: 'asc', + sortableHeaderAscPrepend: '', + sortableHeaderAscAppend: '', + sortableHeaderDescClass: 'desc', + sortableHeaderDescPrepend: '', + sortableHeaderDescAppend: '', + sortableLinkAttributes: [], + sortableLinkAscClass: 'asc-link', + sortableLinkDescClass: 'desc-link', + pageToken: null, + pageSize: 10, + multiSort: false, + urlConfig: new UrlConfig(), + urlCreator: null, + translator: $translator, + translationCategory: 'test' ); $renderer = new DataColumnRenderer( @@ -117,11 +117,11 @@ public function testRenderBody(): void $data = ['id' => 1, 'name' => 'John Doe', 'age' => 20]; $context = new DataContext( - $this->dataReader, - $column, - $data, - 1, - 0 + preparedDataReader: $this->dataReader, + column: $column, + data: $data, + key: 1, + index: 0 ); $renderer = new DataColumnRenderer( @@ -158,11 +158,11 @@ public function testRenderBodyWithCustomContentCallback(): void $data = ['id' => 1, 'name' => 'John Doe', 'age' => 20]; $context = new DataContext( - $this->dataReader, - $column, - $data, - 1, - 0 + preparedDataReader: $this->dataReader, + column: $column, + data: $data, + key: 1, + index: 0 ); $renderer = new DataColumnRenderer( @@ -184,11 +184,11 @@ public function testRenderBodyWithDateTime(): void $data = ['id' => 1, 'created_at' => $date]; $context = new DataContext( - $this->dataReader, - $column, - $data, - 1, - 0 + preparedDataReader: $this->dataReader, + column: $column, + data: $data, + key: 1, + index: 0 ); $renderer = new DataColumnRenderer( @@ -212,11 +212,11 @@ public function testRenderBodyWithDynamicAttributes(): void $data = ['id' => 2, 'name' => 'Mary', 'age' => 21]; $context = new DataContext( - $this->dataReader, - $column, - $data, - 1, - 0 + preparedDataReader: $this->dataReader, + column: $column, + data: $data, + key: 1, + index: 0 ); $renderer = new DataColumnRenderer( diff --git a/tests/Support/TestRenderer.php b/tests/Support/TestRenderer.php new file mode 100644 index 000000000..e0ed18d68 --- /dev/null +++ b/tests/Support/TestRenderer.php @@ -0,0 +1,54 @@ +value; + } + + public function getOption(): string + { + return $this->option; + } + + public function renderColumn(ColumnInterface $column, Cell $cell, GlobalContext $context): Cell + { + return $cell; + } + + public function renderHeader(ColumnInterface $column, Cell $cell, HeaderContext $context): ?Cell + { + return $cell; + } + + public function renderBody(ColumnInterface $column, Cell $cell, DataContext $context): Cell + { + return $cell; + } + + public function renderFooter(ColumnInterface $column, Cell $cell, GlobalContext $context): Cell + { + return $cell; + } +} From 1f89ae48fd1ecf53fa0d3a35b53fa5e736945606 Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Thu, 6 Mar 2025 06:12:24 +0000 Subject: [PATCH 08/10] Apply fixes from StyleCI --- tests/Column/Base/RendererContainerTest.php | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tests/Column/Base/RendererContainerTest.php b/tests/Column/Base/RendererContainerTest.php index 23d4cc337..7f4408ae3 100644 --- a/tests/Column/Base/RendererContainerTest.php +++ b/tests/Column/Base/RendererContainerTest.php @@ -6,13 +6,7 @@ use PHPUnit\Framework\TestCase; use Psr\Container\ContainerInterface; -use Yiisoft\Yii\DataView\Column\Base\Cell; -use Yiisoft\Yii\DataView\Column\Base\DataContext; -use Yiisoft\Yii\DataView\Column\Base\GlobalContext; -use Yiisoft\Yii\DataView\Column\Base\HeaderContext; use Yiisoft\Yii\DataView\Column\Base\RendererContainer; -use Yiisoft\Yii\DataView\Column\ColumnInterface; -use Yiisoft\Yii\DataView\Column\ColumnRendererInterface; use Yiisoft\Yii\DataView\Tests\Support\TestRenderer; /** @@ -71,4 +65,3 @@ public function testAddConfigsMergesExistingConfig(): void $this->assertSame('second', $instance->getOption()); } } - From bcca665897c4067162e30bfe0c06f36db163de9b Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Thu, 6 Mar 2025 10:11:53 +0300 Subject: [PATCH 09/10] Cleanup diff --git c/tests/Column/Base/RendererContainerTest.php i/tests/Column/Base/RendererContainerTest.php index 7f4408a..bb06371 100644 --- c/tests/Column/Base/RendererContainerTest.php +++ i/tests/Column/Base/RendererContainerTest.php @@ -6,6 +6,7 @@ namespace Yiisoft\Yii\DataView\Tests\Column\Base; use PHPUnit\Framework\TestCase; use Psr\Container\ContainerInterface; +use RuntimeException; use Yiisoft\Yii\DataView\Column\Base\RendererContainer; use Yiisoft\Yii\DataView\Tests\Support\TestRenderer; @@ -15,20 +16,19 @@ use Yiisoft\Yii\DataView\Tests\Support\TestRenderer; final class RendererContainerTest extends TestCase { private TestRenderer $renderer; - private ContainerInterface $container; private RendererContainer $rendererContainer; protected function setUp(): void { $this->renderer = new TestRenderer(); - $this->container = $this->createMock(ContainerInterface::class); - $this->container + $container = $this->createMock(ContainerInterface::class); + $container ->method('get') ->willReturnCallback(fn(string $class) => match ($class) { TestRenderer::class => $this->renderer, - default => throw new \RuntimeException("Unexpected class: $class"), + default => throw new RuntimeException("Unexpected class: $class"), }); - $this->rendererContainer = new RendererContainer($this->container); + $this->rendererContainer = new RendererContainer($container); } public function testGetCreatesNewInstance(): void @@ -50,6 +50,7 @@ final class RendererContainerTest extends TestCase TestRenderer::class => ['value' => 'custom'], ]); + /** @var TestRenderer $instance */ $instance = $container->get(TestRenderer::class); $this->assertSame('custom', $instance->getValue()); } @@ -60,8 +61,10 @@ final class RendererContainerTest extends TestCase ->addConfigs([TestRenderer::class => ['value' => 'first']]) ->addConfigs([TestRenderer::class => ['option' => 'second']]); + /** @var TestRenderer $instance */ $instance = $container->get(TestRenderer::class); $this->assertSame('first', $instance->getValue()); $this->assertSame('second', $instance->getOption()); } } + diff --git c/tests/Column/DataColumnRendererTest.php i/tests/Column/DataColumnRendererTest.php index f3a2765..45d54d9 100644 --- c/tests/Column/DataColumnRendererTest.php +++ i/tests/Column/DataColumnRendererTest.php @@ -4,12 +4,14 @@ declare(strict_types=1); namespace Yiisoft\Yii\DataView\Tests\Column; +use DateTime; use PHPUnit\Framework\TestCase; use Psr\Container\ContainerInterface; use Yiisoft\Data\Reader\Iterable\IterableDataReader; use Yiisoft\Data\Reader\Sort; use Yiisoft\Di\Container; use Yiisoft\Di\ContainerConfig; +use Yiisoft\Validator\Result; use Yiisoft\Validator\Validator; use Yiisoft\Yii\DataView\Column\Base\Cell; use Yiisoft\Yii\DataView\Column\Base\DataContext; @@ -19,10 +21,12 @@ use Yiisoft\Yii\DataView\Column\Base\FilterContext; use Yiisoft\Yii\DataView\Column\Base\MakeFilterContext; use Yiisoft\Yii\DataView\Column\DataColumn; use Yiisoft\Yii\DataView\Column\DataColumnRenderer; +use Yiisoft\Yii\DataView\Filter\Factory\LikeFilterFactory; use Yiisoft\Yii\DataView\Tests\Support\Mock; use Yiisoft\Yii\DataView\Tests\Support\TestTrait; use Yiisoft\Yii\DataView\UrlConfig; use Yiisoft\Validator\Rule\Number; +use Yiisoft\Yii\DataView\UrlParameterProviderInterface; final class DataColumnRendererTest extends TestCase { @@ -178,7 +182,7 @@ final class DataColumnRendererTest extends TestCase public function testRenderBodyWithDateTime(): void { - $date = new \DateTime('2025-03-06 02:00:22'); + $date = new DateTime('2025-03-06 02:00:22'); $column = new DataColumn('created_at', dateTimeFormat: 'Y-m-d'); $cell = new Cell(); $data = ['id' => 1, 'created_at' => $date]; @@ -236,7 +240,7 @@ final class DataColumnRendererTest extends TestCase ); $cell = new Cell(); - $urlParameterProvider = new class () implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + $urlParameterProvider = new class () implements UrlParameterProviderInterface { public function get(string $name, int $type): ?string { return 'active'; @@ -245,7 +249,7 @@ final class DataColumnRendererTest extends TestCase $context = new FilterContext( 'filter-form', - new \Yiisoft\Validator\Result(), + new Result(), 'invalid', ['class' => 'error-container'], $urlParameterProvider @@ -268,10 +272,10 @@ final class DataColumnRendererTest extends TestCase { $column = new DataColumn( 'name', - filterFactory: \Yiisoft\Yii\DataView\Filter\Factory\LikeFilterFactory::class + filterFactory: LikeFilterFactory::class ); - $urlParameterProvider = new class () implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + $urlParameterProvider = new class () implements UrlParameterProviderInterface { public function get(string $name, int $type): ?string { return match ($name) { @@ -284,7 +288,7 @@ final class DataColumnRendererTest extends TestCase }; $context = new MakeFilterContext( - new \Yiisoft\Validator\Result(), + new Result(), $urlParameterProvider ); @@ -304,7 +308,7 @@ final class DataColumnRendererTest extends TestCase filterValidation: [new Number()] ); - $urlParameterProvider = new class () implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + $urlParameterProvider = new class () implements UrlParameterProviderInterface { public function get(string $name, int $type): ?string { return match ($name) { @@ -317,7 +321,7 @@ final class DataColumnRendererTest extends TestCase }; $context = new MakeFilterContext( - new \Yiisoft\Validator\Result(), + new Result(), $urlParameterProvider ); @@ -338,7 +342,7 @@ final class DataColumnRendererTest extends TestCase filterEmpty: true ); - $urlParameterProvider = new class () implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + $urlParameterProvider = new class () implements UrlParameterProviderInterface { public function get(string $name, int $type): ?string { return match ($name) { @@ -351,7 +355,7 @@ final class DataColumnRendererTest extends TestCase }; $context = new MakeFilterContext( - new \Yiisoft\Validator\Result(), + new Result(), $urlParameterProvider ); --- tests/Column/Base/RendererContainerTest.php | 13 ++++++----- tests/Column/DataColumnRendererTest.php | 24 ++++++++++++--------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/tests/Column/Base/RendererContainerTest.php b/tests/Column/Base/RendererContainerTest.php index 7f4408ae3..bb0637129 100644 --- a/tests/Column/Base/RendererContainerTest.php +++ b/tests/Column/Base/RendererContainerTest.php @@ -6,6 +6,7 @@ use PHPUnit\Framework\TestCase; use Psr\Container\ContainerInterface; +use RuntimeException; use Yiisoft\Yii\DataView\Column\Base\RendererContainer; use Yiisoft\Yii\DataView\Tests\Support\TestRenderer; @@ -15,20 +16,19 @@ final class RendererContainerTest extends TestCase { private TestRenderer $renderer; - private ContainerInterface $container; private RendererContainer $rendererContainer; protected function setUp(): void { $this->renderer = new TestRenderer(); - $this->container = $this->createMock(ContainerInterface::class); - $this->container + $container = $this->createMock(ContainerInterface::class); + $container ->method('get') ->willReturnCallback(fn(string $class) => match ($class) { TestRenderer::class => $this->renderer, - default => throw new \RuntimeException("Unexpected class: $class"), + default => throw new RuntimeException("Unexpected class: $class"), }); - $this->rendererContainer = new RendererContainer($this->container); + $this->rendererContainer = new RendererContainer($container); } public function testGetCreatesNewInstance(): void @@ -50,6 +50,7 @@ public function testAddConfigsCreatesNewInstanceWithConfig(): void TestRenderer::class => ['value' => 'custom'], ]); + /** @var TestRenderer $instance */ $instance = $container->get(TestRenderer::class); $this->assertSame('custom', $instance->getValue()); } @@ -60,8 +61,10 @@ public function testAddConfigsMergesExistingConfig(): void ->addConfigs([TestRenderer::class => ['value' => 'first']]) ->addConfigs([TestRenderer::class => ['option' => 'second']]); + /** @var TestRenderer $instance */ $instance = $container->get(TestRenderer::class); $this->assertSame('first', $instance->getValue()); $this->assertSame('second', $instance->getOption()); } } + diff --git a/tests/Column/DataColumnRendererTest.php b/tests/Column/DataColumnRendererTest.php index f3a2765e8..45d54d9c2 100644 --- a/tests/Column/DataColumnRendererTest.php +++ b/tests/Column/DataColumnRendererTest.php @@ -4,12 +4,14 @@ namespace Yiisoft\Yii\DataView\Tests\Column; +use DateTime; use PHPUnit\Framework\TestCase; use Psr\Container\ContainerInterface; use Yiisoft\Data\Reader\Iterable\IterableDataReader; use Yiisoft\Data\Reader\Sort; use Yiisoft\Di\Container; use Yiisoft\Di\ContainerConfig; +use Yiisoft\Validator\Result; use Yiisoft\Validator\Validator; use Yiisoft\Yii\DataView\Column\Base\Cell; use Yiisoft\Yii\DataView\Column\Base\DataContext; @@ -19,10 +21,12 @@ use Yiisoft\Yii\DataView\Column\Base\MakeFilterContext; use Yiisoft\Yii\DataView\Column\DataColumn; use Yiisoft\Yii\DataView\Column\DataColumnRenderer; +use Yiisoft\Yii\DataView\Filter\Factory\LikeFilterFactory; use Yiisoft\Yii\DataView\Tests\Support\Mock; use Yiisoft\Yii\DataView\Tests\Support\TestTrait; use Yiisoft\Yii\DataView\UrlConfig; use Yiisoft\Validator\Rule\Number; +use Yiisoft\Yii\DataView\UrlParameterProviderInterface; final class DataColumnRendererTest extends TestCase { @@ -178,7 +182,7 @@ public function testRenderBodyWithCustomContentCallback(): void public function testRenderBodyWithDateTime(): void { - $date = new \DateTime('2025-03-06 02:00:22'); + $date = new DateTime('2025-03-06 02:00:22'); $column = new DataColumn('created_at', dateTimeFormat: 'Y-m-d'); $cell = new Cell(); $data = ['id' => 1, 'created_at' => $date]; @@ -236,7 +240,7 @@ public function testRenderFilterWithDropdown(): void ); $cell = new Cell(); - $urlParameterProvider = new class () implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + $urlParameterProvider = new class () implements UrlParameterProviderInterface { public function get(string $name, int $type): ?string { return 'active'; @@ -245,7 +249,7 @@ public function get(string $name, int $type): ?string $context = new FilterContext( 'filter-form', - new \Yiisoft\Validator\Result(), + new Result(), 'invalid', ['class' => 'error-container'], $urlParameterProvider @@ -268,10 +272,10 @@ public function testMakeFilterWithCustomFactory(): void { $column = new DataColumn( 'name', - filterFactory: \Yiisoft\Yii\DataView\Filter\Factory\LikeFilterFactory::class + filterFactory: LikeFilterFactory::class ); - $urlParameterProvider = new class () implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + $urlParameterProvider = new class () implements UrlParameterProviderInterface { public function get(string $name, int $type): ?string { return match ($name) { @@ -284,7 +288,7 @@ public function get(string $name, int $type): ?string }; $context = new MakeFilterContext( - new \Yiisoft\Validator\Result(), + new Result(), $urlParameterProvider ); @@ -304,7 +308,7 @@ public function testMakeFilterWithValidation(): void filterValidation: [new Number()] ); - $urlParameterProvider = new class () implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + $urlParameterProvider = new class () implements UrlParameterProviderInterface { public function get(string $name, int $type): ?string { return match ($name) { @@ -317,7 +321,7 @@ public function get(string $name, int $type): ?string }; $context = new MakeFilterContext( - new \Yiisoft\Validator\Result(), + new Result(), $urlParameterProvider ); @@ -338,7 +342,7 @@ public function testMakeFilterWithEmptyValue(): void filterEmpty: true ); - $urlParameterProvider = new class () implements \Yiisoft\Yii\DataView\UrlParameterProviderInterface { + $urlParameterProvider = new class () implements UrlParameterProviderInterface { public function get(string $name, int $type): ?string { return match ($name) { @@ -351,7 +355,7 @@ public function get(string $name, int $type): ?string }; $context = new MakeFilterContext( - new \Yiisoft\Validator\Result(), + new Result(), $urlParameterProvider ); From 04187ea4d8e80fb82c0b5b1650886555314a0ee3 Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Thu, 6 Mar 2025 07:13:24 +0000 Subject: [PATCH 10/10] Apply fixes from StyleCI --- tests/Column/Base/RendererContainerTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Column/Base/RendererContainerTest.php b/tests/Column/Base/RendererContainerTest.php index bb0637129..fa4116148 100644 --- a/tests/Column/Base/RendererContainerTest.php +++ b/tests/Column/Base/RendererContainerTest.php @@ -67,4 +67,3 @@ public function testAddConfigsMergesExistingConfig(): void $this->assertSame('second', $instance->getOption()); } } -