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" aria-current="page"/', $html); self::assertMatchesRegularExpression('/tab=verbindung" class="nav-tab">/', $html); self::assertSame(['verbindung', 'zugriff'], $page->tabSlugs()); } public function testRendersTheLogoTopRightOnlyWhenGiven(): void { Functions\when('current_user_can')->justReturn(true); Functions\when('esc_url')->returnArg(); ob_start(); (new SettingsPage([$this->tab('verbindung', 'Verbindung')], 'https://example.test/logo.svg'))->render(); $withLogo = (string) ob_get_clean(); ob_start(); (new SettingsPage([$this->tab('verbindung', 'Verbindung')]))->render(); $withoutLogo = (string) ob_get_clean(); self::assertStringContainsString('