‪TYPO3CMS  11.5
ImportCest.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 
23 
28 {
30  protected array ‪$testFilesToDelete = [];
31 
32  protected string ‪$inPageTree = '#typo3-pagetree-treeContainer .nodes';
33  protected string ‪$inModuleHeader = '.module-docheader';
34  protected string ‪$inModuleTabs = '#ImportExportController .nav-tabs';
35  protected string ‪$inModuleTabsBody = '#ImportExportController .tab-content';
36  protected string ‪$inTabImport = '#import-import';
37  protected string ‪$inFlashMessages = '.typo3-messages';
38 
39  protected string ‪$contextMenuMore = '#contentMenu0 li.list-group-item-submenu';
40  protected string ‪$contextMenuImport = '#contentMenu1 li.list-group-item[data-callback-action=importT3d]';
41  protected string ‪$tabUpload = 'a[href="#import-upload"]';
42  protected string ‪$tabMessages = 'a[href="#import-errors"]';
43  protected string ‪$inputUploadFile = 'input[type=file]';
44  protected string ‪$checkboxOverwriteFile = 'input#checkOverwriteExistingFiles';
45  protected string ‪$buttonUploadFile = '_upload';
46  protected string ‪$buttonPreview = '.btn[value=Preview]';
47  protected string ‪$buttonImport = 'button[name="tx_impexp[import_file]"]';
48  protected string ‪$buttonNewImport = 'input[name="tx_impexp[new_import]"]';
49 
53  public function ‪_before(‪ApplicationTester $I, ‪PageTree $pageTree): void
54  {
55  $I->useExistingSession('admin');
56  $I->click('List');
57  $I->waitForElement('svg .nodes .node');
58  $pageTree->‪openPath(['styleguide TCA demo']);
59  $I->waitForElement($this->inPageTree . ' .node', 5);
60  }
61 
62  public function ‪_after(‪ApplicationTester $I): void
63  {
64  $I->amGoingTo('clean up created files');
65 
66  foreach ($this->testFilesToDelete as $filePath) {
67  unlink($filePath);
68  $I->dontSeeFileFound($filePath);
69  }
70  $this->testFilesToDelete = [];
71  }
72 
77  {
78  $pageInPageTreeTitle = 'elements t3editor';
79  $pageInPageTreeIcon = '//*[text()=\'' . $pageInPageTreeTitle . '\']/../*[contains(@class, \'node-icon-container\')]';
80 
81  $I->click($pageInPageTreeIcon);
82  $this->selectInContextMenu($I, [$this->contextMenuMore, $this->contextMenuImport]);
83  $I->switchToContentFrame();
84  $I->see($pageInPageTreeTitle, $this->inModuleHeader);
85 
86  $I->click($this->buttonPreview, $this->inTabImport);
87  $this->waitForAjaxRequestToFinish($I);
88  $I->see($pageInPageTreeTitle, $this->inModuleHeader);
89  }
90 
91  public function uploadFileConsidersOverwritingFlag(ApplicationTester $I): void
92  {
93  $page1Title = 'styleguide TCA demo';
94  $page1Icon = '//*[text()=\'' . $page1Title . '\']/../*[contains(@class, \'node-icon-container\')]';
95  $fixtureFilePath = 'Acceptance/Application/Impexp/Fixtures/404_page_and_records.xml';
96 
97  $I->click($page1Icon);
98  $this->selectInContextMenu($I, [$this->contextMenuMore, $this->contextMenuImport]);
99  $I->switchToContentFrame();
100  $I->waitForElementVisible($this->tabUpload);
101  $I->click($this->tabUpload, $this->inModuleTabs);
102  $I->waitForElementVisible($this->inputUploadFile, 5);
103  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
104  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
105  $I->wait(1);
106  $I->click($this->tabUpload, $this->inModuleTabs);
107  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-success');
108  $I->canSeeElement($this->inModuleTabsBody . ' .callout.callout-success');
109 
110  $I->waitForElementVisible($this->inputUploadFile, 5);
111  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
112  $I->checkOption($this->checkboxOverwriteFile);
113  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
114  $I->wait(1);
115  $I->click($this->tabUpload, $this->inModuleTabs);
116  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-success');
117  $I->canSeeElement($this->inModuleTabsBody . ' .callout.callout-success');
118 
119  $I->waitForElementVisible($this->inputUploadFile, 5);
120  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
121  $I->uncheckOption($this->checkboxOverwriteFile);
122  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
123  $I->wait(1);
124  $I->click($this->tabUpload, $this->inModuleTabs);
125  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-danger');
126  $I->canSeeElement($this->inModuleTabsBody . ' .callout.callout-danger');
127  }
128 
140  private function rejectUploadedFileOfUnsupportedFileFormat(ApplicationTester $I): void
141  {
142  $page1Title = 'styleguide TCA demo';
143  $page1Icon = '//*[text()=\'' . $page1Title . '\']/../*[contains(@class, \'node-icon-container\')]';
144  $fixtureFilePath = 'Acceptance/Application/Impexp/Fixtures/unsupported.json';
145 
146  $I->click($page1Icon);
147  $this->selectInContextMenu($I, [$this->contextMenuMore, $this->contextMenuImport]);
148  $I->switchToContentFrame();
149  $I->waitForElementVisible($this->tabUpload);
150  $I->click($this->tabUpload, $this->inModuleTabs);
151  $I->waitForElementVisible($this->inputUploadFile, 5);
152  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
153  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
154  $I->wait(1);
155  $I->click($this->tabUpload, $this->inModuleTabs);
156  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-danger');
157  $I->canSeeElement($this->inModuleTabsBody . ' .callout.callout-danger');
158  }
159 
163  public function rejectImportIfPrerequisitesNotMet(ApplicationTester $I, ModalDialog $modalDialog, PageTree $pageTree): void
164  {
165  $I->wantToTest('rejecting import if prerequisites not met.');
166 
167  $sysCategoryTable = '#recordlist-sys_category';
168  $page1Title = 'styleguide TCA demo';
169  $page1Icon = '//*[text()=\'' . $page1Title . '\']/../*[contains(@class, \'node-icon-container\')]';
170  $fixtureFilePath = 'Acceptance/Application/Impexp/Fixtures/sys_category_table_with_bootstrap_package.xml';
171 
172  $I->switchToContentFrame();
173  $I->waitForText($page1Title);
174  $sysCategoryRecordsBefore = $I->grabMultiple($sysCategoryTable . ' .t3js-entity', 'data-uid');
175  $I->switchToMainFrame();
176 
177  $I->click($page1Icon);
178  $this->selectInContextMenu($I, [$this->contextMenuMore, $this->contextMenuImport]);
179  $I->switchToContentFrame();
180  $I->waitForElementVisible($this->tabUpload);
181  $I->click($this->tabUpload, $this->inModuleTabs);
182  $I->waitForElementVisible($this->inputUploadFile, 5);
183  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
184  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
185  $I->wait(1);
186  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-success');
187  $I->canSee('Uploading file', $this->inFlashMessages . ' .alert.alert-success .alert-message');
188  $I->seeElement($this->inFlashMessages . ' .alert.alert-danger');
189  $I->see('Prerequisites for file import are not met.', $this->inFlashMessages);
190  $I->canSeeElement($this->inModuleTabs . ' ' . $this->tabMessages);
191  $flashMessage = $I->grabTextFrom($this->inFlashMessages . ' .alert.alert-success .alert-message');
192  preg_match('/[^"]+"([^"]+)"[^"]+"([^"]+)"[^"]+/', $flashMessage, $flashMessageParts);
193  $loadFilePath = getenv('TYPO3_ACCEPTANCE_PATH_WEB') . '/fileadmin' . $flashMessageParts[2] . $flashMessageParts[1];
194  $I->assertFileExists($loadFilePath);
195  $this->testFilesToDelete[] = $loadFilePath;
196 
197  $I->click($this->buttonImport);
198  $modalDialog->clickButtonInDialog('button[name="ok"]');
199 
200  $I->switchToMainFrame();
201  $pageTree->openPath(['styleguide TCA demo']);
202  $I->switchToContentFrame();
203  $I->waitForText($page1Title);
204  $sysCategoryRecords = $I->grabMultiple($sysCategoryTable . ' .t3js-entity', 'data-uid');
205  $sysCategoryRecordsNew = array_diff($sysCategoryRecords, $sysCategoryRecordsBefore);
206  $I->assertCount(0, $sysCategoryRecordsNew);
207  }
208 
212  public function importPageAndRecords(ApplicationTester $I, ModalDialog $modalDialog, PageTree $pageTree): void
213  {
214  $I->wantToTest('importing a page with records.');
215 
216  $page1Title = 'styleguide TCA demo';
217  $page1Icon = '//*[text()=\'' . $page1Title . '\']/../*[contains(@class, \'node-icon-container\')]';
218  $fixtureFilePath = 'Acceptance/Application/Impexp/Fixtures/404_page_and_records.xml';
219 
220  $I->click($page1Icon);
221  $this->selectInContextMenu($I, [$this->contextMenuMore, $this->contextMenuImport]);
222  $I->switchToContentFrame();
223  $I->waitForElementVisible($this->tabUpload);
224  $I->click($this->tabUpload, $this->inModuleTabs);
225  $I->waitForElementVisible($this->inputUploadFile, 5);
226  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
227  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
228  $I->wait(1);
229  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-success');
230  $I->canSee('Uploading file', $this->inFlashMessages . ' .alert.alert-success .alert-message');
231  $I->cantSeeElement($this->inFlashMessages . ' .alert.alert-danger');
232  $I->cantSeeElement($this->inModuleTabs . ' ' . $this->tabMessages);
233  $flashMessage = $I->grabTextFrom($this->inFlashMessages . ' .alert.alert-success .alert-message');
234  preg_match('/[^"]+"([^"]+)"[^"]+"([^"]+)"[^"]+/', $flashMessage, $flashMessageParts);
235  $loadFilePath = getenv('TYPO3_ACCEPTANCE_PATH_WEB') . '/fileadmin' . $flashMessageParts[2] . $flashMessageParts[1];
236  $I->assertFileExists($loadFilePath);
237  $this->testFilesToDelete[] = $loadFilePath;
238 
239  $I->click($this->buttonImport);
240  $modalDialog->clickButtonInDialog('button[name="ok"]');
241 
242  $I->switchToMainFrame();
243  $pageSelector = $pageTree->getPageXPathByPageName('404');
244  $I->waitForElement($pageSelector);
245  $I->switchToContentFrame();
246  $I->seeElement($this->buttonNewImport);
247  }
248 
252  public function importTable(ApplicationTester $I, ModalDialog $modalDialog, PageTree $pageTree): void
253  {
254  $I->wantToTest('importing a table of records.');
255 
256  $sysCategoryTable = '#recordlist-sys_category';
257  $page1Title = 'styleguide TCA demo';
258  $page1Icon = '//*[text()=\'' . $page1Title . '\']/../*[contains(@class, \'node-icon-container\')]';
259  $fixtureFilePath = 'Acceptance/Application/Impexp/Fixtures/sys_category_table.xml';
260 
261  $I->switchToContentFrame();
262  $I->waitForText($page1Title);
263  $sysCategoryRecordsBefore = $I->grabMultiple($sysCategoryTable . ' .t3js-entity', 'data-uid');
264  $I->switchToMainFrame();
265 
266  $I->click($page1Icon);
267  $this->selectInContextMenu($I, [$this->contextMenuMore, $this->contextMenuImport]);
268  $I->switchToContentFrame();
269  $I->waitForElementVisible($this->tabUpload);
270  $I->click($this->tabUpload, $this->inModuleTabs);
271  $I->waitForElementVisible($this->inputUploadFile, 5);
272  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
273  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
274  $I->wait(1);
275  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-success');
276  $I->canSee('Uploading file', $this->inFlashMessages . ' .alert.alert-success .alert-message');
277  $I->cantSeeElement($this->inFlashMessages . ' .alert.alert-danger');
278  $I->cantSeeElement($this->inModuleTabs . ' ' . $this->tabMessages);
279  $flashMessage = $I->grabTextFrom($this->inFlashMessages . ' .alert.alert-success .alert-message');
280  preg_match('/[^"]+"([^"]+)"[^"]+"([^"]+)"[^"]+/', $flashMessage, $flashMessageParts);
281  $loadFilePath = getenv('TYPO3_ACCEPTANCE_PATH_WEB') . '/fileadmin' . $flashMessageParts[2] . $flashMessageParts[1];
282  $I->assertFileExists($loadFilePath);
283  $this->testFilesToDelete[] = $loadFilePath;
284 
285  $I->click($this->buttonImport);
286  $modalDialog->clickButtonInDialog('button[name="ok"]');
287 
288  $I->switchToMainFrame();
289  $pageTree->openPath(['styleguide TCA demo']);
290  $I->switchToContentFrame();
291  $I->waitForElementVisible($sysCategoryTable . ' .t3js-entity');
292  $sysCategoryRecords = $I->grabMultiple($sysCategoryTable . ' .t3js-entity', 'data-uid');
293  $sysCategoryRecordsNew = array_diff($sysCategoryRecords, $sysCategoryRecordsBefore);
294  $I->assertCount(5, $sysCategoryRecordsNew);
295  }
296 
300  public function importRecord(ApplicationTester $I, ModalDialog $modalDialog, PageTree $pageTree): void
301  {
302  $I->wantToTest('importing a single record.');
303 
304  $sysCategoryTable = '#recordlist-sys_category';
305  $page1Title = 'styleguide TCA demo';
306  $page1Icon = '//*[text()=\'' . $page1Title . '\']/../*[contains(@class, \'node-icon-container\')]';
307  $fixtureFilePath = 'Acceptance/Application/Impexp/Fixtures/sys_category_record.xml';
308 
309  $I->switchToContentFrame();
310  $I->waitForText($page1Title);
311  $sysCategoryRecordsBefore = $I->grabMultiple($sysCategoryTable . ' .t3js-entity', 'data-uid');
312  $I->switchToMainFrame();
313 
314  $I->click($page1Icon);
315  $this->selectInContextMenu($I, [$this->contextMenuMore, $this->contextMenuImport]);
316  $I->switchToContentFrame();
317  $I->waitForElementVisible($this->tabUpload);
318  $I->click($this->tabUpload, $this->inModuleTabs);
319  $I->waitForElementVisible($this->inputUploadFile, 5);
320  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
321  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
322  $I->wait(1);
323  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-success');
324  $I->canSee('Uploading file', $this->inFlashMessages . ' .alert.alert-success .alert-message');
325  $I->cantSeeElement($this->inFlashMessages . ' .alert.alert-danger');
326  $I->cantSeeElement($this->inModuleTabs . ' ' . $this->tabMessages);
327  $flashMessage = $I->grabTextFrom($this->inFlashMessages . ' .alert.alert-success .alert-message');
328  preg_match('/[^"]+"([^"]+)"[^"]+"([^"]+)"[^"]+/', $flashMessage, $flashMessageParts);
329  $loadFilePath = getenv('TYPO3_ACCEPTANCE_PATH_WEB') . '/fileadmin' . $flashMessageParts[2] . $flashMessageParts[1];
330  $I->assertFileExists($loadFilePath);
331  $this->testFilesToDelete[] = $loadFilePath;
332 
333  $I->click($this->buttonImport);
334  $modalDialog->clickButtonInDialog('button[name="ok"]');
335 
336  $I->switchToMainFrame();
337  $pageTree->openPath(['styleguide TCA demo']);
338  $I->switchToContentFrame();
339  $I->waitForElementVisible($sysCategoryTable . ' .t3js-entity');
340  $sysCategoryRecords = $I->grabMultiple($sysCategoryTable . ' .t3js-entity', 'data-uid');
341  $sysCategoryRecordsNew = array_diff($sysCategoryRecords, $sysCategoryRecordsBefore);
342  $I->assertCount(1, $sysCategoryRecordsNew);
343  }
344 }
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$inModuleTabsBody
‪string $inModuleTabsBody
Definition: ImportCest.php:35
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$buttonUploadFile
‪string $buttonUploadFile
Definition: ImportCest.php:45
‪TYPO3\CMS\Core\Tests\Acceptance\Support\ApplicationTester
Definition: ApplicationTester.php:27
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\_after
‪_after(ApplicationTester $I)
Definition: ImportCest.php:62
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$buttonNewImport
‪string $buttonNewImport
Definition: ImportCest.php:48
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$contextMenuImport
‪string $contextMenuImport
Definition: ImportCest.php:40
‪TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\PageTree\openPath
‪openPath(array $path)
Definition: PageTree.php:76
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest
Definition: ImportCest.php:28
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$tabUpload
‪string $tabUpload
Definition: ImportCest.php:41
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\importDisplaysTitleOfSelectedPageInModuleHeader
‪importDisplaysTitleOfSelectedPageInModuleHeader(ApplicationTester $I)
Definition: ImportCest.php:76
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$testFilesToDelete
‪array $testFilesToDelete
Definition: ImportCest.php:30
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$buttonImport
‪string $buttonImport
Definition: ImportCest.php:47
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$inFlashMessages
‪string $inFlashMessages
Definition: ImportCest.php:37
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$inputUploadFile
‪string $inputUploadFile
Definition: ImportCest.php:43
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$inPageTree
‪string $inPageTree
Definition: ImportCest.php:32
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp
Definition: AbstractCest.php:18
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$inModuleTabs
‪string $inModuleTabs
Definition: ImportCest.php:34
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\AbstractCest
Definition: AbstractCest.php:28
‪TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\PageTree
Definition: PageTree.php:31
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$inModuleHeader
‪string $inModuleHeader
Definition: ImportCest.php:33
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$tabMessages
‪string $tabMessages
Definition: ImportCest.php:42
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$checkboxOverwriteFile
‪string $checkboxOverwriteFile
Definition: ImportCest.php:44
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$inTabImport
‪string $inTabImport
Definition: ImportCest.php:36
‪TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\ModalDialog
Definition: ModalDialog.php:27
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$contextMenuMore
‪string $contextMenuMore
Definition: ImportCest.php:39
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$buttonPreview
‪string $buttonPreview
Definition: ImportCest.php:46
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\_before
‪_before(ApplicationTester $I, PageTree $pageTree)
Definition: ImportCest.php:53