alias(static fn (string $path = ''): string => 'https://kunde.de/wp-admin/' . $path); Functions\when('add_query_arg')->alias(static fn (array $args, string $url): string => $url . '?' . http_build_query($args)); Functions\when('sanitize_key')->alias(static fn (string $key): string => strtolower((string) preg_replace('/[^a-z0-9_\-]/i', '', $key))); } protected function tearDown(): void { unset($_GET['tab'], $_GET['lit_mcp_notice']); parent::tearDown(); } private function tab(string $slug, string $label): AdminTab { $tab = Mockery::mock(AdminTab::class); $tab->allows('slug')->andReturn($slug); $tab->allows('label')->andReturn($label); $tab->allows('registerActions'); $tab->allows('render')->andReturnUsing(static function () use ($slug): void { echo '

Inhalt ' . $slug . '

'; }); return $tab; } public function testRendersTabsAndTheRequestedTab(): void { Functions\when('current_user_can')->justReturn(true); $_GET['tab'] = 'zugriff'; $page = new SettingsPage([$this->tab('verbindung', 'Verbindung'), $this->tab('zugriff', 'Zugriff')]); ob_start(); $page->render(); $html = (string) ob_get_clean(); self::assertStringContainsString('Inhalt zugriff', $html); self::assertStringNotContainsString('Inhalt verbindung', $html); self::assertMatchesRegularExpression('/tab=zugriff" class="nav-tab nav-tab-active"/', $html); self::assertSame(['verbindung', 'zugriff'], $page->tabSlugs()); } public function testUnknownTabFallsBackToTheFirstAndNoticesAreShown(): void { Functions\when('current_user_can')->justReturn(true); $_GET['tab'] = '../../evil'; $_GET['lit_mcp_notice'] = 'revoked'; $page = new SettingsPage([$this->tab('verbindung', 'Verbindung')]); ob_start(); $page->render(); $html = (string) ob_get_clean(); self::assertSame('verbindung', $page->currentTab()); self::assertStringContainsString('Inhalt verbindung', $html); self::assertStringContainsString('notice-success', $html); } public function testNothingIsRenderedWithoutManageOptions(): void { Functions\when('current_user_can')->justReturn(false); ob_start(); (new SettingsPage([$this->tab('verbindung', 'Verbindung')]))->render(); self::assertSame('', ob_get_clean()); } public function testRegisterHooksMenuSettingsAndTabActions(): void { $tab = Mockery::mock(AdminTab::class); $tab->allows('slug')->andReturn('verbindung'); $tab->expects('registerActions')->once(); $page = new SettingsPage([$tab]); Functions\expect('add_action')->once()->with('admin_menu', [$page, 'addMenu']); Functions\expect('add_action')->once()->with('admin_init', [$page, 'registerSettings']); $page->register(); } }