Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<?php

/*
* This file is part of the phpstan-sylius package.
*
* (c) bitExpert AG
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);

namespace bitExpert\PHPStan\Sylius\Rule\Grid;

use bitExpert\PHPStan\Sylius\Collector\Grid\CollectFieldsForGridClass;
use bitExpert\PHPStan\Sylius\Collector\Grid\CollectRessourceClassForGridClass;
use bitExpert\PHPStan\Sylius\Collector\Grid\Field\CallableFieldNode;
use bitExpert\PHPStan\Sylius\Collector\Grid\Field\DateTimeFieldNode;
use bitExpert\PHPStan\Sylius\Collector\Grid\Field\DefaultFieldRegistry;
use bitExpert\PHPStan\Sylius\Collector\Grid\Field\EnumFieldNode;
use bitExpert\PHPStan\Sylius\Collector\Grid\Field\GenericFieldNode;
use bitExpert\PHPStan\Sylius\Collector\Grid\Field\StringFieldNode;
use bitExpert\PHPStan\Sylius\Collector\Grid\Field\TwigFieldNode;
use PHPStan\Rules\Rule;
use PHPStan\Testing\RuleTestCase;
use PHPUnit\Framework\Attributes\Test;

/**
* @extends RuleTestCase<GridBuilderFieldIsPartOfResourceClass>
*/
class GridBuilderFieldIsPartOfResourceClassValidUnitTest extends RuleTestCase
{
protected function getRule(): Rule
{
return new GridBuilderFieldIsPartOfResourceClass($this->createReflectionProvider());
}

protected function getCollectors(): array
{
$fields = [];
$fields[] = new StringFieldNode();
$fields[] = new DateTimeFieldNode();
$fields[] = new TwigFieldNode();
$fields[] = new EnumFieldNode();
$fields[] = new CallableFieldNode();
$fields[] = new GenericFieldNode();

return [
new CollectRessourceClassForGridClass(),
new CollectFieldsForGridClass(new DefaultFieldRegistry($fields)),
];
}

#[Test]
public function ruleSucceedsWhenAllFieldsExist(): void
{
$this->analyse(
[__DIR__ . '/data/grid_valid.php'],
[],
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<?php

/*
* This file is part of the phpstan-sylius package.
*
* (c) bitExpert AG
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);

namespace bitExpert\PHPStan\Sylius\Rule\Grid;

use bitExpert\PHPStan\Sylius\Collector\Grid\CollectFilterForGridClass;
use bitExpert\PHPStan\Sylius\Collector\Grid\CollectRessourceClassForGridClass;
use bitExpert\PHPStan\Sylius\Collector\Grid\Filter\DefaultFilterRegistry;
use bitExpert\PHPStan\Sylius\Collector\Grid\Filter\EntityFilter;
use bitExpert\PHPStan\Sylius\Collector\Grid\Filter\EnumFilter;
use bitExpert\PHPStan\Sylius\Collector\Grid\Filter\ExistsFilter;
use bitExpert\PHPStan\Sylius\Collector\Grid\Filter\Filter;
use bitExpert\PHPStan\Sylius\Collector\Grid\Filter\SelectFilter;
use bitExpert\PHPStan\Sylius\Collector\Grid\Filter\StringFilter;
use PHPStan\Rules\Rule;
use PHPStan\Testing\RuleTestCase;
use PHPUnit\Framework\Attributes\Test;

/**
* @extends RuleTestCase<GridBuilderFilterIsPartOfResourceClass>
*/
class GridBuilderFilterIsPartOfResourceClassValidUnitTest extends RuleTestCase
{
protected function getRule(): Rule
{
return new GridBuilderFilterIsPartOfResourceClass($this->createReflectionProvider());
}

protected function getCollectors(): array
{
$filters = [];
$filters[] = new EntityFilter();
$filters[] = new EnumFilter();
$filters[] = new ExistsFilter();
$filters[] = new Filter();
$filters[] = new SelectFilter();
$filters[] = new StringFilter();

return [
new CollectRessourceClassForGridClass(),
new CollectFilterForGridClass(new DefaultFilterRegistry($filters)),
];
}

#[Test]
public function ruleSucceedsWhenAllFilterFieldsExist(): void
{
$this->analyse(
[__DIR__ . '/data/grid_valid.php'],
[],
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

/*
* This file is part of the phpstan-sylius package.
*
* (c) bitExpert AG
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);

namespace bitExpert\PHPStan\Sylius\Rule\Grid;

use PHPStan\Rules\Rule;
use PHPStan\Testing\RuleTestCase;
use PHPUnit\Framework\Attributes\Test;

/**
* @extends RuleTestCase<ResourceAwareGridNeedsResourceClass>
*/
class ResourceAwareGridNeedsResourceClassValidUnitTest extends RuleTestCase
{
protected function getRule(): Rule
{
return new ResourceAwareGridNeedsResourceClass($this->createReflectionProvider());
}

#[Test]
public function ruleSucceedsWhenResourceClassExistsViaMethod(): void
{
$this->analyse(
[__DIR__ . '/data/grid_valid.php'],
[],
);
}

#[Test]
public function ruleSucceedsWhenResourceClassExistsViaAttribute(): void
{
$this->analyse(
[__DIR__ . '/data/grid_valid_attr.php'],
[],
);
}
}
52 changes: 52 additions & 0 deletions tests/bitExpert/PHPStan/Sylius/Rule/Grid/data/grid_valid.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

declare(strict_types=1);

namespace App\Grid;

use App\Entity\Status;
use App\Entity\Supplier;
use Sylius\Bundle\GridBundle\Builder\Field\StringField;
use Sylius\Bundle\GridBundle\Builder\Filter\EnumFilter;
use Sylius\Bundle\GridBundle\Builder\Filter\StringFilter;
use Sylius\Bundle\GridBundle\Builder\GridBuilderInterface;
use Sylius\Bundle\GridBundle\Grid\AbstractGrid;
use Sylius\Bundle\GridBundle\Grid\ResourceAwareGridInterface;

final class grid_valid extends AbstractGrid implements ResourceAwareGridInterface
{
public static function getName(): string
{
return 'app_admin_valid_supplier';
}

public function buildGrid(GridBuilderInterface $gridBuilder): void
{
$gridBuilder->addField(
StringField::create('id')->setLabel('app.ui.id'),
);
$gridBuilder->addField(
StringField::create('name')->setLabel('app.ui.name'),
);
$gridBuilder->addField(
StringField::create('address.city')->setLabel('app.ui.address.city'),
);
$gridBuilder->addField(
StringField::create('.')->setLabel('app.ui.some_calculated_field'),
);
$gridBuilder->addFilter(
StringFilter::create('name'),
);
$gridBuilder->addFilter(
EnumFilter::create('status', Status::class, false, 'status'),
);
$gridBuilder->addFilter(
StringFilter::create('virtual-field', ['name', 'address.city']),
);
}

public function getResourceClass(): string
{
return Supplier::class;
}
}
18 changes: 18 additions & 0 deletions tests/bitExpert/PHPStan/Sylius/Rule/Grid/data/grid_valid_attr.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

declare(strict_types=1);

namespace App\Grid;

use App\Entity\Supplier;
use Sylius\Bundle\GridBundle\Builder\GridBuilderInterface;
use Sylius\Bundle\GridBundle\Grid\AbstractGrid;
use Sylius\Component\Grid\Attribute\AsGrid;

#[AsGrid(resourceClass: Supplier::class)]
final class grid_valid_attr extends AbstractGrid
{
public function buildGrid(GridBuilderInterface $gridBuilder): void
{
}
}
Loading