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;
|
use PrepareClientTrait;
|
||||||
|
|
||||||
public function dataProviderGetQueryKeys()
|
public static function dataProviderGetQueryKeys()
|
||||||
{
|
{
|
||||||
foreach ($this->getFormData() as $data) {
|
foreach (static::getFormData() as $data) {
|
||||||
yield [$data];
|
yield [$data];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -41,12 +41,12 @@ abstract class AbstractExportTest extends WebTestCase
|
|||||||
/**
|
/**
|
||||||
* create data for `ìnitiateQuery` method.
|
* create data for `ìnitiateQuery` method.
|
||||||
*/
|
*/
|
||||||
public function dataProviderInitiateQuery()
|
public static function dataProviderInitiateQuery()
|
||||||
{
|
{
|
||||||
$acl = $this->getAcl();
|
$acl = static::getAcl();
|
||||||
|
|
||||||
foreach ($this->getModifiersCombination() as $modifiers) {
|
foreach (static::getModifiersCombination() as $modifiers) {
|
||||||
foreach ($this->getFormData() as $data) {
|
foreach (static::getFormData() as $data) {
|
||||||
yield [$modifiers, $acl, $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) {
|
if (null === static::$kernel) {
|
||||||
static::bootKernel();
|
static::bootKernel();
|
||||||
}
|
}
|
||||||
|
|
||||||
$em = static::$container->get(EntityManagerInterface::class);
|
$em = static::getContainer()->get(EntityManagerInterface::class);
|
||||||
|
|
||||||
$centers = $em->getRepository(\Chill\MainBundle\Entity\Center::class)
|
$centers = $em->getRepository(\Chill\MainBundle\Entity\Center::class)
|
||||||
->findAll();
|
->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
|
* @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
|
* get the possible modifiers which could apply in combination to this
|
||||||
* export.
|
* 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
|
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