[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

@@ -28,9 +28,9 @@ use Symfony\Component\HttpFoundation\Response;
#[Group('integration')]
class TimesheetControllerTest extends APIControllerBaseTestCase
{
public const DATE_FORMAT = 'Y-m-d H:i:s';
public const DATE_FORMAT_HTML5 = 'Y-m-d\TH:i:s';
public const TEST_TIMEZONE = 'Europe/London';
public const string DATE_FORMAT = 'Y-m-d H:i:s';
public const string DATE_FORMAT_HTML5 = 'Y-m-d\TH:i:s';
public const string TEST_TIMEZONE = 'Europe/London';
/**
* @return Timesheet[]
@@ -470,8 +470,8 @@ class TimesheetControllerTest extends APIControllerBaseTestCase
$data = [
'activity' => 1,
'project' => 1,
'begin' => ($dateTime->createDateTime('-8 hours'))->format('Y-m-d H:m:0'),
'end' => ($dateTime->createDateTime())->format('Y-m-d H:m:0'),
'begin' => ($dateTime->createDateTime('-8 hours'))->format('Y-m-d H:i:0'),
'end' => ($dateTime->createDateTime())->format('Y-m-d H:i:0'),
'description' => 'foo',
'fixedRate' => 2016,
'hourlyRate' => 127,
@@ -501,8 +501,8 @@ class TimesheetControllerTest extends APIControllerBaseTestCase
$data = [
'activity' => 1,
'project' => 1,
'begin' => ($dateTime->createDateTime('-8 hours'))->format('Y-m-d H:m:0'),
'end' => ($dateTime->createDateTime())->format('Y-m-d H:m:0'),
'begin' => ($dateTime->createDateTime('-8 hours'))->format('Y-m-d H:i:0'),
'end' => ($dateTime->createDateTime())->format('Y-m-d H:i:0'),
'description' => 'foo',
'fixedRate' => 2016,
'hourlyRate' => 127,
@@ -538,8 +538,8 @@ class TimesheetControllerTest extends APIControllerBaseTestCase
'activity' => 1,
'project' => 1,
'user' => $user->getId(),
'begin' => ($dateTime->createDateTime('- 8 hours'))->format('Y-m-d H:m:0'),
'end' => ($dateTime->createDateTime())->format('Y-m-d H:m:0'),
'begin' => ($dateTime->createDateTime('- 8 hours'))->format('Y-m-d H:i:0'),
'end' => ($dateTime->createDateTime())->format('Y-m-d H:i:0'),
'description' => 'foo',
];
$json = json_encode($data);
@@ -585,8 +585,8 @@ class TimesheetControllerTest extends APIControllerBaseTestCase
$data = [
'activity' => $activity->getId(),
'project' => $project->getId(),
'begin' => (new \DateTime('- 8 hours'))->format('Y-m-d H:m:s'),
'end' => (new \DateTime())->format('Y-m-d H:m:s'),
'begin' => (new \DateTime('- 8 hours'))->format('Y-m-d H:i:s'),
'end' => (new \DateTime())->format('Y-m-d H:i:s'),
'description' => 'foo',
];
$json = json_encode($data);
@@ -612,8 +612,8 @@ class TimesheetControllerTest extends APIControllerBaseTestCase
$em->persist($project);
$data = [
'begin' => (new \DateTime('- 8 hours'))->format('Y-m-d H:m:s'),
'end' => (new \DateTime())->format('Y-m-d H:m:s'),
'begin' => (new \DateTime('- 8 hours'))->format('Y-m-d H:i:s'),
'end' => (new \DateTime())->format('Y-m-d H:i:s'),
'project' => $project->getId(),
'activity' => 99,
];
@@ -635,8 +635,8 @@ class TimesheetControllerTest extends APIControllerBaseTestCase
$em->flush();
$data = [
'begin' => (new \DateTime('- 8 hours'))->format('Y-m-d H:m:s'),
'end' => (new \DateTime())->format('Y-m-d H:m:s'),
'begin' => (new \DateTime('- 8 hours'))->format('Y-m-d H:i:s'),
'end' => (new \DateTime())->format('Y-m-d H:i:s'),
'project' => 99,
'activity' => $activity->getId(),
];
@@ -788,8 +788,8 @@ class TimesheetControllerTest extends APIControllerBaseTestCase
$data = [
'activity' => 1,
'project' => 1,
'begin' => ($dateTime->createDateTime('-8 hours'))->format('Y-m-d H:m:0'),
'end' => ($dateTime->createDateTime())->format('Y-m-d H:m:0'),
'begin' => ($dateTime->createDateTime('-8 hours'))->format('Y-m-d H:i:0'),
'end' => ($dateTime->createDateTime())->format('Y-m-d H:i:0'),
'description' => 'foo',
];
$json = json_encode($data);
@@ -812,8 +812,8 @@ class TimesheetControllerTest extends APIControllerBaseTestCase
$data = [
'activity' => 1,
'project' => 1,
'begin' => ($dateTime->createDateTime('- 7 hours'))->format('Y-m-d\TH:m:0'),
'end' => ($dateTime->createDateTime())->format('Y-m-d\TH:m:0'),
'begin' => ($dateTime->createDateTime('- 7 hours'))->format('Y-m-d\TH:i:0'),
'end' => ($dateTime->createDateTime())->format('Y-m-d\TH:i:0'),
'description' => 'foo',
'billable' => false,
];
@@ -853,8 +853,8 @@ class TimesheetControllerTest extends APIControllerBaseTestCase
$data = [
'activity' => 1,
'project' => 1,
'begin' => (new \DateTime('- 7 hours'))->format('Y-m-d\TH:m:s'),
'end' => (new \DateTime())->format('Y-m-d\TH:m:s'),
'begin' => (new \DateTime('- 7 hours'))->format('Y-m-d\TH:i:s'),
'end' => (new \DateTime())->format('Y-m-d\TH:i:s'),
'description' => 'foo',
'exported' => true,
];
@@ -874,12 +874,14 @@ class TimesheetControllerTest extends APIControllerBaseTestCase
{
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$timesheets = $this->importFixtureForUser(User::ROLE_USER);
$begin = new \DateTimeImmutable();
$end = $begin->modify('-1 day');
$data = [
'activity' => 10,
'project' => 1,
'begin' => (new \DateTime())->format('Y-m-d H:m'),
'end' => (new \DateTime('-1 day'))->format('Y-m-d H:m'),
'begin' => $begin->format('Y-m-d H:m'),
'end' => $end->format('Y-m-d H:m'),
'description' => 'foo',
];
$json = json_encode($data);
@@ -1034,6 +1036,7 @@ class TimesheetControllerTest extends APIControllerBaseTestCase
self::assertIsString($content);
$result = json_decode($content, true);
self::assertIsArray($result);
self::assertEquals(3, \count($result));
foreach ($result as $timesheet) {
self::assertIsArray($timesheet);
@@ -1284,7 +1287,9 @@ class TimesheetControllerTest extends APIControllerBaseTestCase
self::assertIsArray($result);
self::assertApiResponseTypeStructure('TimesheetEntity', $result);
self::assertEquals('foo', $result['description']);
self::assertEquals([['name' => 'sdfsdf', 'value' => 'nnnnn'], ['name' => '1234567890', 'value' => '1234567890']], $result['metaFields']);
self::assertIsArray($result['metaFields']);
self::assertEquals(['name' => 'sdfsdf', 'value' => 'nnnnn'], $result['metaFields'][0]);
self::assertEquals(['name' => '1234567890', 'value' => '1234567890'], $result['metaFields'][1]);
self::assertEquals(['another', 'testing', 'bar'], $result['tags']);
$em = $this->getEntityManager();
@@ -1332,8 +1337,8 @@ class TimesheetControllerTest extends APIControllerBaseTestCase
$data = [
'activity' => 1,
'project' => 1,
'begin' => ($dateTime->createDateTime('- 8 hours'))->format('Y-m-d H:m:0'),
'end' => ($dateTime->createDateTime())->format('Y-m-d H:m:0'),
'begin' => ($dateTime->createDateTime('- 8 hours'))->format('Y-m-d H:i:0'),
'end' => ($dateTime->createDateTime())->format('Y-m-d H:i:0'),
'description' => 'foo',
'fixedRate' => 2016,
'hourlyRate' => 127
@@ -1488,7 +1493,16 @@ class TimesheetControllerTest extends APIControllerBaseTestCase
self::assertIsArray($result);
self::assertApiResponseTypeStructure('TimesheetEntity', $result);
self::assertEquals(['name' => 'metatestmock', 'value' => 'another,testing,bar'], $result['metaFields'][0]);
self::assertIsArray($result['metaFields']);
$found = false;
foreach ($result['metaFields'] as $field) {
self::assertIsArray($field);
if ($field['name'] === 'metatestmock') {
self::assertEquals(['name' => 'metatestmock', 'value' => 'another,testing,bar'], $field);
$found = true;
}
}
self::assertTrue($found);
$em = $this->getEntityManager();
/** @var Timesheet $timesheet */