‪TYPO3CMS  ‪main
ActionControllerTest.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 
20 use PHPUnit\Framework\Attributes\Test;
26 use TYPO3\CMS\Extensionmanager\Service\ExtensionManagementService;
28 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
29 
30 final class ‪ActionControllerTest extends UnitTestCase
31 {
36  protected function ‪createFakeExtension(): array
37  {
38  $testRoot = ‪Environment::getVarPath() . '/tests';
39  $this->testFilesToDelete[] = $testRoot;
40  $extKey = strtolower(‪StringUtility::getUniqueId('testing'));
41  $absExtPath = $testRoot . '/ext-' . $extKey . '/';
42  ‪GeneralUtility::mkdir_deep($absExtPath);
43  return [
44  'extensionKey' => $extKey,
45  'version' => '0.0.0',
46  'packagePath' => $absExtPath,
47  ];
48  }
49 
53  #[Test]
55  {
56  // 42 second of first day in 1970 - used to have achieve stable file names
57  ‪$GLOBALS['EXEC_TIME'] = 42;
58 
59  // Create extension for testing:
60  $fakeExtension = $this->‪createFakeExtension();
61  $extKey = $fakeExtension['extensionKey'];
62  $extensionRoot = $fakeExtension['packagePath'];
63  $installUtility = $this->createMock(InstallUtility::class);
64  $installUtility->method('enrichExtensionWithDetails')->with($extKey)->willReturn($fakeExtension);
65  // Build mocked fileHandlingUtility:
66  $subject = $this->getAccessibleMock(
67  ActionController::class,
68  null,
69  [
70  $installUtility,
71  $this->createMock(ExtensionManagementService::class),
72  $this->createMock(PackageActivationService::class),
73  ]
74  );
75 
76  // Add files and directories to extension:
77  touch($extensionRoot . 'emptyFile.txt');
78  file_put_contents($extensionRoot . 'notEmptyFile.txt', 'content');
79  touch($extensionRoot . '.hiddenFile');
80  mkdir($extensionRoot . 'emptyDir');
81  mkdir($extensionRoot . 'notEmptyDir');
82  touch($extensionRoot . 'notEmptyDir/file.txt');
83 
84  // Create zip-file from extension
85  $filename = $subject->_call('createZipFileFromExtension', $extKey);
86 
87  $expectedFilename = ‪Environment::getVarPath() . '/transient/' . $extKey . '_0.0.0_' . date('YmdHi', 42) . '.zip';
88  $this->testFilesToDelete[] = $filename;
89  self::assertEquals($expectedFilename, $filename, 'Archive file name differs from expectation');
90 
91  // File was created
92  self::assertFileExists($filename, 'Zip file not created');
93 
94  // Read archive and check its contents
95  $archive = new \ZipArchive();
96  self::assertTrue($archive->open($filename), 'Unable to open archive');
97  self::assertEquals(0, $archive->statName('emptyFile.txt')['size'], 'Empty file not in archive');
98  self::assertEquals('content', $archive->getFromName('notEmptyFile.txt'), 'Expected content not found');
99  self::assertFalse($archive->statName('.hiddenFile'), 'Hidden file not in archive');
100  self::assertIsArray($archive->statName('emptyDir/'), 'Empty directory not in archive');
101  self::assertIsArray($archive->statName('notEmptyDir/'), 'Not empty directory not in archive');
102  self::assertIsArray($archive->statName('notEmptyDir/file.txt'), 'File within directory not in archive');
103 
104  // Check that the archive has no additional content
105  self::assertEquals(5, $archive->numFiles, 'Too many or too less files in archive');
106  }
107 }
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Controller
Definition: ActionControllerTest.php:18
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Controller\ActionControllerTest\createFakeExtension
‪createFakeExtension()
Definition: ActionControllerTest.php:36
‪TYPO3\CMS\Core\Utility\GeneralUtility\mkdir_deep
‪static mkdir_deep(string $directory)
Definition: GeneralUtility.php:1654
‪TYPO3\CMS\Core\Core\Environment\getVarPath
‪static getVarPath()
Definition: Environment.php:197
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility
Definition: InstallUtility.php:40
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Controller\ActionControllerTest
Definition: ActionControllerTest.php:31
‪TYPO3\CMS\Core\Package\PackageActivationService
Definition: PackageActivationService.php:41
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Core\Environment
Definition: Environment.php:41
‪TYPO3\CMS\Extbase\Mvc\Controller\ActionController
Definition: ActionController.php:63
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\Utility\StringUtility
Definition: StringUtility.php:24
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Controller\ActionControllerTest\createZipFileFromExtensionGeneratesCorrectArchive
‪createZipFileFromExtensionGeneratesCorrectArchive()
Definition: ActionControllerTest.php:54
‪TYPO3\CMS\Core\Utility\StringUtility\getUniqueId
‪static getUniqueId(string $prefix='')
Definition: StringUtility.php:57