‪TYPO3CMS  11.5
ActionTest.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 
21 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequest;
22 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\ResponseContent;
23 
28 {
32  public function ‪verifyCleanReferenceIndex(): void
33  {
34  // The test verifies the imported data set has a clean reference index by the check in tearDown()
35  self::assertTrue(true);
36  }
37 
42  public function ‪modifyContent(): void
43  {
44  parent::modifyContent();
45  $this->assertCSVDataSet(__DIR__ . '/DataSet/modifyContent.csv');
46 
47  $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::VALUE_PageId));
48  $responseSections = ResponseContent::fromString((string)$response->getBody())->getSections();
49  self::assertThat($responseSections, $this->‪getRequestSectionHasRecordConstraint()
50  ->setTable(self::TABLE_Content)->setField('header')->setValues('Testing #1'));
51  self::assertThat($responseSections, $this->‪getRequestSectionStructureHasRecordConstraint()
52  ->setRecordIdentifier(self::TABLE_Content . ':' . self::VALUE_ContentIdLast)->setRecordField(self::FIELD_ContentImage)
53  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('This is Kasper', 'Taken at T3BOARD'));
54  }
55 
60  public function ‪deleteContent(): void
61  {
62  parent::deleteContent();
63  $this->assertCSVDataSet(__DIR__ . '/DataSet/deleteContent.csv');
64 
65  $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::VALUE_PageId));
66  $responseSections = ResponseContent::fromString((string)$response->getBody())->getSections();
67  self::assertThat($responseSections, $this->‪getRequestSectionHasRecordConstraint()
68  ->setTable(self::TABLE_Content)->setField('header')->setValues('Regular Element #1'));
69  self::assertThat($responseSections, $this->‪getRequestSectionDoesNotHaveRecordConstraint()
70  ->setTable(self::TABLE_Content)->setField('header')->setValues('Regular Element #2'));
71  }
72 
77  public function ‪copyContent(): void
78  {
79  parent::copyContent();
80  $this->assertCSVDataSet(__DIR__ . '/DataSet/copyContent.csv');
81 
82  $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::VALUE_PageId));
83  $responseSections = ResponseContent::fromString((string)$response->getBody())->getSections();
84  self::assertThat($responseSections, $this->‪getRequestSectionHasRecordConstraint()
85  ->setTable(self::TABLE_Content)->setField('header')->setValues('Regular Element #2 (copy 1)'));
86  self::assertThat($responseSections, $this->‪getRequestSectionStructureHasRecordConstraint()
87  ->setRecordIdentifier(self::TABLE_Content . ':' . $this->recordIds['copiedContentId'])->setRecordField(self::FIELD_ContentImage)
88  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('This is Kasper', 'Taken at T3BOARD'));
89  }
90 
95  public function ‪copyContentToLanguage(): void
96  {
97  // Create translated page first
98  $this->actionService->copyRecordToLanguage(self::TABLE_Page, self::VALUE_PageId, self::VALUE_LanguageId);
99  parent::copyContentToLanguage();
100  $this->assertCSVDataSet(__DIR__ . '/DataSet/copyContentToLanguage.csv');
101 
102  $languageConfiguration = ‪$this->siteLanguageConfiguration;
103  $languageConfiguration[1]['fallbackType'] = 'free';
104  $this->‪setUpFrontendSite(1, $languageConfiguration);
105  $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::VALUE_PageId)->withLanguageId(self::VALUE_LanguageId));
106  $responseSections = ResponseContent::fromString((string)$response->getBody())->getSections();
107  self::assertThat($responseSections, $this->‪getRequestSectionHasRecordConstraint()
108  ->setTable(self::TABLE_Content)->setField('header')->setValues('[Translate to Dansk:] Regular Element #2'));
109 
110  self::assertThat($responseSections, $this->‪getRequestSectionStructureHasRecordConstraint()
111  ->setRecordIdentifier(self::TABLE_Content . ':' . $this->recordIds['localizedContentId'])->setRecordField(self::FIELD_ContentImage)
112  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('[Translate to Dansk:] This is Kasper', '[Translate to Dansk:] Taken at T3BOARD'));
113  }
114 
119  public function ‪localizeContent(): void
120  {
121  parent::localizeContent();
122  $this->assertCSVDataSet(__DIR__ . '/DataSet/localizeContent.csv');
123 
124  $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::VALUE_PageId)->withLanguageId(self::VALUE_LanguageId));
125  $responseSections = ResponseContent::fromString((string)$response->getBody())->getSections();
126  self::assertThat($responseSections, $this->‪getRequestSectionHasRecordConstraint()
127  ->setTable(self::TABLE_Content)->setField('header')->setValues('Regular Element #1', '[Translate to Dansk:] Regular Element #2'));
128 
129  self::assertThat($responseSections, $this->‪getRequestSectionStructureHasRecordConstraint()
130  ->setRecordIdentifier(self::TABLE_Content . ':' . self::VALUE_ContentIdLast)->setRecordField(self::FIELD_ContentImage)
131  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('[Translate to Dansk:] This is Kasper', '[Translate to Dansk:] Taken at T3BOARD'));
132  }
133 
138  public function ‪changeContentSorting(): void
139  {
140  parent::changeContentSorting();
141  $this->assertCSVDataSet(__DIR__ . '/DataSet/changeContentSorting.csv');
142 
143  $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::VALUE_PageId));
144  $responseSections = ResponseContent::fromString((string)$response->getBody())->getSections();
145  self::assertThat($responseSections, $this->‪getRequestSectionHasRecordConstraint()
146  ->setTable(self::TABLE_Content)->setField('header')->setValues('Regular Element #1', 'Regular Element #2'));
147  self::assertThat($responseSections, $this->‪getRequestSectionStructureHasRecordConstraint()
148  ->setRecordIdentifier(self::TABLE_Content . ':' . self::VALUE_ContentIdFirst)->setRecordField(self::FIELD_ContentImage)
149  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('Kasper', 'T3BOARD'));
150  self::assertThat($responseSections, $this->‪getRequestSectionStructureHasRecordConstraint()
151  ->setRecordIdentifier(self::TABLE_Content . ':' . self::VALUE_ContentIdLast)->setRecordField(self::FIELD_ContentImage)
152  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('This is Kasper', 'Taken at T3BOARD'));
153  }
154 
159  public function ‪moveContentToDifferentPage(): void
160  {
161  parent::moveContentToDifferentPage();
162  $this->assertCSVDataSet(__DIR__ . '/DataSet/moveContentToDifferentPage.csv');
163 
164  $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::VALUE_PageId));
165  $responseSectionsSource = ResponseContent::fromString((string)$response->getBody())->getSections();
166  self::assertThat($responseSectionsSource, $this->‪getRequestSectionHasRecordConstraint()
167  ->setTable(self::TABLE_Content)->setField('header')->setValues('Regular Element #1'));
168  self::assertThat($responseSectionsSource, $this->‪getRequestSectionStructureHasRecordConstraint()
169  ->setRecordIdentifier(self::TABLE_Content . ':' . self::VALUE_ContentIdFirst)->setRecordField(self::FIELD_ContentImage)
170  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('Kasper', 'T3BOARD'));
171  $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::VALUE_PageIdTarget));
172  $responseSectionsTarget = ResponseContent::fromString((string)$response->getBody())->getSections();
173  self::assertThat($responseSectionsTarget, $this->‪getRequestSectionHasRecordConstraint()
174  ->setTable(self::TABLE_Content)->setField('header')->setValues('Regular Element #2'));
175  self::assertThat($responseSectionsTarget, $this->‪getRequestSectionStructureHasRecordConstraint()
176  ->setRecordIdentifier(self::TABLE_Content . ':' . self::VALUE_ContentIdLast)->setRecordField(self::FIELD_ContentImage)
177  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('This is Kasper', 'Taken at T3BOARD'));
178  }
179 
185  {
186  parent::moveContentToDifferentPageAndChangeSorting();
187  $this->assertCSVDataSet(__DIR__ . '/DataSet/moveContentToDifferentPageNChangeSorting.csv');
188 
189  $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::VALUE_PageIdTarget));
190  $responseSections = ResponseContent::fromString((string)$response->getBody())->getSections();
191  self::assertThat($responseSections, $this->‪getRequestSectionHasRecordConstraint()
192  ->setTable(self::TABLE_Content)->setField('header')->setValues('Regular Element #1', 'Regular Element #2'));
193  self::assertThat($responseSections, $this->‪getRequestSectionStructureHasRecordConstraint()
194  ->setRecordIdentifier(self::TABLE_Content . ':' . self::VALUE_ContentIdFirst)->setRecordField(self::FIELD_ContentImage)
195  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('Kasper', 'T3BOARD'));
196  self::assertThat($responseSections, $this->‪getRequestSectionStructureHasRecordConstraint()
197  ->setRecordIdentifier(self::TABLE_Content . ':' . self::VALUE_ContentIdLast)->setRecordField(self::FIELD_ContentImage)
198  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('This is Kasper', 'Taken at T3BOARD'));
199  }
200 
209  public function ‪createContentWithFileReference(): void
210  {
211  parent::createContentWithFileReference();
212  $this->assertCSVDataSet(__DIR__ . '/DataSet/createContentWFileReference.csv');
213 
214  $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::VALUE_PageId));
215  $responseSections = ResponseContent::fromString((string)$response->getBody())->getSections();
216  self::assertThat($responseSections, $this->‪getRequestSectionHasRecordConstraint()
217  ->setTable(self::TABLE_Content)->setField('header')->setValues('Testing #1'));
218  self::assertThat($responseSections, $this->‪getRequestSectionStructureHasRecordConstraint()
219  ->setRecordIdentifier(self::TABLE_Content . ':' . $this->recordIds['newContentId'])->setRecordField(self::FIELD_ContentImage)
220  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('Image #1'));
221  }
222 
227  public function ‪modifyContentWithFileReference(): void
228  {
229  parent::modifyContentWithFileReference();
230  $this->assertCSVDataSet(__DIR__ . '/DataSet/modifyContentWFileReference.csv');
231 
232  $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::VALUE_PageId));
233  $responseSections = ResponseContent::fromString((string)$response->getBody())->getSections();
234  self::assertThat($responseSections, $this->‪getRequestSectionHasRecordConstraint()
235  ->setTable(self::TABLE_Content)->setField('header')->setValues('Testing #1'));
236  self::assertThat($responseSections, $this->‪getRequestSectionStructureHasRecordConstraint()
237  ->setRecordIdentifier(self::TABLE_Content . ':' . self::VALUE_ContentIdLast)->setRecordField(self::FIELD_ContentImage)
238  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('Taken at T3BOARD', 'Image #1'));
239  }
240 
245  public function ‪modifyContentAndAddFileReference(): void
246  {
247  parent::modifyContentAndAddFileReference();
248  $this->assertCSVDataSet(__DIR__ . '/DataSet/modifyContentNAddFileReference.csv');
249 
250  $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::VALUE_PageId));
251  $responseSections = ResponseContent::fromString((string)$response->getBody())->getSections();
252  self::assertThat($responseSections, $this->‪getRequestSectionStructureHasRecordConstraint()
253  ->setRecordIdentifier(self::TABLE_Content . ':' . self::VALUE_ContentIdLast)->setRecordField(self::FIELD_ContentImage)
254  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('Taken at T3BOARD', 'This is Kasper', 'Image #3'));
255  }
256 
262  {
263  parent::modifyContentAndDeleteFileReference();
264  $this->assertCSVDataSet(__DIR__ . '/DataSet/modifyContentNDeleteFileReference.csv');
265 
266  $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::VALUE_PageId));
267  $responseSections = ResponseContent::fromString((string)$response->getBody())->getSections();
268  self::assertThat($responseSections, $this->‪getRequestSectionStructureHasRecordConstraint()
269  ->setRecordIdentifier(self::TABLE_Content . ':' . self::VALUE_ContentIdLast)->setRecordField(self::FIELD_ContentImage)
270  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('This is Kasper'));
271  self::assertThat($responseSections, $this->‪getRequestSectionStructureDoesNotHaveRecordConstraint()
272  ->setRecordIdentifier(self::TABLE_Content . ':' . self::VALUE_ContentIdLast)->setRecordField(self::FIELD_ContentImage)
273  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('Taken at T3BOARD'));
274  }
275 
281  {
282  parent::modifyContentAndDeleteAllFileReference();
283  $this->assertCSVDataSet(__DIR__ . '/DataSet/modifyContentNDeleteAllFileReference.csv');
284 
285  $response = $this->executeFrontendSubRequest((new InternalRequest())->withPageId(self::VALUE_PageId));
286  $responseSections = ResponseContent::fromString((string)$response->getBody())->getSections();
287  self::assertThat($responseSections, $this->‪getRequestSectionStructureDoesNotHaveRecordConstraint()
288  ->setRecordIdentifier(self::TABLE_Content . ':' . self::VALUE_ContentIdLast)->setRecordField(self::FIELD_ContentImage)
289  ->setTable(self::TABLE_FileReference)->setField('title')->setValues('Taken at T3BOARD', 'This is Kasper'));
290  }
291 
296  {
297  parent::createContentWithFileReferenceAndDeleteFileReference();
298  $this->assertCSVDataSet(__DIR__ . '/DataSet/createContentWFileReferenceNDeleteFileReference.csv');
299  // No FE test: Create and delete scenarios have FE coverage, this test is only about DB state.
300  }
301 
305  public function ‪creatingFileIsDenied(): void
306  {
307  $this->expectedErrorLogEntries = 1;
308  $this->actionService->createNewRecord('sys_file', 0, [
309  'storage' => 1,
310  'name' => 'any.file',
311  'extension' => 'file',
312  'identifer' => '/any.file',
313  'mime_type' => 'text/plain',
314  'sha1' => 'this-is-not-a-hash-value',
315  ]);
316  $this->assertCSVDataSet(__DIR__ . '/DataSet/sysFileUnchanged.csv');
317  }
318 
322  public function ‪modifyingFileIsDenied(): void
323  {
324  $this->expectedErrorLogEntries = 1;
325  $this->actionService->modifyRecord('sys_file', 21, [
326  'storage' => 1,
327  'name' => 'any.file',
328  'extension' => 'file',
329  'identifer' => '/any.file',
330  'mime_type' => 'text/plain',
331  'sha1' => 'this-is-not-a-hash-value',
332  ]);
333  $this->assertCSVDataSet(__DIR__ . '/DataSet/sysFileUnchanged.csv');
334  }
335 
340  {
341  $this->expectedErrorLogEntries = 1;
342  $this->actionService->modifyRecord('sys_file_reference', 127, [
343  'uid_local' => 9,
344  ]);
345  $this->assertCSVDataSet(__DIR__ . '/DataSet/sysFileUnchanged.csv');
346  }
347 
352  {
353  $this->expectedErrorLogEntries = 1;
354  $this->actionService->modifyRecord('sys_file_metadata', 21, [
355  'file' => 9,
356  ]);
357  $this->assertCSVDataSet(__DIR__ . '/DataSet/sysFileUnchanged.csv');
358  }
359 }
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\AbstractActionTestCase
Definition: AbstractActionTestCase.php:26
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\AbstractDataHandlerActionTestCase\setUpFrontendSite
‪setUpFrontendSite(int $pageId, array $additionalLanguages=[])
Definition: AbstractDataHandlerActionTestCase.php:127
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\AbstractDataHandlerActionTestCase\getRequestSectionHasRecordConstraint
‪HasRecordConstraint getRequestSectionHasRecordConstraint()
Definition: AbstractDataHandlerActionTestCase.php:245
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\usingLegacyStorageFileInFileMetadataIsDenied
‪usingLegacyStorageFileInFileMetadataIsDenied()
Definition: ActionTest.php:351
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\AbstractDataHandlerActionTestCase\getRequestSectionStructureHasRecordConstraint
‪StructureHasRecordConstraint getRequestSectionStructureHasRecordConstraint()
Definition: AbstractDataHandlerActionTestCase.php:261
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\modifyContentAndAddFileReference
‪modifyContentAndAddFileReference()
Definition: ActionTest.php:245
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\createContentWithFileReference
‪createContentWithFileReference()
Definition: ActionTest.php:209
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest
Definition: ActionTest.php:28
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\modifyingFileIsDenied
‪modifyingFileIsDenied()
Definition: ActionTest.php:322
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\copyContentToLanguage
‪copyContentToLanguage()
Definition: ActionTest.php:95
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\deleteContent
‪deleteContent()
Definition: ActionTest.php:60
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\modifyContentAndDeleteFileReference
‪modifyContentAndDeleteFileReference()
Definition: ActionTest.php:261
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\AbstractDataHandlerActionTestCase\getRequestSectionStructureDoesNotHaveRecordConstraint
‪StructureDoesNotHaveRecordConstraint getRequestSectionStructureDoesNotHaveRecordConstraint()
Definition: AbstractDataHandlerActionTestCase.php:269
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify
Definition: ActionTest.php:18
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\createContentWithFileReferenceAndDeleteFileReference
‪createContentWithFileReferenceAndDeleteFileReference()
Definition: ActionTest.php:295
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\moveContentToDifferentPageAndChangeSorting
‪moveContentToDifferentPageAndChangeSorting()
Definition: ActionTest.php:184
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\usingLegacyStorageFileInFileReferenceIsDenied
‪usingLegacyStorageFileInFileReferenceIsDenied()
Definition: ActionTest.php:339
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\modifyContentAndDeleteAllFileReference
‪modifyContentAndDeleteAllFileReference()
Definition: ActionTest.php:280
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\copyContent
‪copyContent()
Definition: ActionTest.php:77
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\changeContentSorting
‪changeContentSorting()
Definition: ActionTest.php:138
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\moveContentToDifferentPage
‪moveContentToDifferentPage()
Definition: ActionTest.php:159
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\verifyCleanReferenceIndex
‪verifyCleanReferenceIndex()
Definition: ActionTest.php:32
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\AbstractDataHandlerActionTestCase\getRequestSectionDoesNotHaveRecordConstraint
‪DoesNotHaveRecordConstraint getRequestSectionDoesNotHaveRecordConstraint()
Definition: AbstractDataHandlerActionTestCase.php:253
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\creatingFileIsDenied
‪creatingFileIsDenied()
Definition: ActionTest.php:305
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\AbstractDataHandlerActionTestCase\$siteLanguageConfiguration
‪array $siteLanguageConfiguration
Definition: AbstractDataHandlerActionTestCase.php:72
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\modifyContent
‪modifyContent()
Definition: ActionTest.php:42
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\localizeContent
‪localizeContent()
Definition: ActionTest.php:119
‪TYPO3\CMS\Core\Tests\Functional\DataHandling\FAL\Modify\ActionTest\modifyContentWithFileReference
‪modifyContentWithFileReference()
Definition: ActionTest.php:227