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