[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

@@ -20,7 +20,6 @@ use App\Tests\Security\TestUserEntity;
use App\WorkingTime\Mode\WorkingTimeModeDay;
use Doctrine\Common\Collections\ArrayCollection;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Security\Core\User\EquatableInterface;
use Symfony\Component\Security\Core\User\UserInterface;
@@ -40,15 +39,12 @@ class UserTest extends TestCase
self::assertNull($user->getAlias());
self::assertNull($user->getId());
self::assertNull($user->getAccountNumber());
self::assertNull($user->getApiToken());
self::assertNull($user->getPlainApiToken());
self::assertFalse($user->hasTotpSecret());
self::assertNull($user->getTotpSecret());
self::assertEquals(User::DEFAULT_LANGUAGE, $user->getLanguage());
self::assertEquals(User::DEFAULT_LANGUAGE, $user->getLocale());
self::assertFalse($user->hasTeamAssignment());
self::assertFalse($user->canSeeAllData());
self::assertFalse($user->isExportDecimal());
self::assertFalse($user->isSystemAccount());
self::assertFalse($user->isPasswordRequestNonExpired(-1));
self::assertFalse($user->isPasswordRequestNonExpired(0));
@@ -65,15 +61,9 @@ class UserTest extends TestCase
$user->setAvatar('https://www.gravatar.com/avatar/00000000000000000000000000000000?d=retro&f=y');
self::assertEquals('https://www.gravatar.com/avatar/00000000000000000000000000000000?d=retro&f=y', $user->getAvatar());
$user->setApiToken('nbvfdswe34567ujko098765rerfghbgvfcdsert');
self::assertEquals('nbvfdswe34567ujko098765rerfghbgvfcdsert', $user->getApiToken());
$user->setTotpSecret('ertzuio878t6rtdrjfcghvjkiu87');
self::assertEquals('ertzuio878t6rtdrjfcghvjkiu87', $user->getTotpSecret());
$user->setPlainApiToken('https://www.gravatar.com/avatar/nbvfdswe34567ujko098765rerfghbgvfcdsert');
self::assertEquals('https://www.gravatar.com/avatar/nbvfdswe34567ujko098765rerfghbgvfcdsert', $user->getPlainApiToken());
$user->setTitle('Mr. Code Blaster');
self::assertEquals('Mr. Code Blaster', $user->getTitle());
@@ -87,78 +77,16 @@ class UserTest extends TestCase
self::assertNull($user->getSupervisor());
}
/**
* @deprecated
*/
#[Group('legacy')]
public function testWorkContract(): void
{
$user = new User();
self::assertFalse($user->hasContractSettings());
self::assertEquals(0, $user->getWorkHoursMonday());
self::assertEquals(0, $user->getWorkHoursTuesday());
self::assertEquals(0, $user->getWorkHoursWednesday());
self::assertEquals(0, $user->getWorkHoursThursday());
self::assertEquals(0, $user->getWorkHoursFriday());
self::assertEquals(0, $user->getWorkHoursSaturday());
self::assertEquals(0, $user->getWorkHoursSunday());
self::assertFalse($user->hasWorkHourConfiguration());
$monday = new \DateTime('2023-05-08 12:00:00', new \DateTimeZone('Europe/Berlin'));
$tuesday = new \DateTime('2023-05-09 12:00:00', new \DateTimeZone('Europe/Berlin'));
$wednesday = new \DateTime('2023-05-10 12:00:00', new \DateTimeZone('Europe/Berlin'));
$thursday = new \DateTime('2023-05-11 12:00:00', new \DateTimeZone('Europe/Berlin'));
$friday = new \DateTime('2023-05-12 12:00:00', new \DateTimeZone('Europe/Berlin'));
$saturday = new \DateTime('2023-05-13 12:00:00', new \DateTimeZone('Europe/Berlin'));
$sunday = new \DateTime('2023-05-14 12:00:00', new \DateTimeZone('Europe/Berlin'));
self::assertFalse($user->isWorkDay($monday));
self::assertFalse($user->isWorkDay($tuesday));
self::assertFalse($user->isWorkDay($wednesday));
self::assertFalse($user->isWorkDay($thursday));
self::assertFalse($user->isWorkDay($friday));
self::assertFalse($user->isWorkDay($saturday));
self::assertFalse($user->isWorkDay($sunday));
$user->setWorkContractMode(WorkingTimeModeDay::ID);
$user->setWorkHoursMonday(7200);
self::assertTrue($user->hasWorkHourConfiguration());
$user->setWorkHoursTuesday(7300);
$user->setWorkHoursWednesday(7400);
$user->setWorkHoursThursday(7500);
$user->setWorkHoursFriday(7600);
$user->setWorkHoursSaturday(7700);
$user->setWorkHoursSunday(7800);
$user->setHolidaysPerYear(10.7);
self::assertTrue($user->hasWorkHourConfiguration());
self::assertTrue($user->hasContractSettings());
self::assertEquals(7200, $user->getWorkHoursMonday());
self::assertEquals(7300, $user->getWorkHoursTuesday());
self::assertEquals(7400, $user->getWorkHoursWednesday());
self::assertEquals(7500, $user->getWorkHoursThursday());
self::assertEquals(7600, $user->getWorkHoursFriday());
self::assertEquals(7700, $user->getWorkHoursSaturday());
self::assertEquals(7800, $user->getWorkHoursSunday());
self::assertEquals(10.5, $user->getHolidaysPerYear());
self::assertEquals(7200, $user->getWorkHoursForDay($monday));
self::assertEquals(7300, $user->getWorkHoursForDay($tuesday));
self::assertEquals(7400, $user->getWorkHoursForDay($wednesday));
self::assertEquals(7500, $user->getWorkHoursForDay($thursday));
self::assertEquals(7600, $user->getWorkHoursForDay($friday));
self::assertEquals(7700, $user->getWorkHoursForDay($saturday));
self::assertEquals(7800, $user->getWorkHoursForDay($sunday));
self::assertTrue($user->isWorkDay($monday));
self::assertTrue($user->isWorkDay($tuesday));
self::assertTrue($user->isWorkDay($wednesday));
self::assertTrue($user->isWorkDay($thursday));
self::assertTrue($user->isWorkDay($friday));
self::assertTrue($user->isWorkDay($saturday));
self::assertTrue($user->isWorkDay($sunday));
$user->setPublicHolidayGroup('10');
self::assertEquals('10', $user->getPublicHolidayGroup());
@@ -187,7 +115,7 @@ class UserTest extends TestCase
self::assertNull($sut->getColor());
self::assertFalse($sut->hasColor());
$sut->setUsername('foo test 123');
$sut->setUserIdentifier('foo test 123');
self::assertEquals('#a972c9', $sut->getColorSafe());
$sut->setColor('#000000');
@@ -267,11 +195,8 @@ class UserTest extends TestCase
$user->setPreferenceValue('test2', 'I like rain');
self::assertEquals('I like rain', $user->getPreferenceValue('test2'));
$user->setPreferenceValue('export_decimal', true);
self::assertTrue($user->isExportDecimal());
$prefs = $user->getPreferences();
self::assertCount(3, $prefs);
self::assertCount(2, $prefs);
$preference1 = new UserPreference('_aaaaa', 'bbbbb');
$user->addPreference($preference1);
@@ -280,10 +205,10 @@ class UserTest extends TestCase
$user->addPreference($preference2);
$prefs = $user->getPreferences();
self::assertCount(5, $prefs);
self::assertCount(4, $prefs);
$visiblePrefs = $user->getVisiblePreferences();
self::assertCount(3, $visiblePrefs); // export_decimal and _aaaaa is skipped
self::assertCount(3, $visiblePrefs); // _aaaaa is skipped
self::assertEquals([$user->getPreference('test'), $user->getPreference('test2'), $preference2], $visiblePrefs);
self::assertInstanceOf(UserPreference::class, $prefs[0]);
@@ -293,7 +218,7 @@ class UserTest extends TestCase
self::assertEquals('test2', $prefs[1]->getName());
self::assertInstanceOf(UserPreference::class, $prefs[2]);
self::assertEquals('export_decimal', $prefs[2]->getName());
self::assertEquals('_aaaaa', $prefs[2]->getName());
$user->setPreferences(new ArrayCollection([]));
self::assertCount(0, $user->getPreferences());
@@ -465,7 +390,6 @@ class UserTest extends TestCase
$preference = new UserPreference('test', 'foobar');
$property = new \ReflectionProperty(User::class, 'preferences');
$property->setAccessible(true);
$property->setValue($sut, null);
// make sure that addPreference will work, even if the internal collection was set to null