mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-09-05 14:25:00 +00:00
Compute allowed centers and regroupment at the time of generating the export
This commit is contained in:
@@ -66,7 +66,7 @@ class ExportConfigNormalizerTest extends TestCase
|
||||
$center->getId()->willReturn(10);
|
||||
|
||||
$formData = [
|
||||
'centers' => [$center->reveal()],
|
||||
'centers' => ['centers' => [$center->reveal()]],
|
||||
'export' => ['test' => '0'],
|
||||
'filters' => [
|
||||
'filterEnabled' => ['enabled' => true, 'form' => ['test' => '0']],
|
||||
@@ -82,6 +82,7 @@ class ExportConfigNormalizerTest extends TestCase
|
||||
|
||||
$expected = [
|
||||
'export' => ['form' => ['test' => '0'], 'version' => 1],
|
||||
'centers' => ['centers' => [10], 'regroupments' => []],
|
||||
'filters' => [
|
||||
'filtersEnabled' => ['enabled' => true, 'form' => ['test' => '0'], 'version' => 1],
|
||||
'filterDisabled' => ['enabled' => false],
|
||||
@@ -95,7 +96,6 @@ class ExportConfigNormalizerTest extends TestCase
|
||||
'form' => ['test' => '0'],
|
||||
'version' => 1,
|
||||
],
|
||||
'centers' => [10],
|
||||
];
|
||||
|
||||
$exportConfigNormalizer = new ExportConfigNormalizer($exportManager->reveal(), $this->prophesize(CenterRepositoryInterface::class)->reveal());
|
||||
@@ -137,7 +137,7 @@ class ExportConfigNormalizerTest extends TestCase
|
||||
$centerRepository->find(10)->willReturn($center = new Center());
|
||||
|
||||
$serialized = [
|
||||
'centers' => [10],
|
||||
'centers' => ['regroupments' => [], 'centers' => [10]],
|
||||
'export' => ['form' => ['test' => '0'], 'version' => 1],
|
||||
'filters' => [
|
||||
'filterEnabled' => ['enabled' => true, 'form' => ['test' => '0'], 'version' => 1],
|
||||
@@ -166,7 +166,7 @@ class ExportConfigNormalizerTest extends TestCase
|
||||
],
|
||||
'pick_formatter' => 'xlsx',
|
||||
'formatter' => ['test' => '0'],
|
||||
'centers' => [$center],
|
||||
'centers' => ['centers' => [$center], 'regroupments' => []],
|
||||
];
|
||||
|
||||
$exportConfigNormalizer = new ExportConfigNormalizer($exportManager->reveal(), $centerRepository->reveal());
|
||||
@@ -209,7 +209,7 @@ class ExportConfigNormalizerTest extends TestCase
|
||||
$center->getId()->willReturn(10);
|
||||
|
||||
$formData = [
|
||||
'centers' => [$center->reveal()],
|
||||
'centers' => ['centers' => [$center->reveal()]],
|
||||
'export' => [],
|
||||
'filters' => [
|
||||
'filterEnabled' => ['enabled' => true, 'form' => []],
|
||||
@@ -225,6 +225,7 @@ class ExportConfigNormalizerTest extends TestCase
|
||||
|
||||
$expected = [
|
||||
'export' => ['form' => [], 'version' => 1],
|
||||
'centers' => ['centers' => [10], 'regroupments' => []],
|
||||
'filters' => [
|
||||
'filtersEnabled' => ['enabled' => true, 'form' => [], 'version' => 1],
|
||||
'filterDisabled' => ['enabled' => false],
|
||||
@@ -238,7 +239,6 @@ class ExportConfigNormalizerTest extends TestCase
|
||||
'form' => [],
|
||||
'version' => 1,
|
||||
],
|
||||
'centers' => [10],
|
||||
];
|
||||
|
||||
$exportConfigNormalizer = new ExportConfigNormalizer($exportManager->reveal(), $this->prophesize(CenterRepositoryInterface::class)->reveal());
|
||||
@@ -280,7 +280,7 @@ class ExportConfigNormalizerTest extends TestCase
|
||||
$centerRepository->find(10)->willReturn($center = new Center());
|
||||
|
||||
$serialized = [
|
||||
'centers' => [10],
|
||||
'centers' => ['centers' => [10], 'regroupments' => []],
|
||||
'export' => ['form' => [], 'version' => 1],
|
||||
'filters' => [
|
||||
'filterEnabled' => ['enabled' => true, 'form' => [], 'version' => 1],
|
||||
@@ -309,7 +309,7 @@ class ExportConfigNormalizerTest extends TestCase
|
||||
],
|
||||
'pick_formatter' => 'xlsx',
|
||||
'formatter' => [],
|
||||
'centers' => [$center],
|
||||
'centers' => ['centers' => [$center], 'regroupments' => []],
|
||||
];
|
||||
|
||||
$exportConfigNormalizer = new ExportConfigNormalizer($exportManager->reveal(), $centerRepository->reveal());
|
||||
|
@@ -12,6 +12,7 @@ declare(strict_types=1);
|
||||
namespace Chill\MainBundle\Tests\Export;
|
||||
|
||||
use Chill\MainBundle\Entity\Center;
|
||||
use Chill\MainBundle\Entity\Regroupment;
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Chill\MainBundle\Export\AggregatorInterface;
|
||||
use Chill\MainBundle\Export\DirectExportInterface;
|
||||
@@ -23,6 +24,8 @@ use Chill\MainBundle\Export\ExportManager;
|
||||
use Chill\MainBundle\Export\FilterInterface;
|
||||
use Chill\MainBundle\Export\FormattedExportGeneration;
|
||||
use Chill\MainBundle\Export\FormatterInterface;
|
||||
use Chill\MainBundle\Security\Authorization\AuthorizationHelperInterface;
|
||||
use Chill\MainBundle\Service\Regroupement\CenterRegroupementResolver;
|
||||
use Doctrine\ORM\NativeQuery;
|
||||
use Doctrine\ORM\QueryBuilder;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
@@ -54,7 +57,7 @@ class ExportGeneratorTest extends TestCase
|
||||
],
|
||||
'pick_formatter' => 'xlsx',
|
||||
'formatter' => $formatterData = ['key' => 'form4'],
|
||||
'centers' => [$centerA = new Center(), $centerB = new Center()],
|
||||
'centers' => ['centers' => [$centerA = new Center()], 'regroupments' => [(new Regroupment())->addCenter($centerB = new Center())]],
|
||||
];
|
||||
$user = new User();
|
||||
|
||||
@@ -70,11 +73,30 @@ class ExportGeneratorTest extends TestCase
|
||||
// required methods
|
||||
$export->initiateQuery(
|
||||
['tagada', 'tsointsoin'],
|
||||
[['center' => $centerA, 'circles' => []], ['center' => $centerB, 'circles' => []]],
|
||||
Argument::that(function ($arg) use ($centerB, $centerA) {
|
||||
if (!is_array($arg)) {
|
||||
return false;
|
||||
}
|
||||
if (2 !== count($arg)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ($arg as $item) {
|
||||
if ([] !== $item['circles']) {
|
||||
return false;
|
||||
}
|
||||
if (!in_array($item['center'], [$centerA, $centerB], true)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}),
|
||||
['key' => 'form1'],
|
||||
)->shouldBeCalled()->willReturn($query->reveal());
|
||||
$export->getResult($query->reveal(), $formExportData, Argument::that(static fn (ExportGenerationContext $context) => $context->byUser === $user))
|
||||
->shouldBeCalled()->willReturn([['result0' => '0']]);
|
||||
$export->requiredRole()->willReturn('dummy_role');
|
||||
|
||||
$filter->alterQuery($query->reveal(), $formFilterData, Argument::that(static fn (ExportGenerationContext $context) => $context->byUser === $user))
|
||||
->shouldBeCalled();
|
||||
@@ -105,7 +127,10 @@ class ExportGeneratorTest extends TestCase
|
||||
$exportManager->hasAggregator('disabled_aggregator')->willReturn(true);
|
||||
$exportManager->getFormatter('xlsx')->willReturn($formatter->reveal());
|
||||
|
||||
$generator = new ExportGenerator($exportManager->reveal(), $exportConfigNormalizer->reveal(), new NullLogger());
|
||||
$authorizationHelper = $this->prophesize(AuthorizationHelperInterface::class);
|
||||
$authorizationHelper->getReachableCenters($user, 'dummy_role')->willReturn([$centerA, $centerB]);
|
||||
|
||||
$generator = new ExportGenerator($exportManager->reveal(), $exportConfigNormalizer->reveal(), new NullLogger(), $authorizationHelper->reveal(), new CenterRegroupementResolver());
|
||||
|
||||
$actual = $generator->generate('dummy', $initialData, $user);
|
||||
|
||||
@@ -123,7 +148,7 @@ class ExportGeneratorTest extends TestCase
|
||||
'aggregators' => [],
|
||||
'pick_formatter' => 'xlsx',
|
||||
'formatter' => $formatterData = ['key' => 'form4'],
|
||||
'centers' => [$centerA = new Center(), $centerB = new Center()],
|
||||
'centers' => ['centers' => [$centerA = new Center(), $centerB = new Center()], 'regroupments' => []],
|
||||
];
|
||||
$user = new User();
|
||||
|
||||
@@ -141,6 +166,7 @@ class ExportGeneratorTest extends TestCase
|
||||
$export->getResult($query->reveal(), $formExportData, Argument::that(static fn (ExportGenerationContext $context) => $context->byUser === $user))
|
||||
->shouldBeCalled()->willReturn([['result0' => '0']]);
|
||||
$export->supportsModifiers()->willReturn([]);
|
||||
$export->requiredRole()->willReturn('dummy_role');
|
||||
|
||||
$formatter->generate(
|
||||
[['result0' => '0']],
|
||||
@@ -160,7 +186,10 @@ class ExportGeneratorTest extends TestCase
|
||||
$exportManager->getExport('dummy')->willReturn($export->reveal());
|
||||
$exportManager->getFormatter('xlsx')->willReturn($formatter->reveal());
|
||||
|
||||
$generator = new ExportGenerator($exportManager->reveal(), $exportConfigNormalizer->reveal(), new NullLogger());
|
||||
$authorizationHelper = $this->prophesize(AuthorizationHelperInterface::class);
|
||||
$authorizationHelper->getReachableCenters($user, 'dummy_role')->willReturn([$centerA, $centerB]);
|
||||
|
||||
$generator = new ExportGenerator($exportManager->reveal(), $exportConfigNormalizer->reveal(), new NullLogger(), $authorizationHelper->reveal(), new CenterRegroupementResolver());
|
||||
|
||||
$actual = $generator->generate('dummy', $initialData, $user);
|
||||
|
||||
|
@@ -0,0 +1,78 @@
|
||||
<?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\MainBundle\Tests\Services\Regroupement;
|
||||
|
||||
use Chill\MainBundle\Entity\Center;
|
||||
use Chill\MainBundle\Entity\Regroupment;
|
||||
use Chill\MainBundle\Service\Regroupement\CenterRegroupementResolver;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*
|
||||
* @coversNothing
|
||||
*/
|
||||
class CenterRegroupementResolverTest extends TestCase
|
||||
{
|
||||
private static CenterRegroupementResolver $resolver;
|
||||
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
self::$resolver = new CenterRegroupementResolver();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideData
|
||||
*/
|
||||
public function testResolveCenter(array $groups, array $centers, array $expected): void
|
||||
{
|
||||
$actual = self::$resolver->resolveCenters($groups, $centers);
|
||||
|
||||
self::assertEquals(count($expected), count($actual));
|
||||
|
||||
foreach ($expected as $center) {
|
||||
self::assertContains($center, $actual);
|
||||
}
|
||||
}
|
||||
|
||||
public static function provideData(): iterable
|
||||
{
|
||||
$centerA = new Center();
|
||||
$centerB = new Center();
|
||||
$centerC = new Center();
|
||||
$centerD = new Center();
|
||||
|
||||
$groupA = new Regroupment();
|
||||
$groupA->addCenter($centerA)->addCenter($centerB);
|
||||
|
||||
$groupB = new Regroupment();
|
||||
$groupB->addCenter($centerA)->addCenter($centerB)->addCenter($centerC);
|
||||
|
||||
yield [
|
||||
[$groupA],
|
||||
[],
|
||||
[$centerA, $centerB],
|
||||
];
|
||||
|
||||
yield [
|
||||
[$groupA, $groupB],
|
||||
[],
|
||||
[$centerA, $centerB, $centerC],
|
||||
];
|
||||
|
||||
yield [
|
||||
[$groupA, $groupB],
|
||||
[$centerB, $centerD],
|
||||
[$centerA, $centerB, $centerC, $centerD],
|
||||
];
|
||||
}
|
||||
}
|
@@ -0,0 +1,96 @@
|
||||
<?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\MainBundle\Tests\Services\Regroupement;
|
||||
|
||||
use Chill\MainBundle\Entity\Center;
|
||||
use Chill\MainBundle\Entity\Regroupment;
|
||||
use Chill\MainBundle\Service\Regroupement\RegroupementFiltering;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*
|
||||
* @coversNothing
|
||||
*/
|
||||
class RegroupementFilteringTest extends TestCase
|
||||
{
|
||||
private static RegroupementFiltering $regroupementFiltering;
|
||||
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
self::$regroupementFiltering = new RegroupementFiltering();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideDataForFilterContainsAtLeastOnCenter
|
||||
*/
|
||||
public function testFilterContainsAtLeastOnCenter(array $groups, array $centers, array $expected): void
|
||||
{
|
||||
$actual = self::$regroupementFiltering->filterContainsAtLeastOneCenter($groups, $centers);
|
||||
|
||||
self::assertEquals(count($expected), count($actual));
|
||||
self::assertTrue(array_is_list($actual));
|
||||
|
||||
foreach ($expected as $center) {
|
||||
self::assertContains($center, $actual);
|
||||
}
|
||||
}
|
||||
|
||||
public static function provideDataForFilterContainsAtLeastOnCenter(): iterable
|
||||
{
|
||||
|
||||
$centerA = new Center();
|
||||
$centerB = new Center();
|
||||
$centerC = new Center();
|
||||
$centerD = new Center();
|
||||
|
||||
$groupA = new Regroupment();
|
||||
$groupA->addCenter($centerA)->addCenter($centerB);
|
||||
|
||||
$groupB = new Regroupment();
|
||||
$groupB->addCenter($centerA)->addCenter($centerB)->addCenter($centerC);
|
||||
|
||||
$groupC = new Regroupment();
|
||||
$groupC->addCenter($centerA)->addCenter($centerD);
|
||||
|
||||
yield [
|
||||
[$groupA, $groupB],
|
||||
[],
|
||||
[],
|
||||
];
|
||||
|
||||
yield [
|
||||
[$groupA, $groupB],
|
||||
[$centerA, $centerB, $centerC],
|
||||
[$groupA, $groupB],
|
||||
];
|
||||
|
||||
yield [
|
||||
[$groupA, $groupC],
|
||||
[$centerD],
|
||||
[$groupC],
|
||||
];
|
||||
|
||||
yield [
|
||||
[$groupA],
|
||||
[$centerB, $centerD],
|
||||
[$groupA],
|
||||
];
|
||||
|
||||
yield [
|
||||
[$groupA],
|
||||
[new Center()],
|
||||
[],
|
||||
];
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user