‪TYPO3CMS  11.5
EditDocumentControllerTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Prophecy\Argument;
21 use Prophecy\PhpUnit\ProphecyTrait;
22 use Psr\EventDispatcher\EventDispatcherInterface;
28 use TYPO3\CMS\Core\Page\PageRenderer;
29 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
30 
34 class ‪EditDocumentControllerTest extends UnitTestCase
35 {
36  use ProphecyTrait;
37 
41  protected ‪$resetSingletonInstances = true;
42 
47  {
48  $typoScript = [
49  'tx_myext.' => [
50  'controller' => 'test',
51  'action' => 'run',
52  ],
53  'magic' => 'yes',
54  ];
55  $expectedParameters = [
56  'tx_myext' => [
57  'controller' => 'test',
58  'action' => 'run',
59  ],
60  'magic' => 'yes',
61  ];
62  $result = [];
63  $uriBuilder = $this->prophesize(UriBuilder::class);
64  $iconFactory = $this->prophesize(IconFactory::class);
65  $pageRenderer = $this->prophesize(PageRenderer::class);
66  $moduleTemplate = $this->prophesize(ModuleTemplate::class);
67  $moduleTemplate->setUiBlock(Argument::any())->willReturn($moduleTemplate->reveal());
68  $moduleTemplateFactory = $this->prophesize(ModuleTemplateFactory::class);
69  $moduleTemplateFactory->create(Argument::any())->willReturn($moduleTemplate->reveal());
70 
71  $eventDispatcher = $this->prophesize(EventDispatcherInterface::class);
72  $mock = \Closure::bind(static function (‪EditDocumentController $editDocumentController) use (&$result, $typoScript) {
73  return $editDocumentController->‪parseAdditionalGetParameters($result, $typoScript);
74  }, null, EditDocumentController::class);
75  $mock(new ‪EditDocumentController(
76  $eventDispatcher->reveal(),
77  $iconFactory->reveal(),
78  $pageRenderer->reveal(),
79  $uriBuilder->reveal(),
80  $moduleTemplateFactory->reveal()
81  ));
82 
83  self::assertSame($expectedParameters, $result);
84  }
85 
90  public function ‪slugDependentFieldsAreAddedToColumnsOnly(string $result, string $selectedFields, string $tableName, array $configuration): void
91  {
92  ‪$GLOBALS['TCA'][$tableName]['columns'] = $configuration;
93 
94  $editDocumentControllerMock = $this->getAccessibleMock(EditDocumentController::class, ['dummy'], [], '', false);
95  $editDocumentControllerMock->_set('columnsOnly', $selectedFields);
96  $queryParams = [
97  'edit' => [
98  $tableName => [
99  '123,456' => 'edit',
100  ],
101  ],
102  ];
103  $editDocumentControllerMock->_call('addSlugFieldsToColumnsOnly', $queryParams);
104 
105  self::assertEquals($result, $editDocumentControllerMock->_get('columnsOnly'));
106  }
107 
109  {
110  return [
111  'fields in string' => [
112  'fo,bar,slug,title',
113  'fo,bar,slug',
114  'fake',
115  [
116  'slug' => [
117  'config' => [
118  'type' => 'slug',
119  'generatorOptions' => [
120  'fields' => ['title'],
121  ],
122  ],
123  ],
124  ],
125  ],
126  'fields in string and array' => [
127  'slug,fo,title,nav_title,title,other_field',
128  'slug,fo,title',
129  'fake',
130  [
131  'slug' => [
132  'config' => [
133  'type' => 'slug',
134  'generatorOptions' => [
135  'fields' => [['nav_title', 'title'], 'other_field'],
136  ],
137  ],
138  ],
139  ],
140  ],
141  'no slug field given' => [
142  'slug,fo',
143  'slug,fo',
144  'fake',
145  [
146  'slug' => [
147  'config' => [
148  'type' => 'input',
149  'generatorOptions' => [
150  'fields' => [['nav_title', 'title'], 'other_field'],
151  ],
152  ],
153  ],
154  ],
155  ],
156  ];
157  }
158 
159  public function ‪resolvePreviewRecordIdDataProvider(): array
160  {
161  return [
162  'default useDefaultLanguageRecord' => [
163  1,
164  [],
165  ],
166  'explicit useDefaultLanguageRecord' => [
167  1,
168  ['useDefaultLanguageRecord' => '1'],
169  ],
170  'useDefaultLanguageRecord = 0' => [
171  2,
172  ['useDefaultLanguageRecord' => '0'],
173  ],
174  ];
175  }
176 
181  public function ‪resolvePreviewRecordIdReturnsExpectedUid(int $expected, array $previewConfiguration): void
182  {
183  $recordArray = ['uid' => 2, 'l10n_parent' => 1];
184  $table = 'pages';
185  ‪$GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField'] = 'l10n_parent';
186 
187  $mock = $this->getAccessibleMock(EditDocumentController::class, ['dummy'], [], '', false);
188  $result = $mock->_call('resolvePreviewRecordId', $table, $recordArray, $previewConfiguration);
189  self::assertSame($expected, $result);
190  }
191 
193  {
194  return [
195  'default useDefaultLanguageRecord' => [
196  2,
197  [],
198  ],
199  'explicit useDefaultLanguageRecord' => [
200  2,
201  ['useDefaultLanguageRecord' => '1'],
202  ],
203  'useDefaultLanguageRecord = 0' => [
204  2,
205  ['useDefaultLanguageRecord' => '0'],
206  ],
207  ];
208  }
209 
214  public function ‪resolvePreviewRecordIdReturnsExpectedUidForNonTranslatableTable(int $expected, array $previewConfiguration): void
215  {
216  $recordArray = ['uid' => 2];
217  $table = 'dummy_table';
218 
219  $mock = $this->getAccessibleMock(EditDocumentController::class, ['dummy'], [], '', false);
220  $result = $mock->_call('resolvePreviewRecordId', $table, $recordArray, $previewConfiguration);
221  self::assertSame($expected, $result);
222  }
223 }
‪TYPO3\CMS\Backend\Tests\Unit\Controller\EditDocumentControllerTest\slugDependentFieldsAreAddedToColumnsOnly
‪slugDependentFieldsAreAddedToColumnsOnly(string $result, string $selectedFields, string $tableName, array $configuration)
Definition: EditDocumentControllerTest.php:88
‪TYPO3\CMS\Backend\Tests\Unit\Controller\EditDocumentControllerTest\resolvePreviewRecordIdReturnsExpectedUid
‪resolvePreviewRecordIdReturnsExpectedUid(int $expected, array $previewConfiguration)
Definition: EditDocumentControllerTest.php:179
‪TYPO3\CMS\Backend\Template\ModuleTemplateFactory
Definition: ModuleTemplateFactory.php:29
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:34
‪TYPO3\CMS\Backend\Tests\Unit\Controller\EditDocumentControllerTest\parseAdditionalGetParametersCreatesCorrectParameterArray
‪parseAdditionalGetParametersCreatesCorrectParameterArray()
Definition: EditDocumentControllerTest.php:44
‪TYPO3\CMS\Backend\Template\ModuleTemplate
Definition: ModuleTemplate.php:46
‪TYPO3\CMS\Backend\Controller\EditDocumentController\parseAdditionalGetParameters
‪parseAdditionalGetParameters(array &$parameters, array $typoScript)
Definition: EditDocumentController.php:958
‪TYPO3\CMS\Backend\Tests\Unit\Controller\EditDocumentControllerTest\$resetSingletonInstances
‪bool $resetSingletonInstances
Definition: EditDocumentControllerTest.php:39
‪TYPO3\CMS\Backend\Tests\Unit\Controller\EditDocumentControllerTest\resolvePreviewRecordIdForNonTranslatableTableDataProvider
‪resolvePreviewRecordIdForNonTranslatableTableDataProvider()
Definition: EditDocumentControllerTest.php:190
‪TYPO3\CMS\Backend\Controller\EditDocumentController
Definition: EditDocumentController.php:75
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:40
‪TYPO3\CMS\Backend\Tests\Unit\Controller\EditDocumentControllerTest\slugDependentFieldsAreAddedToColumnsOnlyDataProvider
‪slugDependentFieldsAreAddedToColumnsOnlyDataProvider()
Definition: EditDocumentControllerTest.php:106
‪TYPO3\CMS\Backend\Tests\Unit\Controller\EditDocumentControllerTest
Definition: EditDocumentControllerTest.php:35
‪TYPO3\CMS\Backend\Tests\Unit\Controller\EditDocumentControllerTest\resolvePreviewRecordIdReturnsExpectedUidForNonTranslatableTable
‪resolvePreviewRecordIdReturnsExpectedUidForNonTranslatableTable(int $expected, array $previewConfiguration)
Definition: EditDocumentControllerTest.php:212
‪TYPO3\CMS\Backend\Tests\Unit\Controller\EditDocumentControllerTest\resolvePreviewRecordIdDataProvider
‪resolvePreviewRecordIdDataProvider()
Definition: EditDocumentControllerTest.php:157
‪TYPO3\CMS\Backend\Tests\Unit\Controller
Definition: EditDocumentControllerTest.php:18
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25