‪TYPO3CMS  ‪main
PackageTest.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\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
26 use TYPO3\CMS\Core\Package\PackageManager;
28 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
29 
33 final class ‪PackageTest extends UnitTestCase
34 {
35  protected string ‪$testRoot;
36 
37  protected function ‪setUp(): void
38  {
39  parent::setUp();
40  $this->testRoot = ‪Environment::getVarPath() . '/tests/Packages/';
41  ‪GeneralUtility::mkdir_deep($this->testRoot);
42  $this->testFilesToDelete[] = ‪$this->testRoot;
43  }
44 
45  #[Test]
47  {
48  $this->expectException(InvalidPackagePathException::class);
49  $this->expectExceptionCode(1166631890);
50 
51  $packageManagerMock = $this->createMock(PackageManager::class);
52  $packageManagerMock->method('isPackageKeyValid')->willReturn(true);
53  new ‪Package($packageManagerMock, 'Vendor.TestPackage', './ThisPackageSurelyDoesNotExist');
54  }
55 
56  public static function ‪validPackageKeys(): array
57  {
58  return [
59  ['Doctrine.DBAL'],
60  ['TYPO3.CMS'],
61  ['My.Own.TwitterPackage'],
62  ['GoFor.IT'],
63  ['Symfony.Symfony'],
64  ];
65  }
66 
67  #[DataProvider('validPackageKeys')]
68  #[Test]
69  public function ‪constructAcceptsValidPackageKeys($packageKey): void
70  {
71  $packagePath = $this->testRoot . str_replace('\\', '/', $packageKey) . '/';
72  mkdir($packagePath, 0777, true);
73  file_put_contents($packagePath . 'composer.json', '{"name": "' . $packageKey . '", "type": "flow-test"}');
74  file_put_contents($packagePath . 'ext_emconf.php', '');
75 
76  $packageManagerMock = $this->createMock(PackageManager::class);
77  $packageManagerMock->method('isPackageKeyValid')->willReturn(true);
78  $package = new ‪Package($packageManagerMock, $packageKey, $packagePath);
79  self::assertEquals($packageKey, $package->getPackageKey());
80  }
81 
82  public static function ‪invalidPackageKeys(): array
83  {
84  return [
85  ['TYPO3..Flow'],
86  ['RobertLemke.Flow. Twitter'],
87  ['Schalke*4'],
88  ];
89  }
90 
91  #[DataProvider('invalidPackageKeys')]
92  #[Test]
93  public function ‪constructRejectsInvalidPackageKeys($packageKey): void
94  {
95  $this->expectException(InvalidPackageKeyException::class);
96  $this->expectExceptionCode(1217959511);
97 
98  $packagePath = $this->testRoot . str_replace('\\', '/', $packageKey) . '/';
99  mkdir($packagePath, 0777, true);
100 
101  $packageManagerMock = $this->createMock(PackageManager::class);
102  new ‪Package($packageManagerMock, $packageKey, $packagePath);
103  }
104 
105  #[Test]
106  public function ‪aPackageCanBeFlaggedAsProtected(): void
107  {
108  $packagePath = $this->testRoot . 'Application/Vendor/Dummy/';
109  mkdir($packagePath, 0700, true);
110  file_put_contents($packagePath . 'composer.json', '{"name": "vendor/dummy", "type": "flow-test"}');
111  file_put_contents($packagePath . 'ext_emconf.php', '');
112 
113  $packageManagerMock = $this->createMock(PackageManager::class);
114  $packageManagerMock->method('isPackageKeyValid')->willReturn(true);
115  $package = new ‪Package($packageManagerMock, 'Vendor.Dummy', $packagePath);
116 
117  self::assertFalse($package->isProtected());
118  $package->setProtected(true);
119  self::assertTrue($package->isProtected());
120  }
121 }
‪TYPO3\CMS\Core\Tests\Unit\Package\PackageTest\setUp
‪setUp()
Definition: PackageTest.php:37
‪TYPO3\CMS\Core\Package\Exception\InvalidPackagePathException
Definition: InvalidPackagePathException.php:23
‪TYPO3\CMS\Core\Tests\Unit\Package\PackageTest\invalidPackageKeys
‪static invalidPackageKeys()
Definition: PackageTest.php:82
‪TYPO3\CMS\Core\Tests\Unit\Package\PackageTest\constructThrowsPackageDoesNotExistException
‪constructThrowsPackageDoesNotExistException()
Definition: PackageTest.php:46
‪TYPO3\CMS\Core\Package\Exception\InvalidPackageKeyException
Definition: InvalidPackageKeyException.php:23
‪TYPO3\CMS\Core\Tests\Unit\Package\PackageTest\$testRoot
‪string $testRoot
Definition: PackageTest.php:35
‪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\Core\Tests\Unit\Package\PackageTest
Definition: PackageTest.php:34
‪TYPO3\CMS\Core\Tests\Unit\Package\PackageTest\constructRejectsInvalidPackageKeys
‪constructRejectsInvalidPackageKeys($packageKey)
Definition: PackageTest.php:93
‪TYPO3\CMS\Core\Tests\Unit\Package
Definition: AbstractServiceProviderTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\Package\PackageTest\constructAcceptsValidPackageKeys
‪constructAcceptsValidPackageKeys($packageKey)
Definition: PackageTest.php:69
‪TYPO3\CMS\Core\Package\Package
Definition: Package.php:30
‪TYPO3\CMS\Core\Tests\Unit\Package\PackageTest\validPackageKeys
‪static validPackageKeys()
Definition: PackageTest.php:56
‪TYPO3\CMS\Core\Core\Environment
Definition: Environment.php:41
‪TYPO3\CMS\Core\Tests\Unit\Package\PackageTest\aPackageCanBeFlaggedAsProtected
‪aPackageCanBeFlaggedAsProtected()
Definition: PackageTest.php:106
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52