2 namespace TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider;
17 use Prophecy\Argument;
18 use Prophecy\Prophecy\ObjectProphecy;
21 use TYPO3\CMS\Core\Tests\UnitTestCase;
41 protected function setUp()
44 $this->backendUserProphecy = $this->prophesize(BackendUserAuthentication::class);
45 $GLOBALS[
'BE_USER'] = $this->backendUserProphecy->reveal();
46 $GLOBALS[
'BE_USER']->groupData[
'non_exclude_fields'] =
'';
51 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'formDataGroup'][
'flexFormSegment'] = [];
62 'tableName' =>
'aTable',
67 'pointerField' =>
'aFlex',
74 'ds_pointerField' =>
'pointerField',
82 'label' =>
'aFlexFieldLabel',
112 $expected[
'processedTca'][
'columns'][
'aField'][
'config'][
'ds'] = [
116 $this->assertEquals($expected, $this->subject->addData($input));
125 'tableName' =>
'aTable',
130 'pointerField' =>
'aFlex',
137 'ds_pointerField' =>
'pointerField',
145 'label' =>
'aFlexFieldLabel',
165 'sheetTitle' =>
'aTitle',
175 $expected[
'processedTca'][
'columns'][
'aField'][
'config'][
'ds'] = [
182 'label' =>
'aFlexFieldLabel',
188 'sheetTitle' =>
'aTitle',
194 $this->assertEquals($expected, $this->subject->addData($input));
203 'tableName' =>
'aTable',
208 'pointerField' =>
'aFlex',
215 'ds_pointerField' =>
'pointerField',
223 'label' =>
'aFlexFieldLabel',
243 'sheetDescription' =>
'aDescription',
253 $expected[
'processedTca'][
'columns'][
'aField'][
'config'][
'ds'] = [
260 'label' =>
'aFlexFieldLabel',
266 'sheetDescription' =>
'aDescription',
272 $this->assertEquals($expected, $this->subject->addData($input));
281 'tableName' =>
'aTable',
286 'pointerField' =>
'aFlex',
293 'ds_pointerField' =>
'pointerField',
301 'label' =>
'aFlexFieldLabel',
321 'sheetDescription' =>
'sheetShortDescr',
331 $expected[
'processedTca'][
'columns'][
'aField'][
'config'][
'ds'] = [
338 'label' =>
'aFlexFieldLabel',
344 'sheetDescription' =>
'sheetShortDescr',
350 $this->assertEquals($expected, $this->subject->addData($input));
359 'tableName' =>
'aTable',
364 'pointerField' =>
'aFlex',
371 'ds_pointerField' =>
'pointerField',
379 'label' =>
'aFlexFieldLabel',
399 'sheetDescription' =>
'sheetShortDescr',
409 $expected[
'processedTca'][
'columns'][
'aField'][
'config'][
'ds'] = [
416 'label' =>
'aFlexFieldLabel',
422 'sheetDescription' =>
'sheetShortDescr',
428 $this->assertEquals($expected, $this->subject->addData($input));
437 'tableName' =>
'aTable',
442 'pointerField' =>
'aFlex',
449 'ds_pointerField' =>
'pointerField',
457 'label' =>
'aFlexFieldLabel',
472 'pageTsConfig' => [],
475 $this->backendUserProphecy->isAdmin()->shouldBeCalled()->willReturn(
false);
476 $GLOBALS[
'BE_USER']->groupData[
'non_exclude_fields'] =
'';
479 $expected[
'processedTca'][
'columns'][
'aField'][
'config'][
'ds'] = [
490 $this->assertEquals($expected, $this->subject->addData($input));
499 'tableName' =>
'aTable',
504 'pointerField' =>
'aFlex',
511 'ds_pointerField' =>
'pointerField',
519 'label' =>
'aFlexFieldLabel',
534 'pageTsConfig' => [],
537 $this->backendUserProphecy->isAdmin()->shouldBeCalled()->willReturn(
false);
538 $GLOBALS[
'BE_USER']->groupData[
'non_exclude_fields'] =
'aTable:aField;aFlex;sDEF;aFlexField';
541 $expected[
'processedTca'][
'columns'][
'aField'][
'config'][
'ds'] = [
548 'label' =>
'aFlexFieldLabel',
560 $this->assertEquals($expected, $this->subject->addData($input));
569 'tableName' =>
'aTable',
574 'pointerField' =>
'aFlex',
581 'ds_pointerField' =>
'pointerField',
589 'label' =>
'aFlexFieldLabel',
604 'pageTsConfig' => [],
607 $this->backendUserProphecy->isAdmin()->shouldBeCalled()->willReturn(
true);
608 $GLOBALS[
'BE_USER']->groupData[
'non_exclude_fields'] =
'';
611 $expected[
'processedTca'][
'columns'][
'aField'][
'config'][
'ds'] = [
618 'label' =>
'aFlexFieldLabel',
630 $this->assertEquals($expected, $this->subject->addData($input));
639 'tableName' =>
'aTable',
644 'pointerField' =>
'aFlex',
651 'ds_pointerField' =>
'pointerField',
659 'label' =>
'aFlexFieldLabel',
691 $expected[
'processedTca'][
'columns'][
'aField'][
'config'][
'ds'] = [
702 $this->assertEquals($expected, $this->subject->addData($input));
708 public function addDataHandlesPageTsConfigSettingsOfSingleFlexField()
711 'tableName' =>
'aTable',
716 'pointerField' =>
'aFlex',
723 'ds_pointerField' =>
'pointerField',
731 'label' =>
'aFlexFieldLabel',
759 '0' =>
'labelOverride',
770 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'formDataGroup'][
'flexFormSegment'] = [
771 \TYPO3\CMS\Backend\Form\FormDataProvider\TcaRadioItems::class => [],
775 $languageService = $this->prophesize(LanguageService::class);
776 $GLOBALS[
'LANG'] = $languageService->reveal();
777 $languageService->sL(Argument::cetera())->willReturnArgument(0);
779 $this->backendUserProphecy->isAdmin()->willReturn(
true);
780 $this->backendUserProphecy->checkLanguageAccess(Argument::cetera())->willReturn(
true);
783 $expected[
'processedTca'][
'columns'][
'aField'][
'config'][
'ds'] = [
790 'label' =>
'aFlexFieldLabel',
795 0 =>
'labelOverride',
807 $this->assertEquals($expected, $this->subject->addData($input));
813 public function addDataSetsDefaultValueFromFlexTcaForField()
816 'tableName' =>
'aTable',
821 'pointerField' =>
'aFlex',
828 'ds_pointerField' =>
'pointerField',
836 'label' =>
'aFlexFieldLabel',
839 'default' =>
'defaultValue',
851 'pageTsConfig' => [],
854 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'formDataGroup'][
'flexFormSegment'] = [
855 \TYPO3\CMS\Backend\Form\FormDataProvider\DatabaseRowDefaultValues::class => [],
859 $languageService = $this->prophesize(LanguageService::class);
860 $GLOBALS[
'LANG'] = $languageService->reveal();
861 $languageService->sL(Argument::cetera())->willReturnArgument(0);
863 $this->backendUserProphecy->isAdmin()->willReturn(
true);
864 $this->backendUserProphecy->checkLanguageAccess(Argument::cetera())->willReturn(
true);
867 $expected[
'databaseRow'][
'aField'][
'data'][
'sDEF'][
'lDEF'][
'aFlexField'][
'vDEF'] =
'defaultValue';
869 $this->assertEquals($expected, $this->subject->addData($input));
878 'tableName' =>
'aTable',
908 'pageTsConfig' => [],
911 $this->backendUserProphecy->isAdmin()->willReturn(
true);
912 $this->backendUserProphecy->checkLanguageAccess(Argument::cetera())->willReturn(
true);
914 $this->setExpectedException(\UnexpectedValueException::class, $this->anything(), 1440685208);
916 $this->subject->addData($input);
925 'tableName' =>
'aTable',
955 'pageTsConfig' => [],
958 $this->backendUserProphecy->isAdmin()->willReturn(
true);
959 $this->backendUserProphecy->checkLanguageAccess(Argument::cetera())->willReturn(
true);
961 $this->setExpectedException(\UnexpectedValueException::class, $this->anything(), 1440685208);
963 $this->subject->addData($input);
969 public function addDataSetsValuesAndStructureForSectionContainerElements()
972 'tableName' =>
'aTable',
1035 'label' =>
'aFlexFieldLabel',
1038 'default' =>
'defaultValue',
1054 'pageTsConfig' => [],
1057 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'formDataGroup'][
'flexFormSegment'] = [
1058 \TYPO3\CMS\Backend\Form\FormDataProvider\DatabaseRowDefaultValues::class => [],
1062 $languageService = $this->prophesize(LanguageService::class);
1063 $GLOBALS[
'LANG'] = $languageService->reveal();
1064 $languageService->sL(Argument::cetera())->willReturnArgument(0);
1066 $this->backendUserProphecy->isAdmin()->willReturn(
true);
1067 $this->backendUserProphecy->checkLanguageAccess(Argument::cetera())->willReturn(
true);
1072 $expected[
'databaseRow'][
'aField'][
'data'][
'sDEF'][
'lDEF'][
'section_1'][
'el'][
'1'][
'container_1'][
'el'][
'aFlexField'][
'vDEF'] =
'defaultValue';
1075 $expected[
'databaseRow'][
'aField'][
'data'][
'sDEF'][
'lDEF'][
'section_1'][
'templateRows'][
'container_1'][
'el'][
'aFlexField'][
'vDEF'] =
'defaultValue';
1077 $this->assertEquals($expected, $this->subject->addData($input));
1083 public function addDataCallsFlexFormSegmentGroupForFieldAndAddsFlexParentDatabaseRow()
1086 'tableName' =>
'aTable',
1091 'pointerField' =>
'aFlex',
1098 'ds_pointerField' =>
'pointerField',
1106 'label' =>
'aFlexFieldLabel',
1120 'pageTsConfig' => [],
1124 $dummyGroup = $this->prophesize(FlexFormSegment::class);
1128 $dummyGroup->compile(Argument::that(
function ($result) use ($input) {
1129 if ($result[
'flexParentDatabaseRow'] === $input[
'databaseRow']) {
1133 }))->shouldBeCalled()->willReturnArgument(0);
1135 $this->subject->addData($input);
1141 public function addDataCallsFlexFormSegmentGroupForDummyContainerAndAddsFlexParentDatabaseRow()
1144 'tableName' =>
'aTable',
1149 'pointerField' =>
'aFlex',
1156 'ds_pointerField' =>
'pointerField',
1164 'label' =>
'aFlexFieldLabel',
1178 'pageTsConfig' => [],
1182 $dummyGroupExisting = $this->prophesize(FlexFormSegment::class);
1185 $dummyGroupExisting->compile(Argument::that(
function ($result) use ($input) {
1186 if ($result[
'flexParentDatabaseRow'] === $input[
'databaseRow']) {
1190 }))->shouldBeCalled()->willReturnArgument(0);
1192 $this->subject->addData($input);