mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-09-05 14:25:00 +00:00
infrastructure for normalizing form config [WIP]
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
<?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\Export;
|
||||
|
||||
use Chill\MainBundle\Entity\Center;
|
||||
use Chill\MainBundle\Export\AggregatorInterface;
|
||||
use Chill\MainBundle\Export\ExportConfigNormalizer;
|
||||
use Chill\MainBundle\Export\ExportInterface;
|
||||
use Chill\MainBundle\Export\ExportManager;
|
||||
use Chill\MainBundle\Export\FilterInterface;
|
||||
use Chill\MainBundle\Export\FormatterInterface;
|
||||
use Chill\MainBundle\Repository\CenterRepositoryInterface;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Prophecy\Argument;
|
||||
use Prophecy\PhpUnit\ProphecyTrait;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*
|
||||
* @coversNothing
|
||||
*/
|
||||
class ExportConfigNormalizerTest extends TestCase
|
||||
{
|
||||
use ProphecyTrait;
|
||||
|
||||
public function testNormalizeConfig(): void
|
||||
{
|
||||
$filterEnabled = $this->prophesize(FilterInterface::class);
|
||||
$filterEnabled->normalizeFormData(['test' => '0'])->shouldBeCalled()->willReturn(['test' => '0']);
|
||||
$filterEnabled->getVersion()->willReturn(1);
|
||||
$filterDisabled = $this->prophesize(FilterInterface::class);
|
||||
$filterDisabled->normalizeFormData(['default' => '0'])->shouldNotBeCalled();
|
||||
|
||||
$aggregatorEnabled = $this->prophesize(AggregatorInterface::class);
|
||||
$aggregatorEnabled->normalizeFormData(['test' => '0'])->shouldBeCalled()->willReturn(['test' => '0']);
|
||||
$aggregatorEnabled->getVersion()->willReturn(1);
|
||||
$aggregatorDisabled = $this->prophesize(AggregatorInterface::class);
|
||||
$aggregatorDisabled->normalizeFormData(['default' => '0'])->shouldNotBeCalled();
|
||||
|
||||
$export = $this->prophesize(ExportInterface::class);
|
||||
$export->normalizeFormData(['test' => '0'])->shouldBeCalled()->willReturn(['test' => '0']);
|
||||
$export->getVersion()->willReturn(1);
|
||||
|
||||
$formatter = $this->prophesize(FormatterInterface::class);
|
||||
$formatter->normalizeFormData(['test' => '0'])->shouldBeCalled()->willReturn(['test' => '0']);
|
||||
$formatter->getVersion()->willReturn(1);
|
||||
|
||||
$exportManager = $this->prophesize(ExportManager::class);
|
||||
$exportManager->getFormatter('xlsx')->shouldBeCalled()->willReturn($formatter->reveal());
|
||||
$exportManager->getFilter('filterEnabled')->willReturn($filterEnabled->reveal());
|
||||
$exportManager->getFilter('filterDisabled')->willReturn($filterDisabled->reveal());
|
||||
$exportManager->getAggregator('aggregatorEnabled')->willReturn($aggregatorEnabled->reveal());
|
||||
$exportManager->getAggregator('aggregatorDisabled')->willReturn($aggregatorDisabled->reveal());
|
||||
$exportManager->getExport('export')->willReturn($export->reveal());
|
||||
|
||||
$center = $this->prophesize(Center::class);
|
||||
$center->getId()->willReturn(10);
|
||||
|
||||
$formData = [
|
||||
'centers' => [$center->reveal()],
|
||||
'export' => ['test' => '0'],
|
||||
'filters' => [
|
||||
'filterEnabled' => ['enabled' => true, 'form' => ['test' => '0']],
|
||||
'filterDisabled' => ['enabled' => false, 'form' => ['default' => '0']],
|
||||
],
|
||||
'aggregators' => [
|
||||
'aggregatorEnabled' => ['enabled' => true, 'form' => ['test' => '0']],
|
||||
'aggregatorDisabled' => ['enabled' => false, 'form' => ['default' => '0']],
|
||||
],
|
||||
'pick_formatter' => 'xlsx',
|
||||
'formatter' => [
|
||||
'form' => ['test' => '0'],
|
||||
],
|
||||
];
|
||||
|
||||
$expected = [
|
||||
'export' => ['form' => ['test' => '0'], 'version' => 1],
|
||||
'filters' => [
|
||||
'filtersEnabled' => ['enabled' => true, 'form' => ['test' => '0'], 'version' => 1],
|
||||
'filterDisabled' => ['enabled' => false],
|
||||
],
|
||||
'aggregators' => [
|
||||
'aggregatorEnabled' => ['enabled' => true, 'form' => ['test' => '0'], 'version' => 1],
|
||||
'aggregatorDisabled' => ['enabled' => false],
|
||||
],
|
||||
'pick_formatter' => 'xlsx',
|
||||
'formatter' => [
|
||||
'form' => ['test' => '0'],
|
||||
'version' => 1,
|
||||
],
|
||||
'centers' => [10],
|
||||
];
|
||||
|
||||
$exportConfigNormalizer = new ExportConfigNormalizer($exportManager->reveal(), $this->prophesize(CenterRepositoryInterface::class)->reveal());
|
||||
|
||||
$actual = $exportConfigNormalizer->normalizeConfig('export', $formData);
|
||||
|
||||
self::assertEqualsCanonicalizing($expected, $actual);
|
||||
}
|
||||
|
||||
public function testDenormalizeConfig(): void
|
||||
{
|
||||
$filterEnabled = $this->prophesize(FilterInterface::class);
|
||||
$filterEnabled->denormalizeFormData(['test' => '0'], 1)->shouldBeCalled()->willReturn(['test' => '0']);
|
||||
$filterDisabled = $this->prophesize(FilterInterface::class);
|
||||
$filterDisabled->denormalizeFormData(Argument::any(), Argument::type('int'))->shouldNotBeCalled();
|
||||
$filterDisabled->getFormDefaultData()->willReturn(['default' => '0']);
|
||||
|
||||
$aggregatorEnabled = $this->prophesize(AggregatorInterface::class);
|
||||
$aggregatorEnabled->denormalizeFormData(['test' => '0'], 1)->shouldBeCalled()->willReturn(['test' => '0']);
|
||||
$aggregatorDisabled = $this->prophesize(AggregatorInterface::class);
|
||||
$aggregatorDisabled->denormalizeFormData(Argument::any(), Argument::type('int'))->shouldNotBeCalled();
|
||||
$aggregatorDisabled->getFormDefaultData()->willReturn(['default' => '0']);
|
||||
|
||||
$export = $this->prophesize(ExportInterface::class);
|
||||
$export->denormalizeFormData(['test' => '0'], 1)->shouldBeCalled()->willReturn(['test' => '0']);
|
||||
|
||||
$formatter = $this->prophesize(FormatterInterface::class);
|
||||
$formatter->denormalizeFormData(['test' => '0'], 1)->shouldBeCalled()->willReturn(['test' => '0']);
|
||||
|
||||
$exportManager = $this->prophesize(ExportManager::class);
|
||||
$exportManager->getFormatter('xlsx')->shouldBeCalled()->willReturn($formatter->reveal());
|
||||
$exportManager->getFilter('filterEnabled')->willReturn($filterEnabled->reveal());
|
||||
$exportManager->getFilter('filterDisabled')->willReturn($filterDisabled->reveal());
|
||||
$exportManager->getAggregator('aggregatorEnabled')->willReturn($aggregatorEnabled->reveal());
|
||||
$exportManager->getAggregator('aggregatorDisabled')->willReturn($aggregatorDisabled->reveal());
|
||||
$exportManager->getExport('export')->willReturn($export->reveal());
|
||||
|
||||
$centerRepository = $this->prophesize(CenterRepositoryInterface::class);
|
||||
$centerRepository->find(10)->willReturn($center = new Center());
|
||||
|
||||
$serialized = [
|
||||
'centers' => [10],
|
||||
'export' => ['form' => ['test' => '0'], 'version' => 1],
|
||||
'filters' => [
|
||||
'filterEnabled' => ['enabled' => true, 'form' => ['test' => '0'], 'version' => 1],
|
||||
'filterDisabled' => ['enabled' => false],
|
||||
],
|
||||
'aggregators' => [
|
||||
'aggregatorEnabled' => ['enabled' => true, 'form' => ['test' => '0'], 'version' => 1],
|
||||
'aggregatorDisabled' => ['enabled' => false],
|
||||
],
|
||||
'pick_formatter' => 'xlsx',
|
||||
'formatter' => [
|
||||
'form' => ['test' => '0'],
|
||||
'version' => 1,
|
||||
],
|
||||
];
|
||||
|
||||
$expected = [
|
||||
'export' => ['test' => '0'],
|
||||
'filters' => [
|
||||
'filterEnabled' => ['enabled' => true, 'form' => ['test' => '0']],
|
||||
'filterDisabled' => ['enabled' => false, 'form' => ['default' => '0']],
|
||||
],
|
||||
'aggregators' => [
|
||||
'aggregatorEnabled' => ['enabled' => true, 'form' => ['test' => '0']],
|
||||
'aggregatorDisabled' => ['enabled' => false, 'form' => ['default' => '0']],
|
||||
],
|
||||
'pick_formatter' => 'xlsx',
|
||||
'formatter' => [
|
||||
'form' => ['test' => '0'],
|
||||
],
|
||||
'centers' => [$center],
|
||||
];
|
||||
|
||||
$exportConfigNormalizer = new ExportConfigNormalizer($exportManager->reveal(), $centerRepository->reveal());
|
||||
$actual = $exportConfigNormalizer->denormalizeConfig('export', $serialized, true);
|
||||
|
||||
self::assertEquals($expected, $actual);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user