Skip to content

Commit 07df9e1

Browse files
test(grid-assistant): cover grid opt-in and filter/field opt-out
1 parent 57701ac commit 07df9e1

2 files changed

Lines changed: 134 additions & 0 deletions

File tree

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Guiziweb\SyliusGridAssistantPlugin\Tests\Unit\Schema;
6+
7+
use Guiziweb\SyliusGridAssistantPlugin\Schema\Builder\FilterSchemaBuilderInterface;
8+
use Guiziweb\SyliusGridAssistantPlugin\Schema\Builder\FilterSchemaBuilderRegistry;
9+
use Guiziweb\SyliusGridAssistantPlugin\Schema\GridSchemaBuilder;
10+
use PHPUnit\Framework\TestCase;
11+
use Sylius\Component\Grid\Definition\Field;
12+
use Sylius\Component\Grid\Definition\Filter;
13+
use Sylius\Component\Grid\Definition\Grid;
14+
use Sylius\Component\Grid\Provider\GridProviderInterface;
15+
use Symfony\Contracts\Translation\TranslatorInterface;
16+
17+
final class GridSchemaBuilderTest extends TestCase
18+
{
19+
public function testFiltersWithAiSearchableFalseAreExcluded(): void
20+
{
21+
$grid = $this->makeGrid();
22+
$grid->addFilter($this->makeFilter('customer', 'string', ['ai_searchable' => true]));
23+
$grid->addFilter($this->makeFilter('internal_notes', 'string', ['ai_searchable' => false]));
24+
$grid->addFilter($this->makeFilter('date', 'date'));
25+
26+
$schema = $this->makeBuilder($grid)->buildSchema('any');
27+
28+
self::assertArrayHasKey('customer', $schema['filters']);
29+
self::assertArrayHasKey('date', $schema['filters']);
30+
self::assertArrayNotHasKey('internal_notes', $schema['filters']);
31+
}
32+
33+
public function testSortableFieldsWithAiSearchableFalseAreExcluded(): void
34+
{
35+
$grid = $this->makeGrid();
36+
$grid->addField($this->makeField('number', sortable: 'number'));
37+
$grid->addField($this->makeField('internal_id', sortable: 'internalId', options: ['ai_searchable' => false]));
38+
$grid->addField($this->makeField('total', sortable: 'total', options: ['ai_searchable' => true]));
39+
$grid->addField($this->makeField('actions', sortable: null));
40+
41+
$schema = $this->makeBuilder($grid)->buildSchema('any');
42+
43+
self::assertArrayHasKey('number', $schema['sortable_fields']);
44+
self::assertArrayHasKey('total', $schema['sortable_fields']);
45+
self::assertArrayNotHasKey('internal_id', $schema['sortable_fields']);
46+
self::assertArrayNotHasKey('actions', $schema['sortable_fields']);
47+
}
48+
49+
private function makeGrid(): Grid
50+
{
51+
return Grid::fromCodeAndDriverConfiguration('test_grid', 'doctrine/orm', ['class' => 'Foo']);
52+
}
53+
54+
/**
55+
* @param array<string, mixed> $options
56+
*/
57+
private function makeFilter(string $name, string $type, array $options = []): Filter
58+
{
59+
$filter = Filter::fromNameAndType($name, $type);
60+
$filter->setOptions($options);
61+
62+
return $filter;
63+
}
64+
65+
/**
66+
* @param array<string, mixed> $options
67+
*/
68+
private function makeField(string $name, ?string $sortable, array $options = []): Field
69+
{
70+
$field = Field::fromNameAndType($name, 'string');
71+
$field->setSortable($sortable);
72+
$field->setLabel($name);
73+
$field->setOptions($options);
74+
75+
return $field;
76+
}
77+
78+
private function makeBuilder(Grid $grid): GridSchemaBuilder
79+
{
80+
$gridProvider = $this->createMock(GridProviderInterface::class);
81+
$gridProvider->method('get')->willReturn($grid);
82+
83+
$registry = new FilterSchemaBuilderRegistry();
84+
$registry->register(new class implements FilterSchemaBuilderInterface {
85+
public static function getType(): string|array
86+
{
87+
return ['string', 'date'];
88+
}
89+
90+
public function build(Filter $filter): array
91+
{
92+
return ['type' => 'string'];
93+
}
94+
});
95+
96+
$translator = $this->createMock(TranslatorInterface::class);
97+
$translator->method('trans')->willReturnArgument(0);
98+
99+
return new GridSchemaBuilder($gridProvider, $registry, $translator);
100+
}
101+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Guiziweb\SyliusGridAssistantPlugin\Tests\Unit\Twig\Extension;
6+
7+
use Guiziweb\SyliusGridAssistantPlugin\Twig\Extension\GridAssistantExtension;
8+
use PHPUnit\Framework\TestCase;
9+
10+
final class GridAssistantExtensionTest extends TestCase
11+
{
12+
public function testIsEnabledReturnsTrueForGridInTheEnabledList(): void
13+
{
14+
$extension = new GridAssistantExtension(['sylius_admin_order', 'sylius_admin_customer']);
15+
16+
self::assertTrue($extension->isEnabled('sylius_admin_order'));
17+
self::assertTrue($extension->isEnabled('sylius_admin_customer'));
18+
}
19+
20+
public function testIsEnabledReturnsFalseForGridNotInTheEnabledList(): void
21+
{
22+
$extension = new GridAssistantExtension(['sylius_admin_order']);
23+
24+
self::assertFalse($extension->isEnabled('sylius_admin_product'));
25+
}
26+
27+
public function testIsEnabledReturnsFalseWhenNoGridIsEnabled(): void
28+
{
29+
$extension = new GridAssistantExtension([]);
30+
31+
self::assertFalse($extension->isEnabled('sylius_admin_order'));
32+
}
33+
}

0 commit comments

Comments
 (0)