‪TYPO3CMS  11.5
ExtensionStatusTest.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 Prophecy\Argument;
21 use Prophecy\PhpUnit\ProphecyTrait;
22 use Psr\EventDispatcher\EventDispatcherInterface;
33 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
34 
38 class ‪ExtensionStatusTest extends UnitTestCase
39 {
40  use ProphecyTrait;
41 
45  protected function ‪setUp(): void
46  {
47  parent::setUp();
48  $this->resetSingletonInstances = true;
49  }
50 
55  {
56  $reportMock = $this->createMock(ExtensionStatus::class);
57  self::assertInstanceOf(StatusProviderInterface::class, $reportMock);
58  }
59 
63  public function ‪getStatusReturnsArray(): void
64  {
65  $report = $this->getMockBuilder(ExtensionStatus::class)
66  ->onlyMethods(['getSecurityStatusOfExtensions', 'getMainRepositoryStatus'])
67  ->disableOriginalConstructor()
68  ->getMock();
69  self::assertIsArray($report->getStatus());
70  }
71 
75  public function ‪getStatusReturnArrayContainsFiveEntries(): void
76  {
77  $report = $this->getMockBuilder(ExtensionStatus::class)
78  ->onlyMethods(['getSecurityStatusOfExtensions', 'getMainRepositoryStatus'])
79  ->disableOriginalConstructor()
80  ->getMock();
81  self::assertCount(5, $report->getStatus());
82  }
83 
88  {
89  $statusObject = $this->getMockBuilder(Status::class)
90  ->setConstructorArgs(['title', 'value'])
91  ->getMock();
92  $report = $this->getMockBuilder(ExtensionStatus::class)
93  ->onlyMethods(['getSecurityStatusOfExtensions', 'getMainRepositoryStatus'])
94  ->disableOriginalConstructor()
95  ->getMock();
96  $report->method('getMainRepositoryStatus')->willReturn($statusObject);
97 
98  foreach ($report->getStatus() as $status) {
99  if ($status) {
100  self::assertInstanceOf(Status::class, $status);
101  }
102  }
103  }
104 
109  {
110  $languageServiceFactoryProphecy = $this->prophesize(LanguageServiceFactory::class);
111  $languageServiceFactoryProphecy->createFromUserPreferences(Argument::cetera())->willReturn($this->prophesize(LanguageService::class)->reveal());
112  GeneralUtility::addInstance(LanguageServiceFactory::class, $languageServiceFactoryProphecy->reveal());
113 
114  $remoteRegistryProphecy = $this->‪setUpRegistryStatusTests();
115  $subject = new ‪ExtensionStatus($remoteRegistryProphecy->reveal());
116  $subject->getStatus();
117 
118  $remoteRegistryProphecy->hasDefaultRemote()->shouldHaveBeenCalled();
119  }
120 
125  {
126  $languageServiceFactoryProphecy = $this->prophesize(LanguageServiceFactory::class);
127  $languageServiceFactoryProphecy->createFromUserPreferences(Argument::cetera())->willReturn($this->prophesize(LanguageService::class)->reveal());
128  GeneralUtility::addInstance(LanguageServiceFactory::class, $languageServiceFactoryProphecy->reveal());
129 
130  $remoteRegistryProphecy = $this->‪setUpRegistryStatusTests(0, true, false);
131  $subject = new ‪ExtensionStatus($remoteRegistryProphecy->reveal());
132  $status = $subject->getStatus();
133  $statusObject = $status['mainRepositoryStatus'];
134  self::assertInstanceOf(Status::class, $statusObject);
135  self::assertEquals(‪Status::ERROR, $statusObject->getSeverity());
136  }
137 
142  {
143  $remoteRegistryProphecy = $this->‪setUpRegistryStatusTests();
144  $remote = new class () extends ‪TerExtensionRemote {
145  public function __construct() {}
146 
147  public function getLastUpdate(): \DateTimeInterface
148  {
149  return new \DateTimeImmutable('-14days');
150  }
151 
152  protected function isDownloadedExtensionListUpToDate(): bool
153  {
154  return true;
155  }
156  };
157 
158  $languageServiceFactoryProphecy = $this->prophesize(LanguageServiceFactory::class);
159  $languageServiceFactoryProphecy->createFromUserPreferences(Argument::cetera())->willReturn($this->prophesize(LanguageService::class)->reveal());
160  GeneralUtility::addInstance(LanguageServiceFactory::class, $languageServiceFactoryProphecy->reveal());
161 
162  $remoteRegistryProphecy->getDefaultRemote()->willReturn($remote);
163  $subject = new ‪ExtensionStatus($remoteRegistryProphecy->reveal());
164  $status = $subject->getStatus();
165  $statusObject = $status['mainRepositoryStatus'];
166  self::assertInstanceOf(Status::class, $statusObject);
167  self::assertEquals(‪Status::NOTICE, $statusObject->getSeverity());
168  }
169 
174  {
175  $languageServiceFactoryProphecy = $this->prophesize(LanguageServiceFactory::class);
176  $languageServiceFactoryProphecy->createFromUserPreferences(Argument::cetera())->willReturn($this->prophesize(LanguageService::class)->reveal());
177  GeneralUtility::addInstance(LanguageServiceFactory::class, $languageServiceFactoryProphecy->reveal());
178 
179  $remoteRegistryProphecy = $this->‪setUpRegistryStatusTests();
180  $subject = new ‪ExtensionStatus($remoteRegistryProphecy->reveal());
181  $status = $subject->getStatus();
182  $statusObject = $status['mainRepositoryStatus'];
183  self::assertInstanceOf(Status::class, $statusObject);
184  self::assertEquals(‪Status::OK, $statusObject->getSeverity());
185  }
186 
191  {
192  $languageServiceProphecy = $this->prophesize(LanguageService::class);
193  $languageServiceProphecy->includeLLFile(Argument::any())->willReturn('');
194  $languageServiceProphecy->getLL(Argument::any())->willReturn('');
195  $languageServiceProphecy->getLLL(Argument::any())->willReturn('');
196  $languageServiceFactoryProphecy = $this->prophesize(LanguageServiceFactory::class);
197  $languageServiceFactoryProphecy->createFromUserPreferences(Argument::cetera())->willReturn($languageServiceProphecy->reveal());
198  GeneralUtility::addInstance(LanguageServiceFactory::class, $languageServiceFactoryProphecy->reveal());
199 
200  $remoteRegistryProphecy = $this->‪setUpRegistryStatusTests(-1);
201  $subject = new ‪ExtensionStatus($remoteRegistryProphecy->reveal());
202  $status = $subject->getStatus();
203  $statusObject = $status['extensionsSecurityStatusInstalled'];
204  self::assertInstanceOf(Status::class, $statusObject);
205  self::assertEquals(‪Status::ERROR, $statusObject->getSeverity());
206  }
207 
212  {
213  $languageServiceProphecy = $this->prophesize(LanguageService::class);
214  $languageServiceProphecy->includeLLFile(Argument::any())->willReturn('');
215  $languageServiceProphecy->getLL(Argument::any())->willReturn('');
216  $languageServiceProphecy->getLLL(Argument::any())->willReturn('');
217  $languageServiceFactoryProphecy = $this->prophesize(LanguageServiceFactory::class);
218  $languageServiceFactoryProphecy->createFromUserPreferences(Argument::cetera())->willReturn($languageServiceProphecy->reveal());
219  GeneralUtility::addInstance(LanguageServiceFactory::class, $languageServiceFactoryProphecy->reveal());
220 
221  $remoteRegistryProphecy = $this->‪setUpRegistryStatusTests(0, false);
222  $subject = new ‪ExtensionStatus($remoteRegistryProphecy->reveal());
223  $status = $subject->getStatus();
224  foreach ($status as $statusObject) {
225  self::assertInstanceOf(Status::class, $statusObject);
226  self::assertEquals(‪Status::OK, $statusObject->getSeverity());
227  }
228  }
229 
234  {
235  $languageServiceProphecy = $this->prophesize(LanguageService::class);
236  $languageServiceProphecy->includeLLFile(Argument::any())->willReturn('');
237  $languageServiceProphecy->getLL(Argument::any())->willReturn('');
238  $languageServiceProphecy->getLLL(Argument::any())->willReturn('');
239  $languageServiceFactoryProphecy = $this->prophesize(LanguageServiceFactory::class);
240  $languageServiceFactoryProphecy->createFromUserPreferences(Argument::cetera())->willReturn($languageServiceProphecy->reveal());
241  GeneralUtility::addInstance(LanguageServiceFactory::class, $languageServiceFactoryProphecy->reveal());
242 
243  $remoteRegistryProphecy = $this->‪setUpRegistryStatusTests(-1, false);
244  $subject = new ‪ExtensionStatus($remoteRegistryProphecy->reveal());
245  $status = $subject->getStatus();
246  $statusObject = $status['extensionsSecurityStatusNotInstalled'];
247  self::assertInstanceOf(Status::class, $statusObject);
248  self::assertEquals(‪Status::WARNING, $statusObject->getSeverity());
249  }
250 
255  {
256  $languageServiceProphecy = $this->prophesize(LanguageService::class);
257  $languageServiceProphecy->includeLLFile(Argument::any())->willReturn('');
258  $languageServiceProphecy->getLL(Argument::any())->willReturn('');
259  $languageServiceProphecy->getLLL(Argument::any())->willReturn('');
260  $languageServiceFactoryProphecy = $this->prophesize(LanguageServiceFactory::class);
261  $languageServiceFactoryProphecy->createFromUserPreferences(Argument::cetera())->willReturn($languageServiceProphecy->reveal());
262  GeneralUtility::addInstance(LanguageServiceFactory::class, $languageServiceFactoryProphecy->reveal());
263 
264  $remoteRegistryProphecy = $this->‪setUpRegistryStatusTests(-2, true);
265  $subject = new ‪ExtensionStatus($remoteRegistryProphecy->reveal());
266  $status = $subject->getStatus();
267  $statusObject = $status['extensionsOutdatedStatusInstalled'];
268  self::assertInstanceOf(Status::class, $statusObject);
269  self::assertEquals(‪Status::WARNING, $statusObject->getSeverity());
270  }
271 
276  {
277  $languageServiceProphecy = $this->prophesize(LanguageService::class);
278  $languageServiceProphecy->includeLLFile(Argument::any())->willReturn('');
279  $languageServiceProphecy->getLL(Argument::any())->willReturn('');
280  $languageServiceProphecy->getLLL(Argument::any())->willReturn('');
281  $languageServiceFactoryProphecy = $this->prophesize(LanguageServiceFactory::class);
282  $languageServiceFactoryProphecy->createFromUserPreferences(Argument::cetera())->willReturn($languageServiceProphecy->reveal());
283  GeneralUtility::addInstance(LanguageServiceFactory::class, $languageServiceFactoryProphecy->reveal());
284 
285  $remoteRegistryProphecy = $this->‪setUpRegistryStatusTests(-2, false);
286  $subject = new ‪ExtensionStatus($remoteRegistryProphecy->reveal());
287  $status = $subject->getStatus();
288  $statusObject = $status['extensionsOutdatedStatusNotInstalled'];
289  self::assertInstanceOf(Status::class, $statusObject);
290  self::assertEquals(‪Status::WARNING, $statusObject->getSeverity());
291  }
292 
299  protected function ‪setUpRegistryStatusTests(int $reviewState = 0, bool $installed = true, bool $setupRepositoryStatusOk = true): \Prophecy\Prophecy\ObjectProphecy
300  {
301  $mockTerObject = new ‪Extension();
302  $mockTerObject->setVersion('1.0.6');
303  $mockTerObject->setReviewState($reviewState);
304 
305  $eventDispatcher = $this->prophesize(EventDispatcherInterface::class)->reveal();
306  $mockListUtility = $this->getMockBuilder(ListUtility::class)->getMock();
307  $mockListUtility->injectEventDispatcher($eventDispatcher);
308  $mockListUtility
309  ->expects(self::once())
310  ->method('getAvailableAndInstalledExtensionsWithAdditionalInformation')
311  ->willReturn([
312  'enetcache' => [
313  'installed' => $installed,
314  'terObject' => $mockTerObject,
315  ],
316  ]);
317 
318  GeneralUtility::setSingletonInstance(ListUtility::class, $mockListUtility);
319  $remoteRegistryProphecy = $this->prophesize(RemoteRegistry::class);
320  if ($setupRepositoryStatusOk) {
321  $remote = new class () extends ‪TerExtensionRemote {
322  public function __construct() {}
323  public function getLastUpdate(): \DateTimeInterface
324  {
325  return new \DateTimeImmutable('-4days');
326  }
327  protected function isDownloadedExtensionListUpToDate(): bool
328  {
329  return true;
330  }
331  };
332  $remoteRegistryProphecy->hasRemote(Argument::cetera())->willReturn(true);
333  $remoteRegistryProphecy->hasDefaultRemote()->willReturn(true);
334  $remoteRegistryProphecy->getDefaultRemote()->willReturn($remote);
335  } else {
336  $remoteRegistryProphecy->hasDefaultRemote()->willReturn(false);
337  }
338  return $remoteRegistryProphecy;
339  }
340 }
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\getStatusReturnsNoticeIfRepositoryUpdateIsLongerThanSevenDaysAgo
‪getStatusReturnsNoticeIfRepositoryUpdateIsLongerThanSevenDaysAgo()
Definition: ExtensionStatusTest.php:140
‪TYPO3\CMS\Core\Localization\LanguageServiceFactory
Definition: LanguageServiceFactory.php:25
‪TYPO3\CMS\Reports\StatusProviderInterface
Definition: StatusProviderInterface.php:22
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\getStatusReturnArrayContainsInstancesOfReportsStatusStatus
‪getStatusReturnArrayContainsInstancesOfReportsStatusStatus()
Definition: ExtensionStatusTest.php:86
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\getStatusReturnArrayContainsFiveEntries
‪getStatusReturnArrayContainsFiveEntries()
Definition: ExtensionStatusTest.php:74
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\getStatusReturnsWarningForLoadedExtensionIfOutdatedExtensionIsLoaded
‪getStatusReturnsWarningForLoadedExtensionIfOutdatedExtensionIsLoaded()
Definition: ExtensionStatusTest.php:253
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\extensionStatusImplementsStatusProviderInterface
‪extensionStatusImplementsStatusProviderInterface()
Definition: ExtensionStatusTest.php:53
‪TYPO3\CMS\Extensionmanager\Domain\Model\Extension
Definition: Extension.php:28
‪TYPO3\CMS\Reports\Status\NOTICE
‪const NOTICE
Definition: Status.php:25
‪TYPO3\CMS\Reports\Status\ERROR
‪const ERROR
Definition: Status.php:29
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\setUpRegistryStatusTests
‪setUpRegistryStatusTests(int $reviewState=0, bool $installed=true, bool $setupRepositoryStatusOk=true)
Definition: ExtensionStatusTest.php:298
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report
Definition: ExtensionStatusTest.php:18
‪TYPO3\CMS\Extensionmanager\Utility\ListUtility
Definition: ListUtility.php:40
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\getStatusReturnsArray
‪getStatusReturnsArray()
Definition: ExtensionStatusTest.php:62
‪TYPO3\CMS\Reports\Status\OK
‪const OK
Definition: Status.php:27
‪TYPO3\CMS\Reports\Status
Definition: Status.php:24
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\getStatusReturnsOkForLoadedExtensionIfNoInsecureExtensionIsLoaded
‪getStatusReturnsOkForLoadedExtensionIfNoInsecureExtensionIsLoaded()
Definition: ExtensionStatusTest.php:172
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\getStatusReturnsOkForExistingExtensionIfNoInsecureExtensionExists
‪getStatusReturnsOkForExistingExtensionIfNoInsecureExtensionExists()
Definition: ExtensionStatusTest.php:210
‪TYPO3\CMS\Extensionmanager\Remote\TerExtensionRemote
Definition: TerExtensionRemote.php:39
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest
Definition: ExtensionStatusTest.php:39
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\getStatusReturnsErrorForExistingExtensionIfOutdatedExtensionExists
‪getStatusReturnsErrorForExistingExtensionIfOutdatedExtensionExists()
Definition: ExtensionStatusTest.php:274
‪TYPO3\CMS\Reports\Status\WARNING
‪const WARNING
Definition: Status.php:28
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\getStatusReturnsErrorStatusIfRepositoryIsNotFound
‪getStatusReturnsErrorStatusIfRepositoryIsNotFound()
Definition: ExtensionStatusTest.php:123
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\getStatusCallsMainRepositoryForMainRepositoryStatusResult
‪getStatusCallsMainRepositoryForMainRepositoryStatusResult()
Definition: ExtensionStatusTest.php:107
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\setUp
‪setUp()
Definition: ExtensionStatusTest.php:44
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\getStatusReturnsWarningForExistingExtensionIfInsecureExtensionExistsButIsNotLoaded
‪getStatusReturnsWarningForExistingExtensionIfInsecureExtensionExistsButIsNotLoaded()
Definition: ExtensionStatusTest.php:232
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Extensionmanager\Tests\Unit\Report\ExtensionStatusTest\getStatusReturnsErrorForLoadedExtensionIfInsecureExtensionIsLoaded
‪getStatusReturnsErrorForLoadedExtensionIfInsecureExtensionIsLoaded()
Definition: ExtensionStatusTest.php:189
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Extensionmanager\Remote\RemoteRegistry
Definition: RemoteRegistry.php:26
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus
Definition: ExtensionStatus.php:33