‪TYPO3CMS  ‪main
ImportTest.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
17 
21 
23 {
24  protected array ‪$pathsToLinkInTestInstance = [
25  'typo3/sysext/impexp/Tests/Functional/Fixtures/XmlImports' => 'fileadmin/xml_imports',
26  ];
27 
29  {
30  return [
31  'relative path to fileadmin' => ['fileadmin/xml_imports/sys_news.xml'],
32  'relative path to system extensions' => ['typo3/sysext/impexp/Tests/Functional/Fixtures/XmlImports/sys_news.xml'],
33  'absolute path to system extensions' => ['%EnvironmentPublicPath%/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlImports/sys_news.xml'],
34  'extension path' => ['EXT:impexp/Tests/Functional/Fixtures/XmlImports/sys_news.xml'],
35  ];
36  }
37 
42  public function ‪loadingFileFromWithinTypo3BaseFolderSucceeds(string $filePath): void
43  {
44  $filePath = str_replace('%EnvironmentPublicPath%', ‪Environment::getPublicPath(), $filePath);
45 
46  $importMock = $this->getAccessibleMock(Import::class, null);
47  $importMock->loadFile($filePath);
48 
49  self::assertTrue(true);
50  }
51 
52  public static function ‪loadingFileFailsProvider(): array
53  {
54  return [
55  'storage path' => ['1:/xml_imports/sys_news.xml'],
56  'absolute path outside typo3 base folder' => ['/fileadmin/xml_imports/sys_news.xml'],
57  'path to not existing file' => ['fileadmin/xml_imports/me_does_not_exist.xml'],
58  'unsupported file extension' => ['EXT:impexp/Tests/Functional/Fixtures/XmlImports/unsupported.json'],
59  'empty path' => [''],
60  ];
61  }
62 
67  public function ‪loadingFileFails(string $filePath): void
68  {
69  $this->expectException(LoadingFileFailedException::class);
70 
71  $importMock = $this->getAccessibleMock(Import::class, ['loadInit']);
72  $importMock->expects(self::never())->method('loadInit');
73  $importMock->loadFile($filePath);
74  self::assertEmpty($importMock->_get('dat'));
75  }
76 
81  {
82  $renderPreviewImport = include __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecords.php';
83 
84  $importMock = $this->getAccessibleMock(Import::class, null);
85  $importMock->setPid(0);
86  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent.xml');
87  $previewData = $importMock->renderPreview();
88  // file_put_contents(
89  // __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecords.php',
90  // str_replace(
91  // ['array (', '),', ');'],
92  // ['[', '],', '];'],
93  // '<?php' . "\n\nreturn " . var_export($previewData, true) . ";\n")
94  // );
95  self::assertEquals($renderPreviewImport, $previewData);
96  }
97 
102  {
103  $renderPreviewImport = include __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdate.php';
104 
105  $importMock = $this->getAccessibleMock(Import::class, null);
106  $importMock->setPid(0);
107  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent.xml');
108  $importMock->importData();
109  $importMock->setUpdate(true);
110  $previewData = $importMock->renderPreview();
111  // file_put_contents(
112  // __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdate.php',
113  // str_replace(
114  // ['array (', '),', ');'],
115  // ['[', '],', '];'],
116  // '<?php' . "\n\nreturn " . var_export($previewData, true) . ";\n")
117  // );
118  self::assertEquals($renderPreviewImport, $previewData);
119  }
120 
125  {
126  $renderPreviewImport = include __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithDiff.php';
127 
128  $importMock = $this->getAccessibleMock(Import::class, null);
129  $importMock->setPid(0);
130  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent.xml');
131  $importMock->importData();
132  $importMock->setShowDiff(true);
133  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent-with-two-images.xml');
134  $previewData = $importMock->renderPreview();
135  // file_put_contents(
136  // __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithDiff.php',
137  // str_replace(
138  // ['array (', '),', ');'],
139  // ['[', '],', '];'],
140  // '<?php' . "\n\nreturn " . var_export($previewData, true) . ";\n")
141  // );
142  self::assertEquals($renderPreviewImport, $previewData);
143  }
144 
149  {
150  $renderPreviewImport = include __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdateWithDiff.php';
151 
152  $importMock = $this->getAccessibleMock(Import::class, null);
153  $importMock->setPid(0);
154  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent.xml');
155  $importMock->importData();
156  $importMock->setShowDiff(true);
157  $importMock->setUpdate(true);
158  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent-with-two-images.xml');
159  $previewData = $importMock->renderPreview();
160  // file_put_contents(
161  // __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdateWithDiff.php',
162  // str_replace(
163  // ['array (', '),', ');'],
164  // ['[', '],', '];'],
165  // '<?php' . "\n\nreturn " . var_export($previewData, true) . ";\n")
166  // );
167  self::assertEquals($renderPreviewImport, $previewData);
168  }
169 
174  {
175  $renderPreviewImport = include __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithSoftRefs.php';
176 
177  $importMock = $this->getAccessibleMock(Import::class, null);
178  $importMock->setPid(0);
179  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent-with-softrefs.xml');
180  $previewData = $importMock->renderPreview();
181  // file_put_contents(
182  // __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithSoftRefs.php',
183  // str_replace(
184  // ['array (', '),', ');'],
185  // ['[', '],', '];'],
186  // '<?php' . "\n\nreturn " . var_export($previewData, true) . ";\n")
187  // );
188  self::assertEquals($renderPreviewImport, $previewData);
189  }
190 
191  public static function ‪addFilesSucceedsDataProvider(): array
192  {
193  return [
194  ['dat' => [
195  'header' => [
196  'files' => [
197  '123456789' => [
198  'filename' => 'filename.jpg',
199  'relFileName' => 'filename.jpg',
200  ],
201  ],
202  ],
203  ], 'relations' => [
204  '123456789',
205  ], 'tokenID' => '987654321'
206  , 'expected' => [
207  [
208  'ref' => 'FILE',
209  'type' => 'file',
210  'msg' => '',
211  'preCode' => '<span class="indent indent-inline-block" style="--indent-level: 1"></span><span title="FILE" class="t3js-icon icon icon-size-small icon-state-default icon-status-reference-hard" data-identifier="status-reference-hard" aria-hidden="true">
212 ' . "\t" . '<span class="icon-markup">
213 <img src="typo3/sysext/impexp/Resources/Public/Icons/status-reference-hard.png" width="16" height="16" alt="" />
214 ' . "\t" . '</span>' . "\n\t\n" . '</span>',
215  'title' => 'filename.jpg',
216  'showDiffContent' => '',
217  ],
218  ], ],
219  ];
220  }
221 
228  public function ‪addFilesSucceeds(array $dat, array $relations, string $tokenID, array $expected): void
229  {
230  $importMock = $this->getAccessibleMock(
231  Import::class,
232  ['addError'],
233  [],
234  '',
235  true
236  );
237 
238  $lines = [];
239  $importMock->_set('dat', $dat);
240  $importMock->addFiles($relations, $lines, 0, $tokenID);
241  self::assertEquals($expected, $lines);
242  }
243 
247  public function ‪loadXmlSucceeds(): void
248  {
249  $importMock = $this->getAccessibleMock(Import::class, null);
250  $importMock->setPid(0);
251  $importMock->loadFile(
252  'EXT:impexp/Tests/Functional/Fixtures/XmlExports/empty.xml',
253  true
254  );
255  self::assertTrue(true);
256  }
257 
261  public function ‪loadT3dSucceeds(): void
262  {
263  $importMock = $this->getAccessibleMock(Import::class, null);
264  $importMock->setPid(0);
265  $importMock->loadFile(
266  'EXT:impexp/Tests/Functional/Fixtures/T3dExports/empty.t3d',
267  true
268  );
269  self::assertTrue(true);
270  }
271 
275  public function ‪loadT3dFails(): void
276  {
277  $this->expectException(LoadingFileFailedException::class);
278 
279  $importMock = $this->getAccessibleMock(Import::class, null);
280  $importMock->setPid(0);
281  $importMock->loadFile(
282  'EXT:impexp/Tests/Functional/Fixtures/T3dExports/empty-with-wrong-checksum.t3d',
283  true
284  );
285  }
286 
290  public function ‪loadT3dCompressedSucceeds(): void
291  {
292  if (!function_exists('gzuncompress')) {
293  self::markTestSkipped('The function gzuncompress() is not available for decompression.');
294  }
295 
296  $importMock = $this->getAccessibleMock(Import::class, null);
297  $importMock->setPid(0);
298  $importMock->loadFile(
299  'EXT:impexp/Tests/Functional/Fixtures/T3dExports/empty-z.t3d',
300  true
301  );
302  self::assertTrue(true);
303  }
304 
308  public function ‪importDataCleansUpTemporaryFolder(): void
309  {
310  $fileDirectory = ‪Environment::getVarPath() . '/transient';
311  $numTemporaryFilesAndFoldersBeforeImport = iterator_count(new \FilesystemIterator($fileDirectory, \FilesystemIterator::SKIP_DOTS));
312 
313  $importMock = $this->getAccessibleMock(Import::class, null);
314  $importMock->setPid(0);
315  // Simulation of import of TCA field type=group with internal_type=file
316  // which is not supported anymore since TYPO3 v10 but there are still remains in EXT:impexp.
317  // Remove as soon as support of internal_type "file" has been completely removed from EXT:impexp.
318  $dat = [
319  'files' => [
320  '123456789' => [
321  'content' => 'dummy content',
322  'content_md5' => md5('dummy content'),
323  ],
324  ],
325  ];
326  $fileInfo = [
327  'ID' => '123456789',
328  ];
329  $files = [$fileInfo];
330  $importMock->_set('dat', $dat);
331  $importMock->writeFilesToTemporaryFolder($files);
332  // End of simulation
333  $importMock->loadFile(
334  'EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent.xml',
335  true
336  );
337  $importMock->importData();
338 
339  self::assertCount($numTemporaryFilesAndFoldersBeforeImport, new \FilesystemIterator($fileDirectory, \FilesystemIterator::SKIP_DOTS));
340  self::assertEmpty($importMock->_get('temporaryFolderName'));
341  }
342 }
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\addFilesSucceedsDataProvider
‪static addFilesSucceedsDataProvider()
Definition: ImportTest.php:191
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\renderPreviewForImportOfPageAndRecordsWithDiffView
‪renderPreviewForImportOfPageAndRecordsWithDiffView()
Definition: ImportTest.php:124
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\$pathsToLinkInTestInstance
‪array $pathsToLinkInTestInstance
Definition: ImportTest.php:24
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\renderPreviewForImportOfPageAndRecords
‪renderPreviewForImportOfPageAndRecords()
Definition: ImportTest.php:80
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\loadT3dFails
‪loadT3dFails()
Definition: ImportTest.php:275
‪TYPO3\CMS\Core\Core\Environment\getPublicPath
‪static getPublicPath()
Definition: Environment.php:187
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\loadingFileFailsProvider
‪static loadingFileFailsProvider()
Definition: ImportTest.php:52
‪TYPO3\CMS\Impexp\Exception\LoadingFileFailedException
Definition: LoadingFileFailedException.php:28
‪TYPO3\CMS\Impexp\Tests\Functional
Definition: AbstractImportExportTestCase.php:18
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\renderPreviewForImportOfPageAndRecordsByUpdateWithDiffView
‪renderPreviewForImportOfPageAndRecordsByUpdateWithDiffView()
Definition: ImportTest.php:148
‪TYPO3\CMS\Core\Core\Environment\getVarPath
‪static getVarPath()
Definition: Environment.php:197
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\addFilesSucceeds
‪addFilesSucceeds(array $dat, array $relations, string $tokenID, array $expected)
Definition: ImportTest.php:228
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\renderPreviewForImportOfPageAndRecordsByUpdate
‪renderPreviewForImportOfPageAndRecordsByUpdate()
Definition: ImportTest.php:101
‪TYPO3\CMS\Impexp\Import
Definition: Import.php:50
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\loadXmlSucceeds
‪loadXmlSucceeds()
Definition: ImportTest.php:247
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\renderPreviewForImportOfPageAndRecordsWithSoftRefs
‪renderPreviewForImportOfPageAndRecordsWithSoftRefs()
Definition: ImportTest.php:173
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\importDataCleansUpTemporaryFolder
‪importDataCleansUpTemporaryFolder()
Definition: ImportTest.php:308
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\loadT3dCompressedSucceeds
‪loadT3dCompressedSucceeds()
Definition: ImportTest.php:290
‪TYPO3\CMS\Impexp\Tests\Functional\AbstractImportExportTestCase
Definition: AbstractImportExportTestCase.php:33
‪TYPO3\CMS\Core\Core\Environment
Definition: Environment.php:41
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\loadT3dSucceeds
‪loadT3dSucceeds()
Definition: ImportTest.php:261
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\loadingFileFromWithinTypo3BaseFolderSucceedsProvider
‪static loadingFileFromWithinTypo3BaseFolderSucceedsProvider()
Definition: ImportTest.php:28
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\loadingFileFails
‪loadingFileFails(string $filePath)
Definition: ImportTest.php:67
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\loadingFileFromWithinTypo3BaseFolderSucceeds
‪loadingFileFromWithinTypo3BaseFolderSucceeds(string $filePath)
Definition: ImportTest.php:42
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest
Definition: ImportTest.php:23