‪TYPO3CMS  ‪main
StatusTest.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\Container\ContainerInterface;
22 use Psr\Http\Message\ServerRequestInterface;
27 use TYPO3\CMS\Core\Package\PackageManager;
34 use ‪TYPO3\CMS\Reports\Status as StatusValue;
36 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
37 
38 final class ‪StatusTest extends UnitTestCase
39 {
40  protected function ‪setUp(): void
41  {
42  parent::setUp();
43  $mockLanguageService = $this->getMockBuilder(LanguageService::class)->disableOriginalConstructor()->getMock();
44  ‪$GLOBALS['LANG'] = $mockLanguageService;
45  }
46 
47  #[Test]
49  {
50  $statusProviderArguments = [
51  [
52  [
53  new StatusValue('Status 1', 'Value 1', 'Message 1'),
54  ],
55  'StatusProvider 1',
56  false,
57  ],
58  [
59  [
60  new StatusValue('Status 1', 'Value 1', 'Message 1'),
61  new StatusValue('Status 2', 'Value 2', 'Message 2'),
62  ],
63  'StatusProvider 2',
64  false,
65  ],
66  [
67  [],
68  'StatusProvider 3',
69  true,
70  ],
71  ];
72 
73  $subject = $this->‪createSubject($statusProviderArguments);
74  $request = new ‪ServerRequest();
75  $httpHeader = ['Test-Header', 'test'];
76  $request = $request->withHeader(...$httpHeader);
77  $result = $subject->getSystemStatus($request);
78 
79  self::assertCount(count($statusProviderArguments), $result);
80  self::assertArrayHasKey($statusProviderArguments[0][1], $result);
81  self::assertArrayHasKey($statusProviderArguments[1][1], $result);
82  self::assertArrayHasKey($statusProviderArguments[2][1], $result);
83  self::assertSame($statusProviderArguments[0][0], $result[$statusProviderArguments[0][1]]);
84  self::assertSame($statusProviderArguments[1][0], $result[$statusProviderArguments[1][1]]);
85  self::assertSame($httpHeader[0], $result[$statusProviderArguments[2][1]][0]->getTitle());
86  self::assertSame($httpHeader[1], $result[$statusProviderArguments[2][1]][0]->getValue());
87  }
88 
89  #[Test]
91  {
92  $statusProviderArguments = [
93  [
94  [
95  new StatusValue('Status 1', 'Value 1', 'Message 1'),
96  ],
97  'StatusProvider 1',
98  ],
99  [
100  [
101  new StatusValue('Status 1', 'Value 1', 'Message 1'),
102  new StatusValue('Status 2', 'Value 2', 'Message 2'),
103  ],
104  'StatusProvider 2',
105  ],
106  [
107  [
108  new StatusValue('Status 1', 'Value 1', 'Message 1'),
109  ],
110  'StatusProvider 3',
111  false,
112  true,
113  ],
114  ];
115 
116  $subject = $this->‪createSubject($statusProviderArguments);
117  $result = $subject->getDetailedSystemStatus();
118 
119  self::assertCount(1, $result);
120  self::assertSame($statusProviderArguments[2][0], $result[$statusProviderArguments[2][1]]);
121  }
122 
126  private function ‪createSubject(array $statusProviderArguments): ‪Status
127  {
128  $container = $this->getMockBuilder(ContainerInterface::class)->getMock();
129  $cacheManager = new ‪CacheManager();
130  $viewHelperResolverFactory = $this->getMockBuilder(ViewHelperResolverFactoryInterface::class)->getMock();
131  $renderingContextFactory = new ‪RenderingContextFactory($container, $cacheManager, $viewHelperResolverFactory);
132  $packageManager = $this->getMockBuilder(PackageManager::class)->disableOriginalConstructor()->getMock();
133  $backendViewFactory = new ‪BackendViewFactory($renderingContextFactory, $packageManager);
134  $statusRegistry = new ‪StatusRegistry($this->‪generateStatusProviders($statusProviderArguments));
135 
136  return new ‪Status($backendViewFactory, $statusRegistry);
137  }
138 
142  private function ‪generateStatusProviders(array $statusProviderArgumentsList): \Generator
143  {
144  foreach ($statusProviderArgumentsList as $statusProviderArguments) {
145  yield $this->‪createStatusProvider(...$statusProviderArguments);
146  }
147  }
148 
152  private function ‪createStatusProvider(array $statuses, string $label, bool $requestAware = false, bool $extended = false): ‪StatusProviderInterface
153  {
154  if ($requestAware) {
155  return new class ($label) implements ‪RequestAwareStatusProviderInterface {
156  public function __construct(
157  private readonly string $label,
158  ) {}
159 
160  public function getStatus(ServerRequestInterface $request = null): array
161  {
162  $statuses = [];
163  foreach ($request->getHeaders() as $key => $header) {
164  $statuses[] = new StatusValue($key, $header[0], 'status from request');
165  }
166  return $statuses;
167  }
168 
169  public function getLabel(): string
170  {
171  return $this->label;
172  }
173  };
174  }
175 
176  if ($extended) {
177  return new class ($statuses, $label) implements ‪StatusProviderInterface, ‪ExtendedStatusProviderInterface {
178  public function __construct(
179  private readonly array $statuses,
180  private readonly string $label,
181  ) {}
182 
183  public function getStatus(): array
184  {
185  return $this->statuses;
186  }
187 
188  public function getLabel(): string
189  {
190  return $this->label;
191  }
192 
193  public function getDetailedStatus(): array
194  {
195  return $this->statuses;
196  }
197  };
198  }
199 
200  return new class ($statuses, $label) implements ‪StatusProviderInterface {
201  public function __construct(
202  private readonly array $statuses,
203  private readonly string $label,
204  ) {}
205 
206  public function getStatus(): array
207  {
208  return $this->statuses;
209  }
210 
211  public function getLabel(): string
212  {
213  return $this->label;
214  }
215  };
216  }
217 }
‪TYPO3\CMS\Reports\StatusProviderInterface
Definition: StatusProviderInterface.php:22
‪TYPO3\CMS\Reports\Report\Status\Status
Definition: Status.php:34
‪TYPO3\CMS\Backend\View\BackendViewFactory
Definition: BackendViewFactory.php:35
‪TYPO3\CMS\Reports\Tests\Unit\Report\Status\StatusTest\getSystemStatusCollectsAllStatusProvider
‪getSystemStatusCollectsAllStatusProvider()
Definition: StatusTest.php:48
‪TYPO3\CMS\Reports\Tests\Unit\Report\Status\StatusTest\getDetailedSystemStatusReturnsOnlyExtendedStatuses
‪getDetailedSystemStatusReturnsOnlyExtendedStatuses()
Definition: StatusTest.php:90
‪TYPO3\CMS\Reports\Status
Definition: Status.php:24
‪TYPO3\CMS\Fluid\Core\ViewHelper\ViewHelperResolverFactoryInterface
Definition: ViewHelperResolverFactoryInterface.php:27
‪TYPO3\CMS\Core\Cache\CacheManager
Definition: CacheManager.php:36
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:39
‪TYPO3\CMS\Reports\Tests\Unit\Report\Status
Definition: StatusTest.php:18
‪TYPO3\CMS\Reports\Tests\Unit\Report\Status\StatusTest\setUp
‪setUp()
Definition: StatusTest.php:40
‪TYPO3\CMS\Reports\Tests\Unit\Report\Status\StatusTest\createSubject
‪createSubject(array $statusProviderArguments)
Definition: StatusTest.php:126
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Fluid\Core\Rendering\RenderingContextFactory
Definition: RenderingContextFactory.php:51
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:46
‪TYPO3\CMS\Reports\Tests\Unit\Report\Status\StatusTest
Definition: StatusTest.php:39
‪TYPO3\CMS\Reports\Registry\StatusRegistry
Definition: StatusRegistry.php:29
‪TYPO3\CMS\Reports\ExtendedStatusProviderInterface
Definition: ExtendedStatusProviderInterface.php:22
‪TYPO3\CMS\Reports\RequestAwareStatusProviderInterface
Definition: RequestAwareStatusProviderInterface.php:26
‪TYPO3\CMS\Reports\Tests\Unit\Report\Status\StatusTest\createStatusProvider
‪createStatusProvider(array $statuses, string $label, bool $requestAware=false, bool $extended=false)
Definition: StatusTest.php:152
‪TYPO3\CMS\Reports\Tests\Unit\Report\Status\StatusTest\generateStatusProviders
‪generateStatusProviders(array $statusProviderArgumentsList)
Definition: StatusTest.php:142