‪TYPO3CMS  ‪main
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 
27 final class ‪ImportCest extends ‪AbstractCest
28 {
29  private array ‪$testFilesToDelete = [];
30 
31  private string ‪$inModuleHeader = '.module-docheader';
32  private string ‪$inModuleTabs = '#ImportExportController .nav-tabs';
33  private string ‪$inModuleTabsBody = '#ImportExportController .tab-content';
34  private string ‪$inTabImport = '#import-import';
35  private string ‪$inFlashMessages = '.typo3-messages';
36  private string ‪$contextMenuMore = '#contentMenu0 li.context-menu-item-submenu';
37  private string ‪$contextMenuImport = '#contentMenu1 li.context-menu-item[data-callback-action=importT3d]';
38  private string ‪$tabUpload = 'a[href="#import-upload"]';
39  private string ‪$tabMessages = 'a[href="#import-errors"]';
40  private string ‪$inputUploadFile = 'input[type=file]';
41  private string ‪$checkboxOverwriteFile = 'input#checkOverwriteExistingFiles';
42  private string ‪$buttonUploadFile = '_upload';
43  private string ‪$buttonImport = 'button[name="tx_impexp[import_file]"]';
44  private string ‪$buttonNewImport = 'button[name="tx_impexp[new_import]"]';
45 
46  public function ‪_before(‪ApplicationTester $I, ‪PageTree $pageTree): void
47  {
48  $I->useExistingSession('admin');
49  $I->click('List');
50  $pageTree->‪openPath(['styleguide TCA demo']);
51  }
52 
53  public function ‪_after(‪ApplicationTester $I): void
54  {
55  $I->amGoingTo('clean up created files');
56 
57  foreach ($this->testFilesToDelete as $filePath) {
58  unlink($filePath);
59  $I->dontSeeFileFound($filePath);
60  }
61  $this->testFilesToDelete = [];
62  }
63 
65  {
66  $pageInPageTreeTitle = 'elements t3editor';
67  $pageInPageTreeIcon = '//*[text()=\'' . $pageInPageTreeTitle . '\']/../../*[contains(@class, \'node-icon\')]';
68 
69  $I->click($pageInPageTreeIcon);
70  $this->selectInContextMenu($I, [$this->contextMenuMore, $this->contextMenuImport]);
71  $I->switchToContentFrame();
72  $I->see($pageInPageTreeTitle, $this->inModuleHeader);
73 
74  $I->click('Preview', $this->inTabImport);
75  $this->timeoutForAjaxRequest($I);
76  $I->see($pageInPageTreeTitle, $this->inModuleHeader);
77  }
78 
79  public function uploadFileConsidersOverwritingFlag(ApplicationTester $I): void
80  {
81  $page1Title = 'styleguide TCA demo';
82  $page1Icon = '//*[text()=\'' . $page1Title . '\']/../../*[contains(@class, \'node-icon\')]';
83  $fixtureFilePath = 'Acceptance/Application/Impexp/Fixtures/404_page_and_records.xml';
84 
85  $I->click($page1Icon);
86  $this->selectInContextMenu($I, [$this->contextMenuMore, $this->contextMenuImport]);
87  $I->switchToContentFrame();
88  $I->waitForElementVisible($this->tabUpload);
89  $I->click($this->tabUpload, $this->inModuleTabs);
90  $I->waitForElementVisible($this->inputUploadFile, 5);
91  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
92  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
93  $I->wait(1);
94  $I->click($this->tabUpload, $this->inModuleTabs);
95  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-success');
96  $I->canSeeElement($this->inModuleTabsBody . ' .callout.callout-success');
97 
98  $I->waitForElementVisible($this->inputUploadFile, 5);
99  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
100  $I->checkOption($this->checkboxOverwriteFile);
101  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
102  $I->wait(1);
103  $I->click($this->tabUpload, $this->inModuleTabs);
104  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-success');
105  $I->canSeeElement($this->inModuleTabsBody . ' .callout.callout-success');
106 
107  $I->waitForElementVisible($this->inputUploadFile, 5);
108  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
109  $I->uncheckOption($this->checkboxOverwriteFile);
110  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
111  $I->wait(1);
112  $I->click($this->tabUpload, $this->inModuleTabs);
113  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-danger');
114  $I->canSeeElement($this->inModuleTabsBody . ' .callout.callout-danger');
115  }
116 
117  public function rejectImportIfPrerequisitesNotMet(ApplicationTester $I, ModalDialog $modalDialog, PageTree $pageTree): void
118  {
119  $sysCategoryTable = '#recordlist-sys_category';
120  $page1Title = 'styleguide TCA demo';
121  $page1Icon = '//*[text()=\'' . $page1Title . '\']/../../*[contains(@class, \'node-icon\')]';
122  $fixtureFilePath = 'Acceptance/Application/Impexp/Fixtures/sys_category_table_with_bootstrap_package.xml';
123 
124  $I->switchToContentFrame();
125  $I->waitForText($page1Title);
126  $sysCategoryRecordsBefore = $I->grabMultiple($sysCategoryTable . ' .t3js-entity', 'data-uid');
127  $I->switchToMainFrame();
128 
129  $I->click($page1Icon);
130  $this->selectInContextMenu($I, [$this->contextMenuMore, $this->contextMenuImport]);
131  $I->switchToContentFrame();
132  $I->waitForElementVisible($this->tabUpload);
133  $I->click($this->tabUpload, $this->inModuleTabs);
134  $I->waitForElementVisible($this->inputUploadFile, 5);
135  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
136  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
137  $I->wait(1);
138  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-success');
139  $I->canSee('Uploading file', $this->inFlashMessages . ' .alert.alert-success .alert-message');
140  $I->seeElement($this->inFlashMessages . ' .alert.alert-danger');
141  $I->see('Prerequisites for file import are not met.', $this->inFlashMessages);
142  $I->canSeeElement($this->inModuleTabs . ' ' . $this->tabMessages);
143  $flashMessage = $I->grabTextFrom($this->inFlashMessages . ' .alert.alert-success .alert-message');
144  preg_match('/[^"]+"([^"]+)"[^"]+"([^"]+)"[^"]+/', $flashMessage, $flashMessageParts);
145  $loadFilePath = getenv('TYPO3_ACCEPTANCE_PATH_WEB') . '/fileadmin' . $flashMessageParts[2] . $flashMessageParts[1];
146  $I->assertFileExists($loadFilePath);
147  $this->testFilesToDelete[] = $loadFilePath;
148 
149  $I->click($this->buttonImport);
150  $modalDialog->clickButtonInDialog('button[name="ok"]');
151 
152  $I->switchToMainFrame();
153  $pageTree->openPath(['styleguide TCA demo']);
154  $I->switchToContentFrame();
155  $I->waitForText($page1Title);
156  $sysCategoryRecords = $I->grabMultiple($sysCategoryTable . ' .t3js-entity', 'data-uid');
157  $sysCategoryRecordsNew = array_diff($sysCategoryRecords, $sysCategoryRecordsBefore);
158  $I->assertCount(0, $sysCategoryRecordsNew);
159  }
160 
161  public function importPageAndRecords(ApplicationTester $I, ModalDialog $modalDialog, PageTree $pageTree): void
162  {
163  $page1Title = 'styleguide TCA demo';
164  $page1Icon = '//*[text()=\'' . $page1Title . '\']/../../*[contains(@class, \'node-icon\')]';
165  $fixtureFilePath = 'Acceptance/Application/Impexp/Fixtures/404_page_and_records.xml';
166 
167  $I->click($page1Icon);
168  $this->selectInContextMenu($I, [$this->contextMenuMore, $this->contextMenuImport]);
169  $I->switchToContentFrame();
170  $I->waitForElementVisible($this->tabUpload);
171  $I->click($this->tabUpload, $this->inModuleTabs);
172  $I->waitForElementVisible($this->inputUploadFile, 5);
173  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
174  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
175  $I->wait(1);
176  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-success');
177  $I->canSee('Uploading file', $this->inFlashMessages . ' .alert.alert-success .alert-message');
178  $I->cantSeeElement($this->inFlashMessages . ' .alert.alert-danger');
179  $I->cantSeeElement($this->inModuleTabs . ' ' . $this->tabMessages);
180  $flashMessage = $I->grabTextFrom($this->inFlashMessages . ' .alert.alert-success .alert-message');
181  preg_match('/[^"]+"([^"]+)"[^"]+"([^"]+)"[^"]+/', $flashMessage, $flashMessageParts);
182  $loadFilePath = getenv('TYPO3_ACCEPTANCE_PATH_WEB') . '/fileadmin' . $flashMessageParts[2] . $flashMessageParts[1];
183  $I->assertFileExists($loadFilePath);
184  $this->testFilesToDelete[] = $loadFilePath;
185 
186  $I->click($this->buttonImport);
187  $modalDialog->clickButtonInDialog('button[name="ok"]');
188 
189  $I->switchToMainFrame();
190  $pageSelector = $pageTree->getPageXPathByPageName('404');
191  $I->waitForElement($pageSelector);
192  $I->switchToContentFrame();
193  $I->seeElement($this->buttonNewImport);
194  }
195 
196  public function importTable(ApplicationTester $I, ModalDialog $modalDialog, PageTree $pageTree): void
197  {
198  $sysCategoryTable = '#recordlist-sys_category';
199  $page1Title = 'styleguide TCA demo';
200  $page1Icon = '//*[text()=\'' . $page1Title . '\']/../../*[contains(@class, \'node-icon\')]';
201  $fixtureFilePath = 'Acceptance/Application/Impexp/Fixtures/sys_category_table.xml';
202 
203  $I->switchToContentFrame();
204  $I->waitForText($page1Title);
205  $sysCategoryRecordsBefore = $I->grabMultiple($sysCategoryTable . ' .t3js-entity', 'data-uid');
206  $I->switchToMainFrame();
207 
208  $I->click($page1Icon);
209  $this->selectInContextMenu($I, [$this->contextMenuMore, $this->contextMenuImport]);
210  $I->switchToContentFrame();
211  $I->waitForElementVisible($this->tabUpload);
212  $I->click($this->tabUpload, $this->inModuleTabs);
213  $I->waitForElementVisible($this->inputUploadFile, 5);
214  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
215  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
216  $I->wait(1);
217  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-success');
218  $I->canSee('Uploading file', $this->inFlashMessages . ' .alert.alert-success .alert-message');
219  $I->cantSeeElement($this->inFlashMessages . ' .alert.alert-danger');
220  $I->cantSeeElement($this->inModuleTabs . ' ' . $this->tabMessages);
221  $flashMessage = $I->grabTextFrom($this->inFlashMessages . ' .alert.alert-success .alert-message');
222  preg_match('/[^"]+"([^"]+)"[^"]+"([^"]+)"[^"]+/', $flashMessage, $flashMessageParts);
223  $loadFilePath = getenv('TYPO3_ACCEPTANCE_PATH_WEB') . '/fileadmin' . $flashMessageParts[2] . $flashMessageParts[1];
224  $I->assertFileExists($loadFilePath);
225  $this->testFilesToDelete[] = $loadFilePath;
226 
227  $I->click($this->buttonImport);
228  $modalDialog->clickButtonInDialog('button[name="ok"]');
229 
230  $I->switchToMainFrame();
231  $pageTree->openPath(['styleguide TCA demo']);
232  $I->switchToContentFrame();
233  $I->waitForElementVisible($sysCategoryTable . ' .t3js-entity');
234  $sysCategoryRecords = $I->grabMultiple($sysCategoryTable . ' .t3js-entity', 'data-uid');
235  $sysCategoryRecordsNew = array_diff($sysCategoryRecords, $sysCategoryRecordsBefore);
236  $I->assertCount(5, $sysCategoryRecordsNew);
237  }
238 
239  public function importRecord(ApplicationTester $I, ModalDialog $modalDialog, PageTree $pageTree): void
240  {
241  $sysCategoryTable = '#recordlist-sys_category';
242  $page1Title = 'styleguide TCA demo';
243  $page1Icon = '//*[text()=\'' . $page1Title . '\']/../../*[contains(@class, \'node-icon\')]';
244  $fixtureFilePath = 'Acceptance/Application/Impexp/Fixtures/sys_category_record.xml';
245 
246  $I->switchToContentFrame();
247  $I->waitForText($page1Title);
248  $sysCategoryRecordsBefore = $I->grabMultiple($sysCategoryTable . ' .t3js-entity', 'data-uid');
249  $I->switchToMainFrame();
250 
251  $I->click($page1Icon);
252  $this->selectInContextMenu($I, [$this->contextMenuMore, $this->contextMenuImport]);
253  $I->switchToContentFrame();
254  $I->waitForElementVisible($this->tabUpload);
255  $I->click($this->tabUpload, $this->inModuleTabs);
256  $I->waitForElementVisible($this->inputUploadFile, 5);
257  $I->attachFile($this->inputUploadFile, $fixtureFilePath);
258  $I->click($this->buttonUploadFile, $this->inModuleTabsBody);
259  $I->wait(1);
260  $I->canSeeElement($this->inFlashMessages . ' .alert.alert-success');
261  $I->canSee('Uploading file', $this->inFlashMessages . ' .alert.alert-success .alert-message');
262  $I->cantSeeElement($this->inFlashMessages . ' .alert.alert-danger');
263  $I->cantSeeElement($this->inModuleTabs . ' ' . $this->tabMessages);
264  $flashMessage = $I->grabTextFrom($this->inFlashMessages . ' .alert.alert-success .alert-message');
265  preg_match('/[^"]+"([^"]+)"[^"]+"([^"]+)"[^"]+/', $flashMessage, $flashMessageParts);
266  $loadFilePath = getenv('TYPO3_ACCEPTANCE_PATH_WEB') . '/fileadmin' . $flashMessageParts[2] . $flashMessageParts[1];
267  $I->assertFileExists($loadFilePath);
268  $this->testFilesToDelete[] = $loadFilePath;
269 
270  $I->click($this->buttonImport);
271  $modalDialog->clickButtonInDialog('button[name="ok"]');
272 
273  $I->switchToMainFrame();
274  $pageTree->openPath(['styleguide TCA demo']);
275  $I->switchToContentFrame();
276  $I->waitForElementVisible($sysCategoryTable . ' .t3js-entity');
277  $sysCategoryRecords = $I->grabMultiple($sysCategoryTable . ' .t3js-entity', 'data-uid');
278  $sysCategoryRecordsNew = array_diff($sysCategoryRecords, $sysCategoryRecordsBefore);
279  $I->assertCount(1, $sysCategoryRecordsNew);
280  }
281 }
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$inModuleTabsBody
‪string $inModuleTabsBody
Definition: ImportCest.php:33
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$buttonUploadFile
‪string $buttonUploadFile
Definition: ImportCest.php:42
‪TYPO3\CMS\Core\Tests\Acceptance\Support\ApplicationTester
Definition: ApplicationTester.php:28
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\_after
‪_after(ApplicationTester $I)
Definition: ImportCest.php:53
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$buttonNewImport
‪string $buttonNewImport
Definition: ImportCest.php:44
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$contextMenuImport
‪string $contextMenuImport
Definition: ImportCest.php:37
‪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:38
‪TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\AbstractTree\openPath
‪openPath(array $path)
Definition: AbstractTree.php:55
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\importDisplaysTitleOfSelectedPageInModuleHeader
‪importDisplaysTitleOfSelectedPageInModuleHeader(ApplicationTester $I)
Definition: ImportCest.php:64
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$testFilesToDelete
‪array $testFilesToDelete
Definition: ImportCest.php:29
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$buttonImport
‪string $buttonImport
Definition: ImportCest.php:43
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$inFlashMessages
‪string $inFlashMessages
Definition: ImportCest.php:35
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$inputUploadFile
‪string $inputUploadFile
Definition: ImportCest.php:40
‪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:32
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\AbstractCest
Definition: AbstractCest.php:26
‪TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\PageTree
Definition: PageTree.php:26
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$inModuleHeader
‪string $inModuleHeader
Definition: ImportCest.php:31
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$tabMessages
‪string $tabMessages
Definition: ImportCest.php:39
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$checkboxOverwriteFile
‪string $checkboxOverwriteFile
Definition: ImportCest.php:41
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$inTabImport
‪string $inTabImport
Definition: ImportCest.php:34
‪TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\ModalDialog
Definition: ModalDialog.php:24
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\$contextMenuMore
‪string $contextMenuMore
Definition: ImportCest.php:36
‪TYPO3\CMS\Core\Tests\Acceptance\Application\Impexp\ImportCest\_before
‪_before(ApplicationTester $I, PageTree $pageTree)
Definition: ImportCest.php:46