improved dark mode, automatic theme switch (#5720)

This commit is contained in:
Kevin Papst
2025-12-19 23:51:27 +01:00
committed by GitHub
parent b61420d633
commit 8c1ed68817
90 changed files with 1855 additions and 1956 deletions

View File

@@ -250,20 +250,14 @@ abstract class AbstractControllerBaseTestCase extends WebTestCase
protected function assertMainContentClass(HttpKernelBrowser $client, string $classname): void
{
self::assertStringContainsString('<section id="" class="content ' . $classname . '">', $client->getResponse()->getContent());
self::assertStringContainsString('<section class="content ' . $classname . '">', $client->getResponse()->getContent());
}
/**
* @param HttpKernelBrowser $client
*/
protected function assertHasDataTable(HttpKernelBrowser $client): void
{
self::assertStringContainsString('<table class="table table-hover dataTable" role="grid" data-reload-event="', $client->getResponse()->getContent());
}
/**
* @param HttpKernelBrowser $client
*/
protected static function assertHasProgressbar(HttpKernelBrowser $client): void
{
$content = $client->getResponse()->getContent();
@@ -272,11 +266,6 @@ abstract class AbstractControllerBaseTestCase extends WebTestCase
self::assertStringContainsString('" aria-valuemin="0" aria-valuemax="100" style="width: ', $content);
}
/**
* @param HttpKernelBrowser $client
* @param string $class
* @param int $count
*/
protected function assertDataTableRowCount(HttpKernelBrowser $client, string $class, int $count): void
{
$node = $client->getCrawler()->filter('section.content div.' . $class . ' table.dataTable tbody tr:not(.summary)');
@@ -284,8 +273,7 @@ abstract class AbstractControllerBaseTestCase extends WebTestCase
}
/**
* @param HttpKernelBrowser $client
* @param array $buttons
* @param array<string, string> $buttons
*/
protected function assertPageActions(HttpKernelBrowser $client, array $buttons): void
{
@@ -349,21 +337,14 @@ abstract class AbstractControllerBaseTestCase extends WebTestCase
$this->assertHasValidationError($client, $url, $formSelector, $formData, $fieldNames);
}
/**
* @param HttpKernelBrowser $client
*/
protected function assertHasNoEntriesWithFilter(HttpKernelBrowser $client): void
{
$this->assertCalloutWidgetWithMessage($client, 'No entries were found based on your selected filters.');
}
/**
* @param HttpKernelBrowser $client
* @param string $message
*/
protected function assertCalloutWidgetWithMessage(HttpKernelBrowser $client, string $message): void
{
$node = $client->getCrawler()->filter('div.alert.alert-warning.alert-important');
$node = $client->getCrawler()->filter('div.alert.alert-info');
self::assertStringContainsString($message, $node->text(null, true));
}
@@ -377,19 +358,11 @@ abstract class AbstractControllerBaseTestCase extends WebTestCase
$this->assertHasFlashSuccess($client, 'Saved changes');
}
/**
* @param HttpKernelBrowser $client
* @param string|null $message
*/
protected function assertHasFlashSuccess(HttpKernelBrowser $client, ?string $message = null): void
{
$this->assertHasFlashMessage($client, 'success', $message);
}
/**
* @param HttpKernelBrowser $client
* @param string|null $message
*/
protected function assertHasFlashError(HttpKernelBrowser $client, ?string $message = null): void
{
$this->assertHasFlashMessage($client, 'error', $message);

View File

@@ -31,7 +31,8 @@ class PluginControllerTest extends AbstractControllerBaseTestCase
{
$client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN);
$this->assertAccessIsGranted($client, '/admin/plugins/');
$this->assertCalloutWidgetWithMessage($client, 'You have no plugins installed yet');
$node = $client->getCrawler()->filter('div.alert.alert-warning');
self::assertStringContainsString('You have no plugins installed yet', $node->text(null, true));
}
public function testIndexActionWithInstalledPlugins(): void

View File

@@ -16,6 +16,80 @@ use PHPUnit\Framework\TestCase;
#[CoversClass(MenuItemModel::class)]
class MenuItemModelTest extends TestCase
{
public function testDefaults(): void
{
$sut = new MenuItemModel('test', 'foo', 'bar');
self::assertEquals('test', $sut->getIdentifier());
self::assertEquals('foo', $sut->getLabel());
$sut->setLabel('new-label');
self::assertEquals('new-label', $sut->getLabel());
self::assertEquals('messages', $sut->getTranslationDomain());
$sut->setTranslationDomain('custom');
self::assertEquals('custom', $sut->getTranslationDomain());
self::assertNull($sut->getIcon());
$sut->setIcon('icon-123');
self::assertEquals('icon-123', $sut->getIcon());
self::assertFalse($sut->isDivider());
$sut->setDivider(true);
self::assertTrue($sut->isDivider());
self::assertNull($sut->getBadge());
$sut->setBadge('99');
self::assertEquals('99', $sut->getBadge());
self::assertNull($sut->getBadgeColor());
$sut->setBadgeColor('blue');
self::assertEquals('blue', $sut->getBadgeColor());
self::assertEquals([], $sut->getRouteArgs());
$sut->setRouteArgs(['a' => 'b']);
self::assertEquals(['a' => 'b'], $sut->getRouteArgs());
self::assertFalse($sut->getIsActive());
self::assertFalse($sut->isActive());
$sut->setIsActive(true);
self::assertTrue($sut->isActive());
self::assertTrue($sut->getIsActive());
self::assertFalse($sut->isChildRoute('route1'));
$sut->setChildRoutes(['route1']);
self::assertTrue($sut->isChildRoute('route1'));
$sut->addChildRoute('route2');
self::assertTrue($sut->isChildRoute('route1'));
self::assertTrue($sut->isChildRoute('route2'));
self::assertFalse($sut->isDisabled());
$sut->setDisabled(true);
self::assertTrue($sut->isDisabled());
self::assertFalse($sut->isExpanded());
$sut->setExpanded(true);
self::assertTrue($sut->isExpanded());
// validate default getter values
self::assertNull($sut->getActiveChild());
self::assertNull($sut->getChild('x'));
self::assertEquals('bar', $sut->getRoute());
$sut->setRoute('bar2');
self::assertEquals('bar2', $sut->getRoute());
self::assertNull($sut->getParent());
$parent = new MenuItemModel('parent', 'parent-label');
$sut->setParent($parent);
self::assertSame($parent, $sut->getParent());
self::assertEquals([], $sut->getChildren());
$child = new MenuItemModel('child', 'child-label');
$sut->setChildren([$child]);
self::assertEquals([$child], $sut->getChildren());
}
public function testChildRoutes(): void
{
$sut = new MenuItemModel('test', 'foo', 'bar');

View File

@@ -526,11 +526,6 @@ parameters:
count: 1
path: Controller/AbstractControllerBaseTestCase.php
-
message: "#^Method App\\\\Tests\\\\Controller\\\\AbstractControllerBaseTestCase\\:\\:assertPageActions\\(\\) has parameter \\$buttons with no value type specified in iterable type array\\.$#"
count: 1
path: Controller/AbstractControllerBaseTestCase.php
-
message: "#^Method App\\\\Tests\\\\Controller\\\\AbstractControllerBaseTestCase\\:\\:importFixture\\(\\) return type has no value type specified in iterable type array\\.$#"
count: 1