‪TYPO3CMS  ‪main
PackageInitializationEventTest.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;
21 use Psr\EventDispatcher\EventDispatcherInterface;
22 use Symfony\Component\DependencyInjection\Container;
31 use TYPO3\CMS\Core\Package\PackageManager;
32 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
33 
34 final class ‪PackageInitializationEventTest extends FunctionalTestCase
35 {
36  protected array ‪$testExtensionsToLoad = [
37  'typo3/sysext/core/Tests/Functional/Fixtures/Extensions/test_package_initialization',
38  ];
39 
40  #[Test]
41  public function ‪gettersReturnInitializedObjects(): void
42  {
43  $extensionKey = 'my_ext';
44  $package = $this->createMock(Package::class);
45  $container = new Container();
46  $emitter = $this;
47 
48  $event = new ‪PackageInitializationEvent(
49  extensionKey: $extensionKey,
50  package: $package,
51  container: $container,
52  emitter: $emitter
53  );
54 
55  self::assertSame($extensionKey, $event->getExtensionKey());
56  self::assertSame($package, $event->getPackage());
57  self::assertSame($container, $event->getContainer());
58  self::assertSame($emitter, $event->getEmitter());
59  self::assertFalse($event->hasStorageEntry(__CLASS__));
60 
61  $this->expectException(InvalidPackageInitializationResultIdentifierException::class);
62  $this->expectExceptionCode(1706203511);
63 
64  $event->getStorageEntry(__CLASS__);
65  }
66 
67  #[Test]
68  public function ‪setterOverwritesResult(): void
69  {
70  $extensionKey = 'my_ext';
71  $package = $this->createMock(Package::class);
72  $container = new Container();
73  $emitter = $this;
74 
75  $event = new ‪PackageInitializationEvent(
76  extensionKey: $extensionKey,
77  package: $package,
78  container: $container,
79  emitter: $emitter
80  );
81 
82  self::assertSame($extensionKey, $event->getExtensionKey());
83  self::assertSame($package, $event->getPackage());
84  self::assertSame($container, $event->getContainer());
85  self::assertSame($emitter, $event->getEmitter());
86 
87  self::assertFalse($event->hasStorageEntry(__CLASS__));
88 
89  $resultData = ['foo' , 'bar'];
90  $event->addStorageEntry(__CLASS__, $resultData);
91 
92  self::assertTrue($event->hasStorageEntry(__CLASS__));
93  self::assertSame(__CLASS__, $event->getStorageEntry(__CLASS__)->getIdentifier());
94  self::assertSame($resultData, $event->getStorageEntry(__CLASS__)->getResult());
95 
96  $event->removeStorageEntry(__CLASS__);
97  self::assertFalse($event->hasStorageEntry(__CLASS__));
98  }
99 
100  #[Test]
101  public function ‪coreListenersAddStorageEntries(): void
102  {
104  $event = $this->getContainer()->get(EventDispatcherInterface::class)->dispatch(
106  'test_package_initialization',
107  $this->getContainer()->get(PackageManager::class)->getPackage('test_package_initialization'),
108  )
109  );
110 
111  self::assertTrue($event->hasStorageEntry(ImportExtensionDataOnPackageInitialization::class));
112  self::assertStringEndsWith(
113  '/fileadmin/test_package_initialization',
114  $event->getStorageEntry(ImportExtensionDataOnPackageInitialization::class)->getResult()
115  );
116 
117  self::assertTrue($event->hasStorageEntry(ImportStaticSqlDataOnPackageInitialization::class));
118  self::assertStringEndsWith(
119  '/typo3conf/ext/test_package_initialization/ext_tables_static+adt.sql',
120  $event->getStorageEntry(ImportStaticSqlDataOnPackageInitialization::class)->getResult()
121  );
122 
123  self::assertTrue($event->hasStorageEntry(CheckForImportRequirements::class));
124  $importRequirementsResult = $event->getStorageEntry(CheckForImportRequirements::class)->getResult();
125  self::assertCount(1, $importRequirementsResult['importFiles']);
126  self::assertStringEndsWith('data.xml', reset($importRequirementsResult['importFiles']));
127  self::assertTrue($importRequirementsResult['siteInitialisationDirectoryExists']);
128  }
129 
130  #[Test]
131  public function ‪customListenersAreCalled(): void
132  {
133  $packageInitializationEvent = null;
134  $listenerResult = ['foo' => 'bar'];
135 
137  $container = $this->get('service_container');
138  $container->set(
139  'package-initialization-listener',
140  static function (‪PackageInitializationEvent $event) use (&$packageInitializationEvent, $listenerResult) {
141  $packageInitializationEvent = $event;
142  $event->‪addStorageEntry('package-initialization-listener', $listenerResult);
143  }
144  );
145 
146  $listenerProdiver = $container->get(ListenerProvider::class);
147  $listenerProdiver->addListener(PackageInitializationEvent::class, 'package-initialization-listener');
148 
150  $packageActivationService = $container->get(PackageActivationService::class);
151  $packageActivationService->reloadExtensionData(['test_package_initialization']);
152 
153  self::assertInstanceOf(PackageInitializationEvent::class, $packageInitializationEvent);
154  self::assertSame($listenerResult, $packageInitializationEvent->getStorageEntry('package-initialization-listener')->getResult());
155  }
156 }
‪TYPO3\CMS\Core\Tests\Functional\Package\Event
Definition: PackageInitializationEventTest.php:18
‪TYPO3\CMS\Core\Tests\Functional\Package\Event\PackageInitializationEventTest\coreListenersAddStorageEntries
‪coreListenersAddStorageEntries()
Definition: PackageInitializationEventTest.php:101
‪TYPO3\CMS\Core\Package\Initialization\ImportExtensionDataOnPackageInitialization
Definition: ImportExtensionDataOnPackageInitialization.php:30
‪TYPO3\CMS\Core\Tests\Functional\Package\Event\PackageInitializationEventTest\customListenersAreCalled
‪customListenersAreCalled()
Definition: PackageInitializationEventTest.php:131
‪TYPO3\CMS\Core\Package\Initialization\ImportStaticSqlDataOnPackageInitialization
Definition: ImportStaticSqlDataOnPackageInitialization.php:31
‪TYPO3\CMS\Core\Tests\Functional\Package\Event\PackageInitializationEventTest\$testExtensionsToLoad
‪array $testExtensionsToLoad
Definition: PackageInitializationEventTest.php:36
‪TYPO3\CMS\Core\Package\Event\PackageInitializationEvent
Definition: PackageInitializationEvent.php:30
‪TYPO3\CMS\Core\Tests\Functional\Package\Event\PackageInitializationEventTest\setterOverwritesResult
‪setterOverwritesResult()
Definition: PackageInitializationEventTest.php:68
‪TYPO3\CMS\Core\Tests\Functional\Package\Event\PackageInitializationEventTest
Definition: PackageInitializationEventTest.php:35
‪TYPO3\CMS\Core\Package\Initialization\CheckForImportRequirements
Definition: CheckForImportRequirements.php:33
‪TYPO3\CMS\Core\Package\Package
Definition: Package.php:30
‪TYPO3\CMS\Core\Package\PackageActivationService
Definition: PackageActivationService.php:41
‪TYPO3\CMS\Core\Package\Exception\InvalidPackageInitializationResultIdentifierException
Definition: InvalidPackageInitializationResultIdentifierException.php:25
‪TYPO3\CMS\Core\Package\Event\PackageInitializationEvent\addStorageEntry
‪addStorageEntry(string $identifier, mixed $data)
Definition: PackageInitializationEvent.php:76
‪TYPO3\CMS\Core\EventDispatcher\ListenerProvider
Definition: ListenerProvider.php:30
‪TYPO3\CMS\Core\Tests\Functional\Package\Event\PackageInitializationEventTest\gettersReturnInitializedObjects
‪gettersReturnInitializedObjects()
Definition: PackageInitializationEventTest.php:41