Release 2.22.0 (#5043)

This commit is contained in:
Kevin Papst
2024-09-20 14:30:11 +02:00
committed by GitHub
parent 3e0dadc0c8
commit 537c120ad9
57 changed files with 435 additions and 572 deletions

View File

@@ -34,7 +34,7 @@ class PermissionControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN);
$this->assertAccessIsGranted($client, '/admin/permissions');
$this->assertHasDataTable($client);
$this->assertDataTableRowCount($client, 'datatable_user_admin_permissions', 134);
$this->assertDataTableRowCount($client, 'datatable_user_admin_permissions', 135);
$this->assertPageActions($client, [
'create modal-ajax-form' => $this->createUrl('/admin/permissions/roles/create'),
]);

View File

@@ -18,13 +18,23 @@ use PHPUnit\Framework\TestCase;
*/
class ConfigureMainMenuEventTest extends TestCase
{
/**
* @deprecated
* @group legacy
*/
public function testLegacy(): void
{
$sut = new ConfigureMainMenuEvent();
self::assertNotNull($sut->getAppsMenu());
}
public function testGetterAndSetter(): void
{
$sut = new ConfigureMainMenuEvent();
self::assertNotNull($sut->getMenu());
self::assertNotNull($sut->getAdminMenu());
self::assertNotNull($sut->getAppsMenu());
self::assertNotNull($sut->getSystemMenu());
self::assertNull($sut->getTimesheetMenu());

View File

@@ -34,15 +34,15 @@ use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Translation\TranslatorInterface;
abstract class AbstractRendererTest extends KernelTestCase
{
/**
* @param string $classname
* @return ExportRendererInterface|TimesheetExportInterface
* @param class-string $classname
*/
protected function getAbstractRenderer(string $classname)
protected function getAbstractRenderer(string $classname): ExportRendererInterface|TimesheetExportInterface
{
$languages = [
'en' => LocaleService::DEFAULT_SETTINGS
@@ -53,7 +53,7 @@ abstract class AbstractRendererTest extends KernelTestCase
$security->expects($this->any())->method('isGranted')->willReturn(true);
$translator = $this->createMock(TranslatorInterface::class);
$dateExtension = new LocaleFormatExtensions(new LocaleService($languages), $security);
$dateExtension = new LocaleFormatExtensions(new LocaleService($languages));
$dispatcher = new EventDispatcher();
$dispatcher->addSubscriber(new MetaFieldColumnSubscriber());
@@ -61,11 +61,7 @@ abstract class AbstractRendererTest extends KernelTestCase
return new $classname($translator, $dateExtension, $dispatcher, $security);
}
/**
* @param ExportRendererInterface $renderer
* @return \Symfony\Component\HttpFoundation\Response
*/
protected function render(ExportRendererInterface $renderer)
protected function render(ExportRendererInterface $renderer): Response
{
$customer = new Customer('Customer Name');
$customer->setNumber('A-0123456789');
@@ -198,29 +194,29 @@ class MetaFieldColumnSubscriber implements EventSubscriberInterface
];
}
public function loadTimesheetField(TimesheetMetaDisplayEvent $event)
public function loadTimesheetField(TimesheetMetaDisplayEvent $event): void
{
$event->addField($this->prepareEntity(new TimesheetMeta(), 'foo'));
$event->addField($this->prepareEntity(new TimesheetMeta(), 'foo2'));
}
public function loadCustomerField(CustomerMetaDisplayEvent $event)
public function loadCustomerField(CustomerMetaDisplayEvent $event): void
{
$event->addField($this->prepareEntity(new CustomerMeta(), 'customer-foo'));
}
public function loadProjectField(ProjectMetaDisplayEvent $event)
public function loadProjectField(ProjectMetaDisplayEvent $event): void
{
$event->addField($this->prepareEntity(new ProjectMeta(), 'project-foo'));
$event->addField($this->prepareEntity(new ProjectMeta(), 'project-foo2')->setIsVisible(false));
}
public function loadActivityField(ActivityMetaDisplayEvent $event)
public function loadActivityField(ActivityMetaDisplayEvent $event): void
{
$event->addField($this->prepareEntity(new ActivityMeta(), 'activity-foo'));
}
private function prepareEntity(MetaTableTypeInterface $meta, string $name)
private function prepareEntity(MetaTableTypeInterface $meta, string $name): MetaTableTypeInterface
{
return $meta
->setLabel('Working place')

View File

@@ -42,7 +42,9 @@ class UserExporterTest extends TestCase
$user->setEmail('test@example.com');
$user->setEnabled(false);
$user->addRole(User::ROLE_TEAMLEAD);
$date = $user->getRegisteredAt();
$date = new \DateTime('2024-09-01 14:45:00');
$user->setRegisteredAt($date);
$sut = new UserExporter($spreadsheetExporter, $annotationExtractor, $userPreferenceExtractor);
$spreadsheet = $sut->export([$user], new UserPreferenceDisplayEvent(UserPreferenceDisplayEvent::EXPORT));

View File

@@ -33,15 +33,15 @@ use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Translation\TranslatorInterface;
abstract class AbstractRendererTest extends KernelTestCase
{
/**
* @param string $classname
* @return TimesheetExportInterface
* @param class-string $classname
*/
protected function getAbstractRenderer(string $classname)
protected function getAbstractRenderer(string $classname): TimesheetExportInterface
{
$languages = [
'en' => LocaleService::DEFAULT_SETTINGS
@@ -55,7 +55,7 @@ abstract class AbstractRendererTest extends KernelTestCase
$security->expects($this->any())->method('isGranted')->willReturn(true);
$translator = $this->getMockBuilder(TranslatorInterface::class)->getMock();
$dateExtension = new LocaleFormatExtensions(new LocaleService($languages), $security);
$dateExtension = new LocaleFormatExtensions(new LocaleService($languages));
$dispatcher = new EventDispatcher();
$dispatcher->addSubscriber(new MetaFieldColumnSubscriber());
@@ -63,11 +63,7 @@ abstract class AbstractRendererTest extends KernelTestCase
return new $classname($translator, $dateExtension, $dispatcher, $security);
}
/**
* @param TimesheetExportInterface $renderer
* @return \Symfony\Component\HttpFoundation\Response
*/
protected function render(TimesheetExportInterface $renderer)
protected function render(TimesheetExportInterface $renderer): Response
{
$customer = new Customer('Customer Name');
$customer->setNumber('A-0123456789');
@@ -185,29 +181,29 @@ class MetaFieldColumnSubscriber implements EventSubscriberInterface
];
}
public function loadTimesheetField(TimesheetMetaDisplayEvent $event)
public function loadTimesheetField(TimesheetMetaDisplayEvent $event): void
{
$event->addField($this->prepareEntity(new TimesheetMeta(), 'foo'));
$event->addField($this->prepareEntity(new TimesheetMeta(), 'foo2'));
}
public function loadCustomerField(CustomerMetaDisplayEvent $event)
public function loadCustomerField(CustomerMetaDisplayEvent $event): void
{
$event->addField($this->prepareEntity(new CustomerMeta(), 'customer-foo'));
}
public function loadProjectField(ProjectMetaDisplayEvent $event)
public function loadProjectField(ProjectMetaDisplayEvent $event): void
{
$event->addField($this->prepareEntity(new ProjectMeta(), 'project-foo'));
$event->addField($this->prepareEntity(new ProjectMeta(), 'project-foo2')->setIsVisible(false));
}
public function loadActivityField(ActivityMetaDisplayEvent $event)
public function loadActivityField(ActivityMetaDisplayEvent $event): void
{
$event->addField($this->prepareEntity(new ActivityMeta(), 'activity-foo'));
}
private function prepareEntity(MetaTableTypeInterface $meta, string $name)
private function prepareEntity(MetaTableTypeInterface $meta, string $name): MetaTableTypeInterface
{
return $meta
->setLabel('Working place')

View File

@@ -20,7 +20,7 @@ class CustomerLoaderTest extends AbstractLoaderTest
{
public function testLoadResults(): void
{
$em = $this->getEntityManagerMock(1);
$em = $this->getEntityManagerMock(0);
$query = new CustomerQuery();
$query->loadTeams();
@@ -31,4 +31,22 @@ class CustomerLoaderTest extends AbstractLoaderTest
$sut->loadResults([$entity]);
}
public function testLoadResultsWithMocks(): void
{
$em = $this->getEntityManagerMock(1);
$query = new CustomerQuery();
$query->loadTeams();
$sut = new CustomerLoader($em, $query);
$entity = $this->createMock(Customer::class);
$entity->method('getId')->willReturn(1);
$entity2 = $this->createMock(Customer::class);
$entity->method('getId')->willReturn(2);
$sut->loadResults([$entity, $entity2]);
}
}

View File

@@ -14,7 +14,6 @@ use App\Entity\Timesheet;
use App\Entity\User;
use App\Twig\LocaleFormatExtensions;
use PHPUnit\Framework\TestCase;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\Intl\Util\IntlTestHelper;
use Twig\TwigFilter;
use Twig\TwigFunction;
@@ -55,10 +54,7 @@ class LocaleFormatExtensionsTest extends TestCase
$user = new User();
$user->setTimezone('Europe/Vienna');
$security = $this->createMock(Security::class);
$security->expects($this->any())->method('getUser')->willReturn($user);
$sut = new LocaleFormatExtensions(new LocaleService($languageSettings), $security);
$sut = new LocaleFormatExtensions(new LocaleService($languageSettings));
$sut->setLocale($locale);
return $sut;
@@ -502,9 +498,7 @@ class LocaleFormatExtensionsTest extends TestCase
],
];
$security = $this->createMock(Security::class);
$sut = new LocaleFormatExtensions(new LocaleService($this->localeEn), $security);
$sut = new LocaleFormatExtensions(new LocaleService($this->localeEn));
$sut->setLocale('en');
self::assertEquals($expected, $sut->getJavascriptConfiguration());
@@ -586,22 +580,6 @@ class LocaleFormatExtensionsTest extends TestCase
self::assertFalse($sut->isWeekend(new \DateTime('first friday this month')));
self::assertTrue($sut->isWeekend(new \DateTime('first saturday this month')));
self::assertTrue($sut->isWeekend(new \DateTime('first sunday this month')));
// seconds case: a user with work-hour configuration
$user = new User();
$user->setWorkHoursTuesday(1);
$user->setWorkHoursThursday(1);
$user->setWorkHoursSaturday(1);
$user->setWorkHoursSunday(1);
$sut = $this->getSut('en', $this->localeEn);
self::assertTrue($sut->isWeekend(new \DateTime('first monday this month'), $user));
self::assertFalse($sut->isWeekend(new \DateTime('first tuesday this month'), $user));
self::assertTrue($sut->isWeekend(new \DateTime('first wednesday this month'), $user));
self::assertFalse($sut->isWeekend(new \DateTime('first thursday this month'), $user));
self::assertTrue($sut->isWeekend(new \DateTime('first friday this month'), $user));
self::assertFalse($sut->isWeekend(new \DateTime('first saturday this month'), $user));
self::assertFalse($sut->isWeekend(new \DateTime('first sunday this month'), $user));
}
protected function getTimesheet($seconds): Timesheet

View File

@@ -9,6 +9,9 @@
require __DIR__ . '/../vendor/autoload.php';
// TODO remove once PARTIAL usage was replaced entirely
\Doctrine\Deprecations\Deprecation::ignoreDeprecations('https://github.com/doctrine/orm/issues/8471');
if (isset($_ENV['BOOTSTRAP_RESET_DATABASE']) && (bool) $_ENV['BOOTSTRAP_RESET_DATABASE'] === true) {
echo 'Re-Installing test database ...' . PHP_EOL;

View File

@@ -1754,31 +1754,6 @@ parameters:
count: 1
path: Export/Renderer/AbstractRendererTest.php
-
message: "#^Method App\\\\Tests\\\\Export\\\\Renderer\\\\MetaFieldColumnSubscriber\\:\\:loadActivityField\\(\\) has no return type specified\\.$#"
count: 1
path: Export/Renderer/AbstractRendererTest.php
-
message: "#^Method App\\\\Tests\\\\Export\\\\Renderer\\\\MetaFieldColumnSubscriber\\:\\:loadCustomerField\\(\\) has no return type specified\\.$#"
count: 1
path: Export/Renderer/AbstractRendererTest.php
-
message: "#^Method App\\\\Tests\\\\Export\\\\Renderer\\\\MetaFieldColumnSubscriber\\:\\:loadProjectField\\(\\) has no return type specified\\.$#"
count: 1
path: Export/Renderer/AbstractRendererTest.php
-
message: "#^Method App\\\\Tests\\\\Export\\\\Renderer\\\\MetaFieldColumnSubscriber\\:\\:loadTimesheetField\\(\\) has no return type specified\\.$#"
count: 1
path: Export/Renderer/AbstractRendererTest.php
-
message: "#^Method App\\\\Tests\\\\Export\\\\Renderer\\\\MetaFieldColumnSubscriber\\:\\:prepareEntity\\(\\) has no return type specified\\.$#"
count: 1
path: Export/Renderer/AbstractRendererTest.php
-
message: "#^Call to an undefined method App\\\\Export\\\\ExportRendererInterface\\|App\\\\Export\\\\TimesheetExportInterface\\:\\:getIcon\\(\\)\\.$#"
count: 1
@@ -1984,11 +1959,6 @@ parameters:
count: 1
path: Export/Spreadsheet/Entities/MethodRequiresParams.php
-
message: "#^Cannot call method format\\(\\) on DateTime\\|null\\.$#"
count: 1
path: Export/Spreadsheet/UserExporterTest.php
-
message: "#^Parameter \\#2 \\$haystack of static method PHPUnit\\\\Framework\\\\Assert\\:\\:assertStringContainsString\\(\\) expects string, string\\|null given\\.$#"
count: 1
@@ -1999,31 +1969,6 @@ parameters:
count: 1
path: Export/Timesheet/AbstractRendererTest.php
-
message: "#^Method App\\\\Tests\\\\Export\\\\Timesheet\\\\MetaFieldColumnSubscriber\\:\\:loadActivityField\\(\\) has no return type specified\\.$#"
count: 1
path: Export/Timesheet/AbstractRendererTest.php
-
message: "#^Method App\\\\Tests\\\\Export\\\\Timesheet\\\\MetaFieldColumnSubscriber\\:\\:loadCustomerField\\(\\) has no return type specified\\.$#"
count: 1
path: Export/Timesheet/AbstractRendererTest.php
-
message: "#^Method App\\\\Tests\\\\Export\\\\Timesheet\\\\MetaFieldColumnSubscriber\\:\\:loadProjectField\\(\\) has no return type specified\\.$#"
count: 1
path: Export/Timesheet/AbstractRendererTest.php
-
message: "#^Method App\\\\Tests\\\\Export\\\\Timesheet\\\\MetaFieldColumnSubscriber\\:\\:loadTimesheetField\\(\\) has no return type specified\\.$#"
count: 1
path: Export/Timesheet/AbstractRendererTest.php
-
message: "#^Method App\\\\Tests\\\\Export\\\\Timesheet\\\\MetaFieldColumnSubscriber\\:\\:prepareEntity\\(\\) has no return type specified\\.$#"
count: 1
path: Export/Timesheet/AbstractRendererTest.php
-
message: "#^Method App\\\\Tests\\\\Export\\\\Timesheet\\\\CsvRendererTest\\:\\:getTestModel\\(\\) has no return type specified\\.$#"
count: 1