mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Make data providers static on AbstractExportTest.php and Write a rector rule to adapt existing
This commit is contained in:
parent
b9ae878791
commit
07f03ab715
@ -31,9 +31,9 @@ abstract class AbstractExportTest extends WebTestCase
|
||||
{
|
||||
use PrepareClientTrait;
|
||||
|
||||
public function dataProviderGetQueryKeys()
|
||||
public static function dataProviderGetQueryKeys()
|
||||
{
|
||||
foreach ($this->getFormData() as $data) {
|
||||
foreach (static::getFormData() as $data) {
|
||||
yield [$data];
|
||||
}
|
||||
}
|
||||
@ -41,12 +41,12 @@ abstract class AbstractExportTest extends WebTestCase
|
||||
/**
|
||||
* create data for `ìnitiateQuery` method.
|
||||
*/
|
||||
public function dataProviderInitiateQuery()
|
||||
public static function dataProviderInitiateQuery()
|
||||
{
|
||||
$acl = $this->getAcl();
|
||||
$acl = static::getAcl();
|
||||
|
||||
foreach ($this->getModifiersCombination() as $modifiers) {
|
||||
foreach ($this->getFormData() as $data) {
|
||||
foreach (static::getModifiersCombination() as $modifiers) {
|
||||
foreach (static::getFormData() as $data) {
|
||||
yield [$modifiers, $acl, $data];
|
||||
}
|
||||
}
|
||||
@ -67,13 +67,13 @@ abstract class AbstractExportTest extends WebTestCase
|
||||
* );
|
||||
* ```
|
||||
*/
|
||||
public function getACL()
|
||||
public static function getACL()
|
||||
{
|
||||
if (null === static::$kernel) {
|
||||
static::bootKernel();
|
||||
}
|
||||
|
||||
$em = static::$container->get(EntityManagerInterface::class);
|
||||
$em = static::getContainer()->get(EntityManagerInterface::class);
|
||||
|
||||
$centers = $em->getRepository(\Chill\MainBundle\Entity\Center::class)
|
||||
->findAll();
|
||||
@ -109,16 +109,16 @@ abstract class AbstractExportTest extends WebTestCase
|
||||
*
|
||||
* @return array an array of data. Example : `array( array(), array('fields' => array(1,2,3), ...)` where an empty array and `array(1,2,3)` are possible values
|
||||
*/
|
||||
abstract public function getFormData();
|
||||
abstract public static function getFormData(): array;
|
||||
|
||||
/**
|
||||
* get the possible modifiers which could apply in combination to this
|
||||
* export.
|
||||
* .
|
||||
*
|
||||
* @return array of string[] an array which contains an array of possible modifiers. Example : `array( array('modifier_1', 'modifier_2'), array('modifier_1'), ...)`
|
||||
* @return list<list<string>> of string[] an array which contains an array of possible modifiers. Example : `array( array('modifier_1', 'modifier_2'), array('modifier_1'), ...)`
|
||||
*/
|
||||
abstract public function getModifiersCombination();
|
||||
abstract public static function getModifiersCombination(): array;
|
||||
|
||||
protected function getParameters(bool $filterStatsByCenter): ParameterBagInterface
|
||||
{
|
||||
|
@ -0,0 +1,94 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\Utils\Rector\Rector;
|
||||
|
||||
use Chill\MainBundle\Test\Export\AbstractExportTest;
|
||||
use Chill\Utils\Rector\Tests\ChillBundleMakeDataProviderStaticForAbstractFilterTest\ChillBundleMakeDataProviderStaticForAbstractFilterTestTest;
|
||||
use PhpParser\Node;
|
||||
use Rector\Rector\AbstractRector;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
||||
/**
|
||||
* @see ChillBundleMakeDataProviderStaticForAbstractFilterTestTest
|
||||
*/
|
||||
final class ChillBundleMakeDataProviderStaticForAbstractExportTestRector extends AbstractRector
|
||||
{
|
||||
public function getRuleDefinition(): RuleDefinition
|
||||
{
|
||||
return new RuleDefinition(
|
||||
'Make static each method which provide data on AbstractExportTest',
|
||||
['']
|
||||
);
|
||||
}
|
||||
|
||||
public function getNodeTypes(): array
|
||||
{
|
||||
return [Node\Stmt\Class_::class];
|
||||
}
|
||||
|
||||
public function refactor(Node $node)
|
||||
{
|
||||
if (!$node instanceof Node\Stmt\Class_) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (null === $node->extends) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (AbstractExportTest::class !== $node->extends->toString()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$new = [];
|
||||
$matched = false;
|
||||
|
||||
foreach ($node->stmts as $k => $stmt) {
|
||||
if (!$stmt instanceof Node\Stmt\ClassMethod) {
|
||||
$new[] = $stmt;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ('getFormData' === $stmt->name->name || 'getModifiersCombination' === $stmt->name->name) {
|
||||
if ($stmt->isStatic()) {
|
||||
$new[] = $stmt;
|
||||
continue;
|
||||
}
|
||||
|
||||
$matched = true;
|
||||
$method = new Node\Stmt\ClassMethod($stmt->name->name);
|
||||
$method->flags = Node\Stmt\Class_::MODIFIER_PUBLIC | Node\Stmt\Class_::MODIFIER_STATIC;
|
||||
$method->returnType = match ($stmt->name->name) {
|
||||
'getFormData' => new Node\Identifier('array'),
|
||||
'getModifiersCombination' => new Node\Identifier('array'),
|
||||
default => throw new \UnexpectedValueException('this name is not supported: '.$stmt->name->name)
|
||||
};
|
||||
|
||||
foreach ($stmt->getStmts() as $s) {
|
||||
$method->stmts[] = $s;
|
||||
}
|
||||
|
||||
$new[] = $method;
|
||||
} else {
|
||||
$new[] = $stmt;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$matched) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$node->stmts = $new;
|
||||
|
||||
return $node;
|
||||
}
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace Chill\PersonBundle\Tests\Export\Aggregator\AccompanyingCourseAggregators;
|
||||
|
||||
use Chill\MainBundle\Test\Export\AbstractAggregatorTest;
|
||||
use Chill\PersonBundle\Entity\AccompanyingPeriod;
|
||||
use Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators\ClosingDateAggregator;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*
|
||||
* @coversNothing
|
||||
*/
|
||||
class ClosingDateAggregatorTest extends AbstractAggregatorTest
|
||||
{
|
||||
private static ClosingDateAggregator $closingDateAggregator;
|
||||
|
||||
private static EntityManagerInterface $entityManager;
|
||||
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
parent::setUpBeforeClass();
|
||||
self::bootKernel();
|
||||
|
||||
self::$closingDateAggregator = self::getContainer()->get(ClosingDateAggregator::class);
|
||||
self::$entityManager = self::getContainer()->get(EntityManagerInterface::class);
|
||||
}
|
||||
|
||||
public function getAggregator()
|
||||
{
|
||||
return self::$closingDateAggregator;
|
||||
}
|
||||
|
||||
public static function getFormData(): array
|
||||
{
|
||||
yield ['frequency' => 'YYYY'];
|
||||
yield ['frequency' => 'YYYY-MM'];
|
||||
yield ['frequency' => 'YYYY-IV'];
|
||||
}
|
||||
|
||||
public static function getQueryBuilders(): iterable
|
||||
{
|
||||
self::bootKernel();
|
||||
self::$entityManager = self::getContainer()->get(EntityManagerInterface::class);
|
||||
$data = [
|
||||
self::$entityManager->createQueryBuilder()
|
||||
->select('count(acp.id)')
|
||||
->from(AccompanyingPeriod::class, 'acp'),
|
||||
];
|
||||
self::ensureKernelShutdown();
|
||||
return $data;
|
||||
}
|
||||
}
|
@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
namespace Chill\PersonBundle\Tests\Export\Aggregator\AccompanyingCourseAggregators;
|
||||
|
||||
use Chill\MainBundle\Test\Export\AbstractAggregatorTest;
|
||||
use Chill\PersonBundle\Entity\AccompanyingPeriod;
|
||||
use Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators\ClosingDateAggregator;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*
|
||||
* @coversNothing
|
||||
*/
|
||||
class ClosingDateAggregatorTest extends AbstractAggregatorTest
|
||||
{
|
||||
private static ClosingDateAggregator $closingDateAggregator;
|
||||
|
||||
private static EntityManagerInterface $entityManager;
|
||||
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
parent::setUpBeforeClass();
|
||||
self::bootKernel();
|
||||
|
||||
self::$closingDateAggregator = self::getContainer()->get(ClosingDateAggregator::class);
|
||||
self::$entityManager = self::getContainer()->get(EntityManagerInterface::class);
|
||||
}
|
||||
|
||||
public function getAggregator()
|
||||
{
|
||||
return self::$closingDateAggregator;
|
||||
}
|
||||
|
||||
public function getFormData()
|
||||
{
|
||||
yield ['frequency' => 'YYYY'];
|
||||
yield ['frequency' => 'YYYY-MM'];
|
||||
yield ['frequency' => 'YYYY-IV'];
|
||||
}
|
||||
|
||||
public function getQueryBuilders()
|
||||
{
|
||||
self::bootKernel();
|
||||
self::$entityManager = self::getContainer()->get(EntityManagerInterface::class);
|
||||
|
||||
$data = [
|
||||
self::$entityManager->createQueryBuilder()
|
||||
->select('count(acp.id)')
|
||||
->from(AccompanyingPeriod::class, 'acp'),
|
||||
];
|
||||
|
||||
self::ensureKernelShutdown();
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
-----
|
||||
<?php
|
||||
|
||||
namespace Chill\PersonBundle\Tests\Export\Aggregator\AccompanyingCourseAggregators;
|
||||
|
||||
use Chill\MainBundle\Test\Export\AbstractAggregatorTest;
|
||||
use Chill\PersonBundle\Entity\AccompanyingPeriod;
|
||||
use Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators\ClosingDateAggregator;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*
|
||||
* @coversNothing
|
||||
*/
|
||||
class ClosingDateAggregatorTest extends AbstractAggregatorTest
|
||||
{
|
||||
private static ClosingDateAggregator $closingDateAggregator;
|
||||
|
||||
private static EntityManagerInterface $entityManager;
|
||||
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
parent::setUpBeforeClass();
|
||||
self::bootKernel();
|
||||
|
||||
self::$closingDateAggregator = self::getContainer()->get(ClosingDateAggregator::class);
|
||||
self::$entityManager = self::getContainer()->get(EntityManagerInterface::class);
|
||||
}
|
||||
|
||||
public function getAggregator()
|
||||
{
|
||||
return self::$closingDateAggregator;
|
||||
}
|
||||
|
||||
public static function getFormData(): array
|
||||
{
|
||||
yield ['frequency' => 'YYYY'];
|
||||
yield ['frequency' => 'YYYY-MM'];
|
||||
yield ['frequency' => 'YYYY-IV'];
|
||||
}
|
||||
|
||||
public static function getQueryBuilders(): iterable
|
||||
{
|
||||
self::bootKernel();
|
||||
self::$entityManager = self::getContainer()->get(EntityManagerInterface::class);
|
||||
$data = [
|
||||
self::$entityManager->createQueryBuilder()
|
||||
->select('count(acp.id)')
|
||||
->from(AccompanyingPeriod::class, 'acp'),
|
||||
];
|
||||
self::ensureKernelShutdown();
|
||||
return $data;
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\Utils\Rector\Tests\ChillBundleMakeDataProviderStaticForAbstractExportTestRectorTest;
|
||||
|
||||
use Rector\Testing\PHPUnit\AbstractRectorTestCase;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*
|
||||
* @coversNothing
|
||||
*/
|
||||
class ChillBundleMakeDataProviderStaticForAbstractExportTestRectorTest extends AbstractRectorTestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider provideData
|
||||
*/
|
||||
public function test(string $file): void
|
||||
{
|
||||
$this->doTestFile($file);
|
||||
}
|
||||
|
||||
public static function provideData(): \Iterator
|
||||
{
|
||||
return self::yieldFilesFromDirectory(__DIR__.'/Fixture');
|
||||
}
|
||||
|
||||
public function provideConfigFilePath(): string
|
||||
{
|
||||
return __DIR__.'/config/config.php';
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\PersonBundle\Tests\Export\Export;
|
||||
|
||||
use Chill\MainBundle\Test\Export\AbstractExportTest;
|
||||
use Chill\PersonBundle\Export\Export\CountPerson;
|
||||
use Chill\PersonBundle\Repository\PersonRepository;
|
||||
|
||||
/**
|
||||
* Test CountPerson export.
|
||||
*
|
||||
* @internal
|
||||
*
|
||||
* @coversNothing
|
||||
*/
|
||||
final class CountPersonTest extends AbstractExportTest
|
||||
{
|
||||
protected function setUp(): void
|
||||
{
|
||||
self::bootKernel();
|
||||
}
|
||||
|
||||
public function getExport()
|
||||
{
|
||||
$personRepository = self::getContainer()->get(PersonRepository::class);
|
||||
|
||||
yield new CountPerson($personRepository, $this->getParameters(true));
|
||||
yield new CountPerson($personRepository, $this->getParameters(false));
|
||||
}
|
||||
|
||||
public static function getFormData(): array
|
||||
{
|
||||
return [
|
||||
[],
|
||||
];
|
||||
}
|
||||
|
||||
public static function getModifiersCombination(): array
|
||||
{
|
||||
return [['person']];
|
||||
}
|
||||
}
|
@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\PersonBundle\Tests\Export\Export;
|
||||
|
||||
use Chill\MainBundle\Test\Export\AbstractExportTest;
|
||||
use Chill\PersonBundle\Export\Export\CountPerson;
|
||||
use Chill\PersonBundle\Repository\PersonRepository;
|
||||
|
||||
/**
|
||||
* Test CountPerson export.
|
||||
*
|
||||
* @internal
|
||||
*
|
||||
* @coversNothing
|
||||
*/
|
||||
final class CountPersonTest extends AbstractExportTest
|
||||
{
|
||||
protected function setUp(): void
|
||||
{
|
||||
self::bootKernel();
|
||||
}
|
||||
|
||||
public function getExport()
|
||||
{
|
||||
$personRepository = self::getContainer()->get(PersonRepository::class);
|
||||
|
||||
yield new CountPerson($personRepository, $this->getParameters(true));
|
||||
yield new CountPerson($personRepository, $this->getParameters(false));
|
||||
}
|
||||
|
||||
public function getFormData()
|
||||
{
|
||||
return [
|
||||
[],
|
||||
];
|
||||
}
|
||||
|
||||
public function getModifiersCombination()
|
||||
{
|
||||
return [['person']];
|
||||
}
|
||||
}
|
||||
-----
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\PersonBundle\Tests\Export\Export;
|
||||
|
||||
use Chill\MainBundle\Test\Export\AbstractExportTest;
|
||||
use Chill\PersonBundle\Export\Export\CountPerson;
|
||||
use Chill\PersonBundle\Repository\PersonRepository;
|
||||
|
||||
/**
|
||||
* Test CountPerson export.
|
||||
*
|
||||
* @internal
|
||||
*
|
||||
* @coversNothing
|
||||
*/
|
||||
final class CountPersonTest extends AbstractExportTest
|
||||
{
|
||||
protected function setUp(): void
|
||||
{
|
||||
self::bootKernel();
|
||||
}
|
||||
|
||||
public function getExport()
|
||||
{
|
||||
$personRepository = self::getContainer()->get(PersonRepository::class);
|
||||
|
||||
yield new CountPerson($personRepository, $this->getParameters(true));
|
||||
yield new CountPerson($personRepository, $this->getParameters(false));
|
||||
}
|
||||
|
||||
public static function getFormData(): array
|
||||
{
|
||||
return [
|
||||
[],
|
||||
];
|
||||
}
|
||||
|
||||
public static function getModifiersCombination(): array
|
||||
{
|
||||
return [['person']];
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
class MyException extends \RuntimeException
|
||||
{
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
final readonly class MyClass {
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
return static function (Rector\Config\RectorConfig $rectorConfig): void {
|
||||
$rectorConfig->rule(Chill\Utils\Rector\Rector\ChillBundleMakeDataProviderStaticForAbstractExportTestRector::class);
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user