Refactor export manager and normalize configuration handling

Simplified formatter and aggregator logic by removing redundant fields and improving method checks (e.g., `hasAggregator`, `hasFilter`). Adjusted test cases to align with the updated structure and added tests for empty data normalization and denormalization. Improved code readability and ensured better handling of edge cases in export data processing.
This commit is contained in:
2025-03-13 14:18:54 +01:00
parent db073fc920
commit 85a9c6bb67
5 changed files with 167 additions and 19 deletions

View File

@@ -77,9 +77,7 @@ class ExportConfigNormalizerTest extends TestCase
'aggregatorDisabled' => ['enabled' => false, 'form' => ['default' => '0']],
],
'pick_formatter' => 'xlsx',
'formatter' => [
'form' => ['test' => '0'],
],
'formatter' => ['test' => '0'],
];
$expected = [
@@ -167,9 +165,150 @@ class ExportConfigNormalizerTest extends TestCase
'aggregatorDisabled' => ['enabled' => false, 'form' => ['default' => '0']],
],
'pick_formatter' => 'xlsx',
'formatter' => [
'form' => ['test' => '0'],
'formatter' => ['test' => '0'],
'centers' => [$center],
];
$exportConfigNormalizer = new ExportConfigNormalizer($exportManager->reveal(), $centerRepository->reveal());
$actual = $exportConfigNormalizer->denormalizeConfig('export', $serialized, true);
self::assertEquals($expected, $actual);
}
public function testNormalizeConfigEmptyData(): void
{
$filterEnabled = $this->prophesize(FilterInterface::class);
$filterEnabled->normalizeFormData([])->shouldBeCalled()->willReturn([]);
$filterEnabled->getNormalizationVersion()->willReturn(1);
$filterDisabled = $this->prophesize(FilterInterface::class);
$filterDisabled->normalizeFormData([])->shouldNotBeCalled();
$aggregatorEnabled = $this->prophesize(AggregatorInterface::class);
$aggregatorEnabled->normalizeFormData([])->shouldBeCalled()->willReturn([]);
$aggregatorEnabled->getNormalizationVersion()->willReturn(1);
$aggregatorDisabled = $this->prophesize(AggregatorInterface::class);
$aggregatorDisabled->normalizeFormData([])->shouldNotBeCalled();
$export = $this->prophesize(ExportInterface::class);
$export->normalizeFormData([])->shouldBeCalled()->willReturn([]);
$export->getNormalizationVersion()->willReturn(1);
$formatter = $this->prophesize(FormatterInterface::class);
$formatter->normalizeFormData([])->shouldBeCalled()->willReturn([]);
$formatter->getNormalizationVersion()->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' => [],
'filters' => [
'filterEnabled' => ['enabled' => true, 'form' => []],
'filterDisabled' => ['enabled' => false, 'form' => []],
],
'aggregators' => [
'aggregatorEnabled' => ['enabled' => true, 'form' => []],
'aggregatorDisabled' => ['enabled' => false, 'form' => []],
],
'pick_formatter' => 'xlsx',
'formatter' => [],
];
$expected = [
'export' => ['form' => [], 'version' => 1],
'filters' => [
'filtersEnabled' => ['enabled' => true, 'form' => [], 'version' => 1],
'filterDisabled' => ['enabled' => false],
],
'aggregators' => [
'aggregatorEnabled' => ['enabled' => true, 'form' => [], 'version' => 1],
'aggregatorDisabled' => ['enabled' => false],
],
'pick_formatter' => 'xlsx',
'formatter' => [
'form' => [],
'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 testDenormalizeConfigWithEmptyData(): void
{
$filterEnabled = $this->prophesize(FilterInterface::class);
$filterEnabled->denormalizeFormData([], 1)->shouldBeCalled()->willReturn([]);
$filterDisabled = $this->prophesize(FilterInterface::class);
$filterDisabled->denormalizeFormData(Argument::any(), Argument::type('int'))->shouldNotBeCalled();
$filterDisabled->getFormDefaultData()->willReturn([]);
$aggregatorEnabled = $this->prophesize(AggregatorInterface::class);
$aggregatorEnabled->denormalizeFormData([], 1)->shouldBeCalled()->willReturn([]);
$aggregatorDisabled = $this->prophesize(AggregatorInterface::class);
$aggregatorDisabled->denormalizeFormData(Argument::any(), Argument::type('int'))->shouldNotBeCalled();
$aggregatorDisabled->getFormDefaultData()->willReturn([]);
$export = $this->prophesize(ExportInterface::class);
$export->denormalizeFormData([], 1)->shouldBeCalled()->willReturn([]);
$formatter = $this->prophesize(FormatterInterface::class);
$formatter->denormalizeFormData([], 1)->shouldBeCalled()->willReturn([]);
$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' => [], 'version' => 1],
'filters' => [
'filterEnabled' => ['enabled' => true, 'form' => [], 'version' => 1],
'filterDisabled' => ['enabled' => false],
],
'aggregators' => [
'aggregatorEnabled' => ['enabled' => true, 'form' => [], 'version' => 1],
'aggregatorDisabled' => ['enabled' => false],
],
'pick_formatter' => 'xlsx',
'formatter' => [
'form' => [],
'version' => 1,
],
];
$expected = [
'export' => [],
'filters' => [
'filterEnabled' => ['enabled' => true, 'form' => []],
'filterDisabled' => ['enabled' => false, 'form' => []],
],
'aggregators' => [
'aggregatorEnabled' => ['enabled' => true, 'form' => []],
'aggregatorDisabled' => ['enabled' => false, 'form' => []],
],
'pick_formatter' => 'xlsx',
'formatter' => [],
'centers' => [$center],
];

View File

@@ -53,7 +53,7 @@ class ExportGeneratorTest extends TestCase
'disabled_aggregator' => ['enabled' => false],
],
'pick_formatter' => 'xlsx',
'formatter' => ['form' => $formatterData = ['key' => 'form4']],
'formatter' => $formatterData = ['key' => 'form4'],
'centers' => [$centerA = new Center(), $centerB = new Center()],
];
$user = new User();
@@ -98,7 +98,11 @@ class ExportGeneratorTest extends TestCase
$exportManager = $this->prophesize(ExportManager::class);
$exportManager->getExport('dummy')->willReturn($export->reveal());
$exportManager->getFilter('dummy_filter')->willReturn($filter->reveal());
$exportManager->hasFilter('dummy_filter')->willReturn(true);
$exportManager->hasFilter('disabled_filter')->willReturn(true);
$exportManager->getAggregator('dummy_aggregator')->willReturn($aggregator->reveal());
$exportManager->hasAggregator('dummy_aggregator')->willReturn(true);
$exportManager->hasAggregator('disabled_aggregator')->willReturn(true);
$exportManager->getFormatter('xlsx')->willReturn($formatter->reveal());
$generator = new ExportGenerator($exportManager->reveal(), $exportConfigNormalizer->reveal(), new NullLogger());
@@ -118,7 +122,7 @@ class ExportGeneratorTest extends TestCase
'filters' => [],
'aggregators' => [],
'pick_formatter' => 'xlsx',
'formatter' => ['form' => $formatterData = ['key' => 'form4']],
'formatter' => $formatterData = ['key' => 'form4'],
'centers' => [$centerA = new Center(), $centerB = new Center()],
];
$user = new User();