‪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 
18 use PHPUnit\Framework\Attributes\DataProvider;
19 use PHPUnit\Framework\Attributes\Test;
23 
25 {
26  protected array ‪$pathsToLinkInTestInstance = [
27  'typo3/sysext/impexp/Tests/Functional/Fixtures/XmlImports' => 'fileadmin/xml_imports',
28  ];
29 
31  {
32  return [
33  'relative path to fileadmin' => ['fileadmin/xml_imports/sys_news.xml'],
34  'relative path to system extensions' => ['typo3/sysext/impexp/Tests/Functional/Fixtures/XmlImports/sys_news.xml'],
35  'absolute path to system extensions' => ['%EnvironmentPublicPath%/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlImports/sys_news.xml'],
36  'extension path' => ['EXT:impexp/Tests/Functional/Fixtures/XmlImports/sys_news.xml'],
37  ];
38  }
39 
40  #[DataProvider('loadingFileFromWithinTypo3BaseFolderSucceedsProvider')]
41  #[Test]
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 
63  #[DataProvider('loadingFileFailsProvider')]
64  #[Test]
65  public function ‪loadingFileFails(string $filePath): void
66  {
67  $this->expectException(LoadingFileFailedException::class);
68 
69  $importMock = $this->getAccessibleMock(Import::class, ['loadInit']);
70  $importMock->expects(self::never())->method('loadInit');
71  $importMock->loadFile($filePath);
72  self::assertEmpty($importMock->_get('dat'));
73  }
74 
75  #[Test]
77  {
78  $renderPreviewImport = include __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecords.php';
79 
80  $importMock = $this->getAccessibleMock(Import::class, null);
81  $importMock->setPid(0);
82  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent.xml');
83  $previewData = $importMock->renderPreview();
84  // file_put_contents(
85  // __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecords.php',
86  // str_replace(
87  // ['array (', '),', ');'],
88  // ['[', '],', '];'],
89  // '<?php' . "\n\nreturn " . var_export($previewData, true) . ";\n")
90  // );
91  self::assertEquals($renderPreviewImport, $previewData);
92  }
93 
94  #[Test]
96  {
97  $renderPreviewImport = include __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdate.php';
98 
99  $importMock = $this->getAccessibleMock(Import::class, null);
100  $importMock->setPid(0);
101  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent.xml');
102  $importMock->importData();
103  $importMock->setUpdate(true);
104  $previewData = $importMock->renderPreview();
105  // file_put_contents(
106  // __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdate.php',
107  // str_replace(
108  // ['array (', '),', ');'],
109  // ['[', '],', '];'],
110  // '<?php' . "\n\nreturn " . var_export($previewData, true) . ";\n")
111  // );
112  self::assertEquals($renderPreviewImport, $previewData);
113  }
114 
115  #[Test]
117  {
118  $renderPreviewImport = include __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithDiff.php';
119 
120  $importMock = $this->getAccessibleMock(Import::class, null);
121  $importMock->setPid(0);
122  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent.xml');
123  $importMock->importData();
124  $importMock->setShowDiff(true);
125  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent-with-two-images.xml');
126  $previewData = $importMock->renderPreview();
127  // file_put_contents(
128  // __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithDiff.php',
129  // str_replace(
130  // ['array (', '),', ');'],
131  // ['[', '],', '];'],
132  // '<?php' . "\n\nreturn " . var_export($previewData, true) . ";\n")
133  // );
134  self::assertEquals($renderPreviewImport, $previewData);
135  }
136 
137  #[Test]
139  {
140  $renderPreviewImport = include __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdateWithDiff.php';
141 
142  $importMock = $this->getAccessibleMock(Import::class, null);
143  $importMock->setPid(0);
144  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent.xml');
145  $importMock->importData();
146  $importMock->setShowDiff(true);
147  $importMock->setUpdate(true);
148  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent-with-two-images.xml');
149  $previewData = $importMock->renderPreview();
150  // file_put_contents(
151  // __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdateWithDiff.php',
152  // str_replace(
153  // ['array (', '),', ');'],
154  // ['[', '],', '];'],
155  // '<?php' . "\n\nreturn " . var_export($previewData, true) . ";\n")
156  // );
157  self::assertEquals($renderPreviewImport, $previewData);
158  }
159 
160  #[Test]
162  {
163  $renderPreviewImport = include __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithSoftRefs.php';
164 
165  $importMock = $this->getAccessibleMock(Import::class, null);
166  $importMock->setPid(0);
167  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlImports/pages-and-ttcontent-with-softrefs.xml');
168  $previewData = $importMock->renderPreview();
169  // file_put_contents(
170  // __DIR__ . '/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithSoftRefs.php',
171  // str_replace(
172  // ['array (', '),', ');'],
173  // ['[', '],', '];'],
174  // '<?php' . "\n\nreturn " . var_export($previewData, true) . ";\n")
175  // );
176  self::assertEquals($renderPreviewImport, $previewData);
177  }
178 
179  public static function ‪addFilesSucceedsDataProvider(): array
180  {
181  return [
182  ['dat' => [
183  'header' => [
184  'files' => [
185  '123456789' => [
186  'filename' => 'filename.jpg',
187  'relFileName' => 'filename.jpg',
188  ],
189  ],
190  ],
191  ], 'relations' => [
192  '123456789',
193  ], 'tokenID' => '987654321'
194  , 'expected' => [
195  [
196  'ref' => 'FILE',
197  'type' => 'file',
198  'msg' => '',
199  '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">
200 ' . "\t" . '<span class="icon-markup">
201 <img src="typo3/sysext/impexp/Resources/Public/Icons/status-reference-hard.png" width="16" height="16" alt="" />
202 ' . "\t" . '</span>' . "\n\t\n" . '</span>',
203  'title' => 'filename.jpg',
204  'showDiffContent' => '',
205  ],
206  ], ],
207  ];
208  }
209 
213  #[DataProvider('addFilesSucceedsDataProvider')]
214  #[Test]
215  public function ‪addFilesSucceeds(array $dat, array $relations, string $tokenID, array $expected): void
216  {
217  $importMock = $this->getAccessibleMock(
218  Import::class,
219  ['addError'],
220  [],
221  '',
222  true
223  );
224 
225  $lines = [];
226  $importMock->_set('dat', $dat);
227  $importMock->addFiles($relations, $lines, 0, $tokenID);
228  self::assertEquals($expected, $lines);
229  }
230 
231  #[Test]
232  public function ‪loadXmlSucceeds(): void
233  {
234  $importMock = $this->getAccessibleMock(Import::class, null);
235  $importMock->setPid(0);
236  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/XmlExports/empty.xml');
237  self::assertTrue(true);
238  }
239 
240  #[Test]
241  public function ‪loadT3dSucceeds(): void
242  {
243  $importMock = $this->getAccessibleMock(Import::class, null);
244  $importMock->setPid(0);
245  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/T3dExports/empty.t3d');
246  self::assertTrue(true);
247  }
248 
249  #[Test]
250  public function ‪loadT3dFails(): void
251  {
252  $this->expectException(LoadingFileFailedException::class);
253 
254  $importMock = $this->getAccessibleMock(Import::class, null);
255  $importMock->setPid(0);
256  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/T3dExports/empty-with-wrong-checksum.t3d');
257  }
258 
259  #[Test]
260  public function ‪loadT3dCompressedSucceeds(): void
261  {
262  if (!function_exists('gzuncompress')) {
263  self::markTestSkipped('The function gzuncompress() is not available for decompression.');
264  }
265 
266  $importMock = $this->getAccessibleMock(Import::class, null);
267  $importMock->setPid(0);
268  $importMock->loadFile('EXT:impexp/Tests/Functional/Fixtures/T3dExports/empty-z.t3d');
269  self::assertTrue(true);
270  }
271 }
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\addFilesSucceedsDataProvider
‪static addFilesSucceedsDataProvider()
Definition: ImportTest.php:179
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\renderPreviewForImportOfPageAndRecordsWithDiffView
‪renderPreviewForImportOfPageAndRecordsWithDiffView()
Definition: ImportTest.php:116
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\$pathsToLinkInTestInstance
‪array $pathsToLinkInTestInstance
Definition: ImportTest.php:26
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\renderPreviewForImportOfPageAndRecords
‪renderPreviewForImportOfPageAndRecords()
Definition: ImportTest.php:76
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\loadT3dFails
‪loadT3dFails()
Definition: ImportTest.php:250
‪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:27
‪TYPO3\CMS\Impexp\Tests\Functional
Definition: AbstractImportExportTestCase.php:18
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\renderPreviewForImportOfPageAndRecordsByUpdateWithDiffView
‪renderPreviewForImportOfPageAndRecordsByUpdateWithDiffView()
Definition: ImportTest.php:138
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\addFilesSucceeds
‪addFilesSucceeds(array $dat, array $relations, string $tokenID, array $expected)
Definition: ImportTest.php:215
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\renderPreviewForImportOfPageAndRecordsByUpdate
‪renderPreviewForImportOfPageAndRecordsByUpdate()
Definition: ImportTest.php:95
‪TYPO3\CMS\Impexp\Import
Definition: Import.php:51
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\loadXmlSucceeds
‪loadXmlSucceeds()
Definition: ImportTest.php:232
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\renderPreviewForImportOfPageAndRecordsWithSoftRefs
‪renderPreviewForImportOfPageAndRecordsWithSoftRefs()
Definition: ImportTest.php:161
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\loadT3dCompressedSucceeds
‪loadT3dCompressedSucceeds()
Definition: ImportTest.php:260
‪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:241
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\loadingFileFromWithinTypo3BaseFolderSucceedsProvider
‪static loadingFileFromWithinTypo3BaseFolderSucceedsProvider()
Definition: ImportTest.php:30
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\loadingFileFails
‪loadingFileFails(string $filePath)
Definition: ImportTest.php:65
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest\loadingFileFromWithinTypo3BaseFolderSucceeds
‪loadingFileFromWithinTypo3BaseFolderSucceeds(string $filePath)
Definition: ImportTest.php:42
‪TYPO3\CMS\Impexp\Tests\Functional\ImportTest
Definition: ImportTest.php:25