Skip to content

Commit edd9755

Browse files
committed
test(admin): allow empty documentation domain catalog
1 parent 0eba572 commit edd9755

1 file changed

Lines changed: 27 additions & 2 deletions

File tree

tests/controller/AdminFrontendRoutesControllerTest.php

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@
44

55
use PHPUnit\Framework\TestCase;
66
use PSFS\base\Router;
7+
use PSFS\base\Request;
78
use PSFS\base\Security;
9+
use PSFS\base\admin\AdminFrontendCsrf;
810
use PSFS\base\exception\ApiException;
911
use PSFS\controller\AdminFrontendRoutesController;
1012

1113
class AdminFrontendRoutesControllerTest extends TestCase
1214
{
1315
protected function setUp(): void
1416
{
17+
Request::dropInstance();
1518
Router::dropInstance();
1619
Router::getInstance()->hydrateRouting();
1720
}
@@ -20,6 +23,7 @@ protected function tearDown(): void
2023
{
2124
Security::setTest(false);
2225
Security::dropInstance();
26+
Request::dropInstance();
2327
Router::dropInstance();
2428
}
2529

@@ -37,7 +41,12 @@ public function testDocumentationIndexReturnsTheKnownDomainsAsAnEnvelope(): void
3741
$response = json_decode((new AdminFrontendRoutesControllerProbe())->documentation(), true, 512, JSON_THROW_ON_ERROR);
3842

3943
self::assertTrue($response['ok']);
40-
self::assertNotEmpty($response['data']['domains']);
44+
self::assertIsArray($response['data']['domains']);
45+
self::assertIsArray($response['data']['documentPaths']);
46+
47+
$documentPathDomains = array_keys($response['data']['documentPaths']);
48+
sort($documentPathDomains, SORT_NATURAL | SORT_FLAG_CASE);
49+
self::assertSame($documentPathDomains, $response['data']['domains']);
4150
foreach ($response['data']['domains'] as $domain) {
4251
self::assertSame('/' . strtoupper($domain) . '/api/doc', $response['data']['documentPaths'][$domain]);
4352
}
@@ -57,12 +66,28 @@ public function testDocumentationDomainReturnsTheV2EnvelopeForAnUnknownDomain():
5766
], $response);
5867
}
5968

60-
public function testRegenerationKeepsTheExistingAuthorizationBoundary(): void
69+
public function testRegenerationWithValidCsrfTokenKeepsTheExistingAuthorizationBoundary(): void
70+
{
71+
Security::setTest(false);
72+
Security::dropInstance();
73+
$token = AdminFrontendCsrf::issue();
74+
Request::dropInstance();
75+
Request::getInstance()->setServer([
76+
'HTTP_X_PSFS_CSRF' => $token,
77+
]);
78+
79+
$this->expectException(ApiException::class);
80+
$this->expectExceptionMessage('Restricted area');
81+
(new AdminFrontendRoutesControllerProbe())->regenerate();
82+
}
83+
84+
public function testRegenerationRejectsAMissingCsrfTokenBeforeRouteWork(): void
6185
{
6286
Security::setTest(false);
6387
Security::dropInstance();
6488

6589
$this->expectException(ApiException::class);
90+
$this->expectExceptionMessage('Invalid CSRF token');
6691
(new AdminFrontendRoutesControllerProbe())->regenerate();
6792
}
6893
}

0 commit comments

Comments
 (0)