[3.0] Update Symfony to 7.4 and dependencies, removed deprecated code, removed API password (#5622)

* deactivate deprecated auto-mapping
* use native month-picker with fallback on old browser
* bump dependencies to new major versions
* replace deprecated ARRAY column type with JSON
* named arguments
* nullable arguments
* native lazy ghosts
* update routes to use php config
* disable PHP < 8.4
* use static RTL configuration
* new qr code package
* clear out env file
* recipe updates
* fix deprecations
* preset new env variable if not existing
* bump maria db version examples
* remove deprecated api-token support
* fix validator deprecations
* remove timesheet category column
* fix broken validator autoconfiguration
* stabilize tests
* fix migration syntax compatibility
* fix doctrine deprecation
* fix datetime format
* remove constructor dependency
* only include visible preferences in invoice templates
* fix test container dependency
* removed ProjectConstraint multi-constraint logic
* allow to disable plugins in certain environments
* refactor TimesheetConstraint to non-service
* activate new interface methods
* prevent update issues with .env
* improved customer fixture
* removed $user->isExportDecimal()
This commit is contained in:
Kevin Papst
2026-01-04 15:04:25 +01:00
committed by GitHub
parent 9e87fc131b
commit 677f8d776c
467 changed files with 3929 additions and 6567 deletions

View File

@@ -272,6 +272,12 @@ abstract class AbstractControllerBaseTestCase extends WebTestCase
self::assertEquals($count, $node->count());
}
protected function assertDataTableRowCountGreaterThan(HttpKernelBrowser $client, string $class, int $count): void
{
$node = $client->getCrawler()->filter('section.content div.' . $class . ' table.dataTable tbody tr:not(.summary)');
self::assertGreaterThanOrEqual($count, $node->count());
}
/**
* @param array<string, string> $buttons
*/
@@ -279,15 +285,21 @@ abstract class AbstractControllerBaseTestCase extends WebTestCase
{
$node = $client->getCrawler()->filter('div.page-header div.page-actions .pa-desktop a');
/** @var array<string, string> $foundButtons */
$foundButtons = [];
/** @var \DOMElement $element */
foreach ($node->getIterator() as $element) {
$expectedClass = trim(str_replace(['btn action-', ' btn-icon', 'btn btn-primary action-', 'btn btn-dark action-', 'btn btn-white action-', 'btn action-'], '', $element->getAttribute('class')));
self::assertArrayHasKey($expectedClass, $buttons);
$expectedUrl = $buttons[$expectedClass];
self::assertEquals($expectedUrl, $element->getAttribute('href'));
$foundButtons[$expectedClass] = $element->getAttribute('href');
}
self::assertEquals(\count($buttons), $node->count(), 'Invalid amount of page actions');
foreach ($buttons as $class => $url) {
self::assertArrayHasKey($class, $foundButtons);
self::assertEquals($foundButtons[$class], $url);
}
self::assertGreaterThanOrEqual(\count($buttons), $node->count(), 'Invalid amount of page actions');
}
/**