Przeglądaj źródła

Merge branch 'v8-4538/tester-unitairement-les-extensions-doctrine' into develop

Olivier Massot 1 rok temu
rodzic
commit
5207139205
100 zmienionych plików z 407 dodań i 118 usunięć
  1. 1 0
      env/.env.docker
  2. 1 1
      src/Attribute/ActivityYearConstraintAware.php
  3. 1 1
      src/Attribute/DateTimeConstraintAware.php
  4. 1 1
      src/Commands/AddSubdomainCommand.php
  5. 6 2
      src/Doctrine/Access/AdditionalExtension/DateTimeConstraintExtensionAdditional.php
  6. 22 11
      src/Doctrine/Access/CurrentAccessExtension.php
  7. 5 1
      src/Doctrine/Access/CurrentUserPersonalizedListExtension.php
  8. 3 0
      src/Doctrine/Billing/CurrentResidenceAreaExtension.php
  9. 3 0
      src/Doctrine/Booking/AttendanceBookingReasonExtension.php
  10. 3 0
      src/Doctrine/Booking/CurrentCoursesExtension.php
  11. 11 3
      src/Doctrine/Core/AllowedAddressPostalExtension.php
  12. 3 0
      src/Doctrine/Core/CurrentUserNotificationExtension.php
  13. 3 0
      src/Doctrine/Core/CurrentUserNotificationUserExtension.php
  14. 3 0
      src/Doctrine/Education/CurrentCycleExtension.php
  15. 3 0
      src/Doctrine/Education/CurrentEducationNotationConfigExtension.php
  16. 3 0
      src/Doctrine/Education/CurrentEducationTimingExtension.php
  17. 3 0
      src/Doctrine/Network/CurrentNetworkOrganizationExtension.php
  18. 4 4
      src/Doctrine/ORM/AST/SphericalDistance.php
  19. 3 0
      src/Doctrine/Organization/CurrentOrganizationExtension.php
  20. 3 0
      src/Doctrine/Organization/CurrentParentOrganizationExtension.php
  21. 1 1
      src/EventSubscriber/ElasticaPostTransformSubscriber.php
  22. 1 1
      src/Filter/ApiPlatform/Utils/ArrayFieldFilter.php
  23. 1 1
      src/Message/Command/Export.php
  24. 1 1
      src/Message/Command/MailerCommand.php
  25. 1 1
      src/Message/Command/Typo3/Typo3DeleteCommand.php
  26. 1 1
      src/Message/Command/Typo3/Typo3UndeleteCommand.php
  27. 1 1
      src/Message/Command/Typo3/Typo3UpdateCommand.php
  28. 1 1
      src/Message/Handler/ExportHandler.php
  29. 1 1
      src/Message/Handler/MailerHandler.php
  30. 1 1
      src/Message/Handler/Typo3/Typo3DeleteCommandHandler.php
  31. 1 1
      src/Message/Handler/Typo3/Typo3UndeleteCommandHandler.php
  32. 1 1
      src/Message/Handler/Typo3/Typo3UpdateCommandHandler.php
  33. 1 1
      src/Repository/Access/AccessRepository.php
  34. 1 1
      src/Repository/Booking/CourseRepository.php
  35. 1 1
      src/Repository/Education/EducationNotationRepository.php
  36. 1 1
      src/Security/Voter/EntityVoter/AbstractEntityVoter.php
  37. 1 1
      src/Serializer/AccessContextBuilder.php
  38. 1 1
      src/Serializer/DefaultNormalizer.php
  39. 1 1
      src/Service/Access/AccessProfileCreator.php
  40. 1 1
      src/Service/Access/AdminAccessUtils.php
  41. 1 1
      src/Service/Access/OptionalsRoles/CriteriaNotationOptionalRole.php
  42. 1 1
      src/Service/Access/Utils.php
  43. 2 2
      src/Service/ApiLegacy/ApiLegacyRequestService.php
  44. 1 1
      src/Service/Constraint/ActivityYearConstraint.php
  45. 1 1
      src/Service/Constraint/DateTimeConstraint.php
  46. 1 1
      src/Service/Cotisation/CotisationCreator.php
  47. 1 1
      src/Service/Cotisation/Utils.php
  48. 1 1
      src/Service/Cron/Job/CleanDb.php
  49. 1 1
      src/Service/Cron/Job/CleanTempFiles.php
  50. 1 1
      src/Service/Cron/Job/DolibarrSync.php
  51. 1 1
      src/Service/Cron/UI/ConsoleUI.php
  52. 1 1
      src/Service/Doctrine/FiltersConfigurationService.php
  53. 2 2
      src/Service/Dolibarr/DolibarrSyncService.php
  54. 1 1
      src/Service/Export/Encoder/PdfEncoder.php
  55. 1 1
      src/Service/Export/LicenceCmfExporter.php
  56. 1 1
      src/Service/File/Factory/ImageFactory.php
  57. 3 3
      src/Service/File/FileManager.php
  58. 1 1
      src/Service/File/Storage/ApiLegacyStorage.php
  59. 5 5
      src/Service/File/Storage/LocalStorage.php
  60. 1 1
      src/Service/Mailer/Builder/OnSubdomainChangeMailBuilder.php
  61. 1 1
      src/Service/Mailer/Mailer.php
  62. 1 1
      src/Service/MercureHub.php
  63. 1 1
      src/Service/Mobyt/MobytService.php
  64. 7 7
      src/Service/Notifier.php
  65. 1 1
      src/Service/OnChange/OnChangeContext.php
  66. 1 1
      src/Service/OnChange/Organization/OnParametersChange.php
  67. 1 1
      src/Service/OnlineRegistration/RegistrationStatusService.php
  68. 1 1
      src/Service/Organization/OrganizationProfileCreator.php
  69. 1 1
      src/Service/Organization/Utils.php
  70. 1 1
      src/Service/Rest/ApiRequestInterface.php
  71. 2 2
      src/Service/Rest/ApiRequestService.php
  72. 1 1
      src/Service/Rest/Operation/BaseRestOperation.php
  73. 1 1
      src/Service/Rest/Operation/CreateOperation.php
  74. 1 1
      src/Service/Rest/Operation/DeleteOperation.php
  75. 1 1
      src/Service/Rest/Operation/UpdateOperation.php
  76. 1 1
      src/Service/Security/InternalRequestsService.php
  77. 1 1
      src/Service/Security/Module.php
  78. 1 1
      src/Service/Twig/AssetsExtension.php
  79. 1 1
      src/Service/Typo3/BindFileService.php
  80. 2 2
      src/Service/Typo3/SubdomainService.php
  81. 1 1
      src/Service/Utils/GpsCoordinateUtils.php
  82. 1 1
      src/Service/Utils/Siret.php
  83. 1 1
      src/State/Processor/Access/AdminAccessProcessor.php
  84. 1 1
      src/State/Processor/EntityProcessor.php
  85. 1 1
      src/State/Processor/Export/LicenceCmf/ExportRequestProcessor.php
  86. 1 1
      src/State/Processor/Organization/OrganizationProcessor.php
  87. 1 1
      src/State/Processor/Organization/ParametersProcessor.php
  88. 1 1
      src/State/Processor/Organization/SubdomainProcessor.php
  89. 1 1
      src/State/Provider/Access/AccessProfileProvider.php
  90. 1 1
      src/State/Provider/Access/AdminAccessProvider.php
  91. 1 1
      src/State/Provider/Core/DownloadProvider.php
  92. 1 1
      src/State/Provider/Core/ImageProvider.php
  93. 1 1
      src/State/Provider/Enum/EnumProvider.php
  94. 1 1
      src/State/Provider/OnlineRegistration/RegistrationAvailabilityProvider.php
  95. 1 1
      src/State/Provider/OnlineRegistration/RegistrationStatusProvider.php
  96. 1 1
      src/State/Provider/Organization/Subdomain/SubdomainAvailabilityProvider.php
  97. 1 1
      src/State/Provider/Utils/GpsCoordinateSearchingProvider.php
  98. 1 1
      src/State/Provider/Utils/SiretProvider.php
  99. 119 0
      tests/Unit/Doctrine/AbstractExtensionTest.php
  100. 109 0
      tests/Unit/Doctrine/Access/CurrentAccessExtensionTest.php

+ 1 - 0
env/.env.docker

@@ -1,6 +1,7 @@
 ###> symfony/framework-bundle ###
 APP_ENV=dev
 APP_DEBUG=1
+APP_SECRET=211cede3dc4b162da3ec2fbdcd905070
 ###< symfony/framework-bundle ###
 
 ###> nelmio/cors-bundle ###

+ 1 - 1
src/Attribute/ActivityYearConstraintAware.php

@@ -15,7 +15,7 @@ final class ActivityYearConstraintAware
 
     public function __construct(
         string $startYearFieldName,
-        string $endYearFieldName
+        string $endYearFieldName,
     ) {
         $this->startYearFieldName = $startYearFieldName;
         $this->endYearFieldName = $endYearFieldName;

+ 1 - 1
src/Attribute/DateTimeConstraintAware.php

@@ -15,7 +15,7 @@ final class DateTimeConstraintAware
 
     public function __construct(
         string $startDateFieldName,
-        string $endDateFieldName
+        string $endDateFieldName,
     ) {
         $this->startDateFieldName = $startDateFieldName;
         $this->endDateFieldName = $endDateFieldName;

+ 1 - 1
src/Commands/AddSubdomainCommand.php

@@ -19,7 +19,7 @@ class AddSubdomainCommand extends Command
 {
     public function __construct(
         private readonly OrganizationRepository $organizationRepository,
-        private readonly SubdomainService $subdomainService
+        private readonly SubdomainService $subdomainService,
     ) {
         parent::__construct();
     }

+ 6 - 2
src/Doctrine/Access/AdditionalExtension/DateTimeConstraintExtensionAdditional.php

@@ -14,7 +14,7 @@ use Symfony\Component\HttpFoundation\RequestStack;
 class DateTimeConstraintExtensionAdditional implements AdditionalAccessExtensionInterface
 {
     public function __construct(
-        private RequestStack $requestStack
+        private RequestStack $requestStack,
     ) {
     }
 
@@ -29,7 +29,11 @@ class DateTimeConstraintExtensionAdditional implements AdditionalAccessExtension
 
     public function addWhere(QueryBuilder $queryBuilder): void
     {
-        $rootAlias = $queryBuilder->getRootAliases()[0];
+        $rootAliases = $queryBuilder->getRootAliases();
+        if (empty($rootAliases)) {
+            throw new \LogicException('No root alias defined.');
+        }
+        $rootAlias = $rootAliases[0];
         $queryBuilder->innerJoin(sprintf('%s.organizationFunction', $rootAlias), 'organization_function');
     }
 }

+ 22 - 11
src/Doctrine/Access/CurrentAccessExtension.php

@@ -18,7 +18,7 @@ final class CurrentAccessExtension extends AbstractExtension
 {
     public function __construct(
         private Security $security,
-        private CurrentAccessExtensionIterator $currentAccessExtensionIterator
+        private CurrentAccessExtensionIterator $currentAccessExtensionIterator,
     ) {
     }
 
@@ -27,16 +27,27 @@ final class CurrentAccessExtension extends AbstractExtension
         return $resourceClass === Access::class;
     }
 
-    public function addWhere(QueryBuilder $queryBuilder, string $resourceClass, ?Operation $operation): void
+    protected function addWhere(QueryBuilder $queryBuilder, string $resourceClass, ?Operation $operation): void
     {
-        /** @var Access $currentUser */
-        $currentUser = $this->security->getUser();
-        $rootAlias = $queryBuilder->getRootAliases()[0];
-        $queryBuilder
-            ->andWhere(sprintf('%s.organization = :current_organization', $rootAlias))
-            ->setParameter('current_organization', $currentUser->getOrganization())
-        ;
-
-        $this->currentAccessExtensionIterator->addWhere($queryBuilder, $operation?->getName());
+        $token = $this->security->getToken();
+        if ($token === null) {
+            return;
+        }
+        $currentUser = $token->getUser();
+        if (!$currentUser instanceof Access) {
+            return;
+        }
+        $organization = $currentUser->getOrganization();
+        $rootAliases = $queryBuilder->getRootAliases();
+        if (empty($rootAliases)) {
+            throw new \LogicException('No root alias defined.');
+        }
+
+        $rootAlias = $rootAliases[0];
+        $queryBuilder->andWhere(sprintf('%s.organization = :current_organization', $rootAlias));
+        $queryBuilder->setParameter('current_organization', $organization);
+
+        $operationName = $operation ? $operation->getName() : '';
+        $this->currentAccessExtensionIterator->addWhere($queryBuilder, $operationName);
     }
 }

+ 5 - 1
src/Doctrine/Access/CurrentUserPersonalizedListExtension.php

@@ -27,7 +27,11 @@ final class CurrentUserPersonalizedListExtension extends AbstractExtension
     protected function addWhere(QueryBuilder $queryBuilder, string $resourceClass, ?Operation $operation): void
     {
         $currentUser = $this->security->getUser();
-        $rootAlias = $queryBuilder->getRootAliases()[0];
+        $rootAliases = $queryBuilder->getRootAliases();
+        if (empty($rootAliases)) {
+            throw new \LogicException('No root alias defined.');
+        }
+        $rootAlias = $rootAliases[0];
         $queryBuilder->andWhere(sprintf('%s.access = :current_access', $rootAlias));
         $queryBuilder->setParameter('current_access', $currentUser);
     }

+ 3 - 0
src/Doctrine/Billing/CurrentResidenceAreaExtension.php

@@ -29,6 +29,9 @@ final class CurrentResidenceAreaExtension extends AbstractExtension
     {
         /** @var Access $currentUser */
         $currentUser = $this->security->getUser();
+        if ($currentUser === null || $currentUser->getOrganization() === null) {
+            return;
+        }
         $rootAlias = $queryBuilder->getRootAliases()[0];
         $queryBuilder
             ->andWhere(sprintf('%s.billingSetting = :billingSetting', $rootAlias))

+ 3 - 0
src/Doctrine/Booking/AttendanceBookingReasonExtension.php

@@ -29,6 +29,9 @@ final class AttendanceBookingReasonExtension extends AbstractExtension
     {
         /** @var Access $currentUser */
         $currentUser = $this->security->getUser();
+        if ($currentUser === null || $currentUser->getOrganization() === null) {
+            return;
+        }
         $rootAlias = $queryBuilder->getRootAliases()[0];
         $queryBuilder
             ->andWhere(sprintf('%s.organization = :organization', $rootAlias))

+ 3 - 0
src/Doctrine/Booking/CurrentCoursesExtension.php

@@ -32,6 +32,9 @@ final class CurrentCoursesExtension extends AbstractExtension
     {
         /** @var Access $currentUser */
         $currentUser = $this->security->getUser();
+        if ($currentUser === null || $currentUser->getOrganization() === null) {
+            return;
+        }
         $rootAlias = $queryBuilder->getRootAliases()[0];
         $queryBuilder
             ->andWhere(sprintf('%s.discr = :discr', $rootAlias))

+ 11 - 3
src/Doctrine/Core/AllowedAddressPostalExtension.php

@@ -29,11 +29,19 @@ final class AllowedAddressPostalExtension extends AbstractExtension
     {
         /** @var Access $currentUser */
         $currentUser = $this->security->getUser();
-        $rootAlias = $queryBuilder->getRootAliases()[0];
+        if ($currentUser === null || $currentUser->getOrganization() === null) {
+            return;
+        }
+
+        $rootAliases = $queryBuilder->getRootAliases();
+        if (empty($rootAliases)) {
+            throw new \LogicException('No root alias defined.');
+        }
+
+        $rootAlias = $rootAliases[0];
         $queryBuilder
             ->innerJoin(sprintf('%s.organizationAddressPostal', $rootAlias), 'organization_address_postal')
             ->andWhere('organization_address_postal.organization = :organization')
-            ->setParameter('organization', $currentUser->getOrganization())
-        ;
+            ->setParameter('organization', $currentUser->getOrganization());
     }
 }

+ 3 - 0
src/Doctrine/Core/CurrentUserNotificationExtension.php

@@ -32,6 +32,9 @@ final class CurrentUserNotificationExtension extends AbstractExtension
     {
         /** @var Access $currentUser */
         $currentUser = $this->security->getUser();
+        if ($currentUser === null) {
+            return;
+        }
         $rootAlias = $queryBuilder->getRootAliases()[0];
         $queryBuilder
             ->andWhere(sprintf('%s.recipientAccess = :current_access', $rootAlias))

+ 3 - 0
src/Doctrine/Core/CurrentUserNotificationUserExtension.php

@@ -32,6 +32,9 @@ final class CurrentUserNotificationUserExtension extends AbstractExtension
     {
         /** @var Access $currentUser */
         $currentUser = $this->security->getUser();
+        if ($currentUser === null) {
+            return;
+        }
         $rootAlias = $queryBuilder->getRootAliases()[0];
         $queryBuilder
             ->andWhere(sprintf('%s.access = :current_access', $rootAlias))

+ 3 - 0
src/Doctrine/Education/CurrentCycleExtension.php

@@ -29,6 +29,9 @@ final class CurrentCycleExtension extends AbstractExtension
     {
         /** @var Access $currentUser */
         $currentUser = $this->security->getUser();
+        if ($currentUser === null || $currentUser->getOrganization() === null) {
+            return;
+        }
         $rootAlias = $queryBuilder->getRootAliases()[0];
         $queryBuilder
             ->andWhere(sprintf('%s.organization = :organization', $rootAlias))

+ 3 - 0
src/Doctrine/Education/CurrentEducationNotationConfigExtension.php

@@ -29,6 +29,9 @@ final class CurrentEducationNotationConfigExtension extends AbstractExtension
     {
         /** @var Access $currentUser */
         $currentUser = $this->security->getUser();
+        if ($currentUser === null || $currentUser->getOrganization() === null) {
+            return;
+        }
         $rootAlias = $queryBuilder->getRootAliases()[0];
         $queryBuilder
             ->andWhere(sprintf('%s.organization = :organization', $rootAlias))

+ 3 - 0
src/Doctrine/Education/CurrentEducationTimingExtension.php

@@ -29,6 +29,9 @@ final class CurrentEducationTimingExtension extends AbstractExtension
     {
         /** @var Access $currentUser */
         $currentUser = $this->security->getUser();
+        if ($currentUser === null || $currentUser->getOrganization() === null) {
+            return;
+        }
         $rootAlias = $queryBuilder->getRootAliases()[0];
         $queryBuilder
             ->andWhere(sprintf('%s.organization = :organization', $rootAlias))

+ 3 - 0
src/Doctrine/Network/CurrentNetworkOrganizationExtension.php

@@ -29,6 +29,9 @@ final class CurrentNetworkOrganizationExtension extends AbstractExtension
     {
         /** @var Access $currentUser */
         $currentUser = $this->security->getUser();
+        if ($currentUser === null || $currentUser->getOrganization() === null) {
+            return;
+        }
         $rootAlias = $queryBuilder->getRootAliases()[0];
         $queryBuilder
             ->andWhere(sprintf('%s.organization = :organization', $rootAlias))

+ 4 - 4
src/Doctrine/ORM/AST/SphericalDistance.php

@@ -28,10 +28,10 @@ use Doctrine\ORM\Query\SqlWalker;
  */
 class SphericalDistance extends FunctionNode
 {
-    private Node|string $latitude1;
-    private Node|string $longitude1;
-    private Node|string $latitude2;
-    private Node|string $longitude2;
+    protected Node|string $latitude1;
+    protected Node|string $longitude1;
+    protected Node|string $latitude2;
+    protected Node|string $longitude2;
 
     /**
      * Parse DQL Function.

+ 3 - 0
src/Doctrine/Organization/CurrentOrganizationExtension.php

@@ -29,6 +29,9 @@ final class CurrentOrganizationExtension extends AbstractExtension
     {
         /** @var Access $currentUser */
         $currentUser = $this->security->getUser();
+        if ($currentUser === null || $currentUser->getOrganization() === null) {
+            return;
+        }
         $rootAlias = $queryBuilder->getRootAliases()[0];
         $queryBuilder
             ->andWhere(sprintf('%s.id = :organization', $rootAlias))

+ 3 - 0
src/Doctrine/Organization/CurrentParentOrganizationExtension.php

@@ -32,6 +32,9 @@ final class CurrentParentOrganizationExtension extends AbstractExtension
     {
         /** @var Access $currentUser */
         $currentUser = $this->security->getUser();
+        if ($currentUser === null || $currentUser->getOrganization() === null) {
+            return;
+        }
         $rootAlias = $queryBuilder->getRootAliases()[0];
         $queryBuilder
             ->andWhere(sprintf('%s.organization = :organization', $rootAlias))

+ 1 - 1
src/EventSubscriber/ElasticaPostTransformSubscriber.php

@@ -17,7 +17,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 final class ElasticaPostTransformSubscriber implements EventSubscriberInterface
 {
     public function __construct(
-        private EducationNotationUtils $educationNotationUtils
+        private EducationNotationUtils $educationNotationUtils,
     ) {
     }
 

+ 1 - 1
src/Filter/ApiPlatform/Utils/ArrayFieldFilter.php

@@ -31,7 +31,7 @@ class ArrayFieldFilter extends AbstractFilter
         QueryNameGeneratorInterface $queryNameGenerator,
         string $resourceClass,
         ?Operation $operation = null,
-        array $context = []
+        array $context = [],
     ): void {
         if (!$this->isPropertyEnabled($property, $resourceClass)) {
             return;

+ 1 - 1
src/Message/Command/Export.php

@@ -12,7 +12,7 @@ use App\ApiResources\Export\ExportRequest;
 class Export
 {
     public function __construct(
-        private ExportRequest $exportRequest
+        private ExportRequest $exportRequest,
     ) {
     }
 

+ 1 - 1
src/Message/Command/MailerCommand.php

@@ -12,7 +12,7 @@ use App\Service\Mailer\Model\MailerModelInterface;
 class MailerCommand
 {
     public function __construct(
-        private MailerModelInterface $model
+        private MailerModelInterface $model,
     ) {
     }
 

+ 1 - 1
src/Message/Command/Typo3/Typo3DeleteCommand.php

@@ -10,7 +10,7 @@ namespace App\Message\Command\Typo3;
 class Typo3DeleteCommand
 {
     public function __construct(
-        private int $organizationId
+        private int $organizationId,
     ) {
     }
 

+ 1 - 1
src/Message/Command/Typo3/Typo3UndeleteCommand.php

@@ -10,7 +10,7 @@ namespace App\Message\Command\Typo3;
 class Typo3UndeleteCommand
 {
     public function __construct(
-        private int $organizationId
+        private int $organizationId,
     ) {
     }
 

+ 1 - 1
src/Message/Command/Typo3/Typo3UpdateCommand.php

@@ -10,7 +10,7 @@ namespace App\Message\Command\Typo3;
 class Typo3UpdateCommand
 {
     public function __construct(
-        private int $organizationId
+        private int $organizationId,
     ) {
     }
 

+ 1 - 1
src/Message/Handler/ExportHandler.php

@@ -18,7 +18,7 @@ class ExportHandler
         private ExporterIterator $handler,
         private MercureHub $mercureHub,
         private AccessRepository $accessRepository,
-        private Notifier $notifier
+        private Notifier $notifier,
     ) {
     }
 

+ 1 - 1
src/Message/Handler/MailerHandler.php

@@ -17,7 +17,7 @@ class MailerHandler
     public function __construct(
         private Mailer $mailer,
         private Notifier $notifier,
-        private AccessRepository $accessRepository
+        private AccessRepository $accessRepository,
     ) {
     }
 

+ 1 - 1
src/Message/Handler/Typo3/Typo3DeleteCommandHandler.php

@@ -10,7 +10,7 @@ use Symfony\Component\Messenger\Attribute\AsMessageHandler;
 class Typo3DeleteCommandHandler
 {
     public function __construct(
-        private Typo3Service $typo3Service
+        private Typo3Service $typo3Service,
     ) {
     }
 

+ 1 - 1
src/Message/Handler/Typo3/Typo3UndeleteCommandHandler.php

@@ -10,7 +10,7 @@ use Symfony\Component\Messenger\Attribute\AsMessageHandler;
 class Typo3UndeleteCommandHandler
 {
     public function __construct(
-        private Typo3Service $typo3Service
+        private Typo3Service $typo3Service,
     ) {
     }
 

+ 1 - 1
src/Message/Handler/Typo3/Typo3UpdateCommandHandler.php

@@ -10,7 +10,7 @@ use Symfony\Component\Messenger\Attribute\AsMessageHandler;
 class Typo3UpdateCommandHandler
 {
     public function __construct(
-        private Typo3Service $typo3Service
+        private Typo3Service $typo3Service,
     ) {
     }
 

+ 1 - 1
src/Repository/Access/AccessRepository.php

@@ -29,7 +29,7 @@ class AccessRepository extends ServiceEntityRepository implements UserLoaderInte
     public function __construct(
         ManagerRegistry $registry,
         private RequestStack $requestStack,
-        private FiltersConfigurationService $filtersConfigurationService
+        private FiltersConfigurationService $filtersConfigurationService,
     ) {
         parent::__construct($registry, Access::class);
     }

+ 1 - 1
src/Repository/Booking/CourseRepository.php

@@ -14,7 +14,7 @@ class CourseRepository extends ServiceEntityRepository
 {
     public function __construct(
         ManagerRegistry $registry,
-        private FiltersConfigurationService $filtersConfigurationService
+        private FiltersConfigurationService $filtersConfigurationService,
     ) {
         parent::__construct($registry, Course::class);
     }

+ 1 - 1
src/Repository/Education/EducationNotationRepository.php

@@ -14,7 +14,7 @@ class EducationNotationRepository extends ServiceEntityRepository
 {
     public function __construct(
         ManagerRegistry $registry,
-        private FiltersConfigurationService $filtersConfigurationService
+        private FiltersConfigurationService $filtersConfigurationService,
     ) {
         parent::__construct($registry, EducationNotation::class);
     }

+ 1 - 1
src/Security/Voter/EntityVoter/AbstractEntityVoter.php

@@ -53,7 +53,7 @@ abstract class AbstractEntityVoter extends Voter
         protected Utils $accessUtils,
         private InternalRequestsService $internalRequestsService,
         private EntityManagerInterface $em,
-        private SwitchUser $switchUser
+        private SwitchUser $switchUser,
     ) {
     }
 

+ 1 - 1
src/Serializer/AccessContextBuilder.php

@@ -18,7 +18,7 @@ final class AccessContextBuilder implements SerializerContextBuilderInterface
     public function __construct(
         private SerializerContextBuilderInterface $decorated,
         private AuthorizationCheckerInterface $authorizationChecker,
-        private Security $security
+        private Security $security,
     ) {
     }
 

+ 1 - 1
src/Serializer/DefaultNormalizer.php

@@ -21,7 +21,7 @@ final class DefaultNormalizer implements NormalizerInterface, DenormalizerInterf
     public function __construct(
         private NormalizerInterface $decorated,
         private EntityUtils $entityUtils,
-        private Security $security
+        private Security $security,
     ) {
         if (!$this->decorated instanceof DenormalizerInterface) {
             throw new \InvalidArgumentException(sprintf('The decorated normalizer must implement the %s.', DenormalizerInterface::class));

+ 1 - 1
src/Service/Access/AccessProfileCreator.php

@@ -19,7 +19,7 @@ class AccessProfileCreator
     public function __construct(
         private readonly OrganizationProfileCreator $organizationProfileCreator,
         private readonly AccessRepository $accessRepository,
-        private readonly Utils $accessUtils
+        private readonly Utils $accessUtils,
     ) {
     }
 

+ 1 - 1
src/Service/Access/AdminAccessUtils.php

@@ -16,7 +16,7 @@ class AdminAccessUtils
 {
     public function __construct(
         private Utils $accessUtils,
-        private ContactPointUtils $contactPointUtils
+        private ContactPointUtils $contactPointUtils,
     ) {
     }
 

+ 1 - 1
src/Service/Access/OptionalsRoles/CriteriaNotationOptionalRole.php

@@ -12,7 +12,7 @@ use App\Service\Access\OptionalsRolesInterface;
 class CriteriaNotationOptionalRole implements OptionalsRolesInterface
 {
     public function __construct(
-        private readonly AccessRepository $accessRepository
+        private readonly AccessRepository $accessRepository,
     ) {
     }
 

+ 1 - 1
src/Service/Access/Utils.php

@@ -21,7 +21,7 @@ class Utils
     public function __construct(
         readonly private RoleHierarchyInterface $roleHierarchy,
         readonly private AccessRepository $accessRepository,
-        readonly private OptionalsRolesIterator $optionalsRolesIterator
+        readonly private OptionalsRolesIterator $optionalsRolesIterator,
     ) {
     }
 

+ 2 - 2
src/Service/ApiLegacy/ApiLegacyRequestService.php

@@ -23,7 +23,7 @@ class ApiLegacyRequestService extends ApiRequestService
         HttpClientInterface $apiLegacyClient,
         private readonly Security $security,
         private readonly JWTTokenManagerInterface $jwtManager,
-        readonly private string $internalRequestsToken
+        readonly private string $internalRequestsToken,
     ) {
         parent::__construct($apiLegacyClient);
     }
@@ -36,7 +36,7 @@ class ApiLegacyRequestService extends ApiRequestService
         string $method,
         string $url,
         array $parameters = [],
-        array $options = []
+        array $options = [],
     ): ResponseInterface {
         $token = $this->security->getToken();
 

+ 1 - 1
src/Service/Constraint/ActivityYearConstraint.php

@@ -16,7 +16,7 @@ class ActivityYearConstraint extends AbstractTimeConstraintUtils implements Time
 {
     public function __construct(
         private EntityManagerInterface $entityManager,
-        private OrganizationUtils $organizationUtils
+        private OrganizationUtils $organizationUtils,
     ) {
     }
 

+ 1 - 1
src/Service/Constraint/DateTimeConstraint.php

@@ -17,7 +17,7 @@ class DateTimeConstraint extends AbstractTimeConstraintUtils implements TimeCons
 {
     public function __construct(
         readonly private EntityManagerInterface $entityManager,
-        readonly private OrganizationUtils $organizationUtils
+        readonly private OrganizationUtils $organizationUtils,
     ) {
     }
 

+ 1 - 1
src/Service/Cotisation/CotisationCreator.php

@@ -14,7 +14,7 @@ class CotisationCreator
 {
     public function __construct(
         private readonly OrganizationRepository $organizationRepository,
-        private readonly Utils $cotisationUtils
+        private readonly Utils $cotisationUtils,
     ) {
     }
 

+ 1 - 1
src/Service/Cotisation/Utils.php

@@ -25,7 +25,7 @@ class Utils
         private readonly NetworkUtils $networkUtils,
         private readonly OrganizationUtils $organizationUtils,
         private readonly NetworkOrganizationRepository $networkOrganizationRepository,
-        private readonly CotisationApiResourcesRepository $cotisationApiResourcesRepository
+        private readonly CotisationApiResourcesRepository $cotisationApiResourcesRepository,
     ) {
     }
 

+ 1 - 1
src/Service/Cron/Job/CleanDb.php

@@ -24,7 +24,7 @@ class CleanDb extends BaseCronJob
 
     #[Pure]
     public function __construct(
-        private Connection $connection
+        private Connection $connection,
     ) {
         parent::__construct();
     }

+ 1 - 1
src/Service/Cron/Job/CleanTempFiles.php

@@ -31,7 +31,7 @@ class CleanTempFiles extends BaseCronJob
     public function __construct(
         private Connection $connection,
         private FileRepository $fileRepository,
-        private LocalStorage $storage
+        private LocalStorage $storage,
     ) {
         parent::__construct();
     }

+ 1 - 1
src/Service/Cron/Job/DolibarrSync.php

@@ -16,7 +16,7 @@ class DolibarrSync extends BaseCronJob
 {
     #[Pure]
     public function __construct(
-        private readonly DolibarrSyncService $dolibarrSyncService
+        private readonly DolibarrSyncService $dolibarrSyncService,
     ) {
         parent::__construct();
     }

+ 1 - 1
src/Service/Cron/UI/ConsoleUI.php

@@ -15,7 +15,7 @@ class ConsoleUI implements CronUIInterface
     protected ProgressBar $progressBar;
 
     public function __construct(
-        private OutputInterface $output
+        private OutputInterface $output,
     ) {
         $this->progressBar = new ProgressBar($output, 0);
     }

+ 1 - 1
src/Service/Doctrine/FiltersConfigurationService.php

@@ -27,7 +27,7 @@ class FiltersConfigurationService
     public function __construct(
         private EntityManagerInterface $entityManager,
         private DateTimeConstraint $dateTimeConstraint,
-        private ActivityYearConstraint $activityYearConstraint
+        private ActivityYearConstraint $activityYearConstraint,
     ) {
     }
 

+ 2 - 2
src/Service/Dolibarr/DolibarrSyncService.php

@@ -66,7 +66,7 @@ class DolibarrSyncService
         private AddressPostalUtils $addressPostalUtils,
         private ArrayUtils $arrayUtils,
         private TranslatorInterface $translator,
-        private Utils $organizationUtils
+        private Utils $organizationUtils,
     ) {
     }
 
@@ -170,7 +170,7 @@ class DolibarrSyncService
                 ) {
                     NetworkEnum::CMF->value => $cmfDolibarrId,
                     NetworkEnum::FFEC->value => $ffecDolibarrId,
-                    default => null
+                    default => null,
                 };
             }
 

+ 1 - 1
src/Service/Export/Encoder/PdfEncoder.php

@@ -29,7 +29,7 @@ class PdfEncoder implements EncoderInterface
     ];
 
     public function __construct(
-        private readonly Pdf $knpSnappy
+        private readonly Pdf $knpSnappy,
     ) {
     }
 

+ 1 - 1
src/Service/Export/LicenceCmfExporter.php

@@ -26,7 +26,7 @@ class LicenceCmfExporter extends BaseExporter implements ExporterInterface
     public const LICENCE_CMF_COLOR = [0 => '931572', 1 => 'C2981A', 2 => '003882', 3 => '27AAE1', 4 => '2BB673'];
 
     public function __construct(
-        private readonly OrganizationRepository $organizationRepository
+        private readonly OrganizationRepository $organizationRepository,
     ) {
     }
 

+ 1 - 1
src/Service/File/Factory/ImageFactory.php

@@ -17,7 +17,7 @@ class ImageFactory
     public function __construct(
         private readonly DataManager $dataManager,
         private readonly FilterManager $filterManager,
-        private readonly CacheManager $cacheManager
+        private readonly CacheManager $cacheManager,
     ) {
     }
 

+ 3 - 3
src/Service/File/FileManager.php

@@ -29,7 +29,7 @@ class FileManager
         protected readonly IriConverterInterface $iriConverter,
         protected readonly StorageIterator $storageIterator,
         protected readonly ImageFactory $imageFactory,
-        protected readonly LocalStorage $localStorage
+        protected readonly LocalStorage $localStorage,
     ) {
     }
 
@@ -87,7 +87,7 @@ class FileManager
         bool $isTemporary = false,
         FileVisibilityEnum $visibility = FileVisibilityEnum::NOBODY,
         ?string $mimeType = null,
-        bool $flushFile = true
+        bool $flushFile = true,
     ): File {
         return $this
             ->localStorage
@@ -118,7 +118,7 @@ class FileManager
         bool $isTemporary = false,
         FileVisibilityEnum $visibility = FileVisibilityEnum::NOBODY,
         ?string $mimeType = null,
-        ?string $config = null
+        ?string $config = null,
     ): File {
         return $this
             ->localStorage

+ 1 - 1
src/Service/File/Storage/ApiLegacyStorage.php

@@ -19,7 +19,7 @@ class ApiLegacyStorage implements FileStorageInterface
         private readonly ApiLegacyRequestService $apiLegacyRequestService,
         protected readonly DataManager $dataManager,
         protected readonly UrlBuilder $urlBuilder,
-        protected readonly string $legacyBaseUrl
+        protected readonly string $legacyBaseUrl,
     ) {
     }
 

+ 5 - 5
src/Service/File/Storage/LocalStorage.php

@@ -54,7 +54,7 @@ class LocalStorage implements FileStorageInterface
         protected readonly CacheManager $cacheManager,
         protected readonly ImageFactory $imageFactory,
         protected readonly FileUtils $fileUtils,
-        protected readonly UrlBuilder $urlBuilder
+        protected readonly UrlBuilder $urlBuilder,
     ) {
         $this->filesystem = $filesystemMap->get(static::FS_KEY);
     }
@@ -74,7 +74,7 @@ class LocalStorage implements FileStorageInterface
      */
     public function listByOwner(
         Organization|Access|Person $owner,
-        ?FileTypeEnum $type = null
+        ?FileTypeEnum $type = null,
     ): array {
         return $this->filesystem->listKeys(
             $this->getPrefix($owner, false, $type)
@@ -152,7 +152,7 @@ class LocalStorage implements FileStorageInterface
         bool $isTemporary = false,
         FileVisibilityEnum $visibility = FileVisibilityEnum::NOBODY,
         ?string $mimeType = null,
-        bool $flushFile = true
+        bool $flushFile = true,
     ): File {
         [$organization, $person] = $this->getOrganizationAndPersonFromOwner($owner);
 
@@ -249,7 +249,7 @@ class LocalStorage implements FileStorageInterface
         bool $isTemporary = false,
         FileVisibilityEnum $visibility = FileVisibilityEnum::NOBODY,
         ?string $mimeType = null,
-        ?string $config = null
+        ?string $config = null,
     ): File {
         $file = $this->prepareFile(
             $owner,
@@ -307,7 +307,7 @@ class LocalStorage implements FileStorageInterface
     protected function getPrefix(
         Organization|Access|Person $owner,
         bool $isTemporary,
-        ?FileTypeEnum $type = null
+        ?FileTypeEnum $type = null,
     ): string {
         if ($owner instanceof Access) {
             $prefix = Path::join('organization', $owner->getOrganization()?->getId(), $owner->getId());

+ 1 - 1
src/Service/Mailer/Builder/OnSubdomainChangeMailBuilder.php

@@ -25,7 +25,7 @@ class OnSubdomainChangeMailBuilder extends AbstractBuilder implements BuilderInt
     public function __construct(
         private readonly EntityManagerInterface $entityManager,
         private readonly string $opentalentNoReplyEmailAddress,
-        private readonly AccessUtils $accessUtils
+        private readonly AccessUtils $accessUtils,
     ) {
     }
 

+ 1 - 1
src/Service/Mailer/Mailer.php

@@ -35,7 +35,7 @@ class Mailer
         private readonly StringsUtils $stringsUtils,
         private readonly EntityManagerInterface $entityManager,
         private readonly Environnement $environnement,
-        private readonly LoggerInterface $logger
+        private readonly LoggerInterface $logger,
     ) {
     }
 

+ 1 - 1
src/Service/MercureHub.php

@@ -28,7 +28,7 @@ class MercureHub
         private HubInterface $hub,
         private SerializerInterface $serializer,
         private EncoderInterface $encoder,
-        private IriConverterInterface $iriConverter
+        private IriConverterInterface $iriConverter,
     ) {
     }
 

+ 1 - 1
src/Service/Mobyt/MobytService.php

@@ -21,7 +21,7 @@ class MobytService extends ApiRequestService
     /** @noinspection SenselessProxyMethodInspection */
     #[Pure]
     public function __construct(
-        HttpClientInterface $mobyt_client
+        HttpClientInterface $mobyt_client,
     ) {
         parent::__construct($mobyt_client);
     }

+ 7 - 7
src/Service/Notifier.php

@@ -14,7 +14,7 @@ class Notifier
 {
     public function __construct(
         private EntityManagerInterface $em,
-        private MercureHub $mercureHub
+        private MercureHub $mercureHub,
     ) {
     }
 
@@ -26,7 +26,7 @@ class Notifier
         string $name,
         NotificationTypeEnum $type,
         array $message,
-        ?string $link = null
+        ?string $link = null,
     ): Notification {
         $now = new \DateTime();
 
@@ -51,7 +51,7 @@ class Notifier
         string $name,
         NotificationTypeEnum $type,
         array $message,
-        ?string $link = null
+        ?string $link = null,
     ): Notification {
         $notification = $this->createNotification($access, $name, $type, $message, $link);
 
@@ -65,7 +65,7 @@ class Notifier
 
     public function notifyExport(
         Access $access,
-        File $file
+        File $file,
     ): Notification {
         return $this->notify(
             $access,
@@ -81,7 +81,7 @@ class Notifier
      */
     public function notifyMessage(
         Access $access,
-        array $message
+        array $message,
     ): Notification {
         return $this->notify(
             $access,
@@ -96,7 +96,7 @@ class Notifier
      */
     public function notifySystem(
         Access $access,
-        array $message
+        array $message,
     ): Notification {
         return $this->notify(
             $access,
@@ -112,7 +112,7 @@ class Notifier
     public function notifyError(
         Access $access,
         string $name,
-        array $message
+        array $message,
     ): Notification {
         return $this->notify(
             $access,

+ 1 - 1
src/Service/OnChange/OnChangeContext.php

@@ -8,7 +8,7 @@ class OnChangeContext
      * @param array<mixed> $context
      */
     public function __construct(
-        private array $context
+        private array $context,
     ) {
     }
 

+ 1 - 1
src/Service/OnChange/Organization/OnParametersChange.php

@@ -27,7 +27,7 @@ class OnParametersChange extends OnChangeDefault
         private CourseRepository $courseRepository,
         private NetworkUtils $networkUtils,
         private OrganizationUtils $organizationUtils,
-        private MessageBusInterface $messageBus
+        private MessageBusInterface $messageBus,
     ) {
     }
 

+ 1 - 1
src/Service/OnlineRegistration/RegistrationStatusService.php

@@ -21,7 +21,7 @@ class RegistrationStatusService
     public const DISPLAYING_TIME = 30;
 
     public function __construct(
-        private OnlineRegistrationService $onlineRegistrationService
+        private OnlineRegistrationService $onlineRegistrationService,
     ) {
     }
 

+ 1 - 1
src/Service/Organization/OrganizationProfileCreator.php

@@ -20,7 +20,7 @@ class OrganizationProfileCreator
     public function __construct(
         private Module $module,
         private Tree $tree,
-        private OrganizationUtils $organizationUtils
+        private OrganizationUtils $organizationUtils,
     ) {
     }
 

+ 1 - 1
src/Service/Organization/Utils.php

@@ -23,7 +23,7 @@ class Utils
 
     public function __construct(
         private NetworkOrganizationRepository $networkOrganizationRepository,
-        private NetworkUtils $networkUtils
+        private NetworkUtils $networkUtils,
     ) {
     }
 

+ 1 - 1
src/Service/Rest/ApiRequestInterface.php

@@ -87,6 +87,6 @@ interface ApiRequestInterface
         string $method,
         string $url,
         array $parameters = [],
-        array $options = []
+        array $options = [],
     ): ResponseInterface;
 }

+ 2 - 2
src/Service/Rest/ApiRequestService.php

@@ -19,7 +19,7 @@ use Symfony\Contracts\HttpClient\ResponseInterface;
 class ApiRequestService implements ApiRequestInterface
 {
     public function __construct(
-        protected HttpClientInterface $client
+        protected HttpClientInterface $client,
     ) {
     }
 
@@ -123,7 +123,7 @@ class ApiRequestService implements ApiRequestInterface
         string $method,
         string $url,
         array $parameters = [],
-        array $options = []
+        array $options = [],
     ): ResponseInterface {
         $url = ltrim($url, '/');
         $url = UrlBuilder::concatParameters($url, $parameters);

+ 1 - 1
src/Service/Rest/Operation/BaseRestOperation.php

@@ -39,7 +39,7 @@ abstract class BaseRestOperation
         protected string $path,
         protected array $initialData = [],
         protected array $parameters = [],
-        protected array $options = []
+        protected array $options = [],
     ) {
     }
 

+ 1 - 1
src/Service/Rest/Operation/CreateOperation.php

@@ -21,7 +21,7 @@ class CreateOperation extends BaseRestOperation
         protected string $entityName,
         protected array $data,
         protected array $parameters = [],
-        protected array $options = []
+        protected array $options = [],
     ) {
         $options['json'] = $this->data;
 

+ 1 - 1
src/Service/Rest/Operation/DeleteOperation.php

@@ -23,7 +23,7 @@ class DeleteOperation extends BaseRestOperation
         protected string $entityName,
         protected int $id,
         protected array $initialData = [],
-        protected array $options = []
+        protected array $options = [],
     ) {
         parent::__construct(
             $label,

+ 1 - 1
src/Service/Rest/Operation/UpdateOperation.php

@@ -27,7 +27,7 @@ class UpdateOperation extends BaseRestOperation
         protected array $data,
         protected array $initialData = [],
         protected array $parameters = [],
-        protected array $options = []
+        protected array $options = [],
     ) {
         $options['json'] = $this->data;
 

+ 1 - 1
src/Service/Security/InternalRequestsService.php

@@ -21,7 +21,7 @@ class InternalRequestsService
     ];
 
     public function __construct(
-        readonly private string $internalRequestsToken
+        readonly private string $internalRequestsToken,
     ) {
     }
 

+ 1 - 1
src/Service/Security/Module.php

@@ -18,7 +18,7 @@ class Module
 {
     public function __construct(
         readonly private Reflection $reflection,
-        readonly private ParameterBagInterface $parameterBag
+        readonly private ParameterBagInterface $parameterBag,
     ) {
     }
 

+ 1 - 1
src/Service/Twig/AssetsExtension.php

@@ -20,7 +20,7 @@ use Twig\TwigFunction;
 class AssetsExtension extends AbstractExtension
 {
     public function __construct(
-        readonly private FileManager $fileManager
+        readonly private FileManager $fileManager,
     ) {
     }
 

+ 1 - 1
src/Service/Typo3/BindFileService.php

@@ -10,7 +10,7 @@ namespace App\Service\Typo3;
 class BindFileService
 {
     public function __construct(
-        readonly private string $bindfileBufferFile
+        readonly private string $bindfileBufferFile,
     ) {
     }
 

+ 2 - 2
src/Service/Typo3/SubdomainService.php

@@ -32,7 +32,7 @@ class SubdomainService
         private readonly OrganizationUtils $organizationUtils,
         private readonly BindFileService $bindFileService,
         private readonly AccessRepository $accessRepository,
-        private readonly ParameterBagInterface $parameterBag
+        private readonly ParameterBagInterface $parameterBag,
     ) {
     }
 
@@ -99,7 +99,7 @@ class SubdomainService
     public function addNewSubdomain(
         Organization $organization,
         string $subdomainValue,
-        bool $activate = false
+        bool $activate = false,
     ): Subdomain {
         if (!$this->isValidSubdomain($subdomainValue)) {
             throw new \RuntimeException('Not a valid subdomain');

+ 1 - 1
src/Service/Utils/GpsCoordinateUtils.php

@@ -21,7 +21,7 @@ class GpsCoordinateUtils
     private HttpClientInterface $clientOpenStreetMap;
 
     public function __construct(
-        HttpClientInterface $openstreetmap
+        HttpClientInterface $openstreetmap,
     ) {
         $this->clientOpenStreetMap = $openstreetmap;
     }

+ 1 - 1
src/Service/Utils/Siret.php

@@ -15,7 +15,7 @@ class Siret
     private HttpClientInterface $clientSiret;
 
     public function __construct(
-        HttpClientInterface $siret_checking
+        HttpClientInterface $siret_checking,
     ) {
         $this->clientSiret = $siret_checking;
     }

+ 1 - 1
src/State/Processor/Access/AdminAccessProcessor.php

@@ -23,7 +23,7 @@ class AdminAccessProcessor implements ProcessorInterface
         private Security $security,
         private EntityManagerInterface $entityManager,
         private AccessUtils $accessUtils,
-        private ContactPointUtils $contactPointUtils
+        private ContactPointUtils $contactPointUtils,
     ) {
     }
 

+ 1 - 1
src/State/Processor/EntityProcessor.php

@@ -22,7 +22,7 @@ class EntityProcessor implements ProcessorInterface
     protected OnChangeInterface $onChange;
 
     public function __construct(
-        OnChangeDefault $onChange
+        OnChangeDefault $onChange,
     ) {
         $this->onChange = $onChange;
     }

+ 1 - 1
src/State/Processor/Export/LicenceCmf/ExportRequestProcessor.php

@@ -21,7 +21,7 @@ class ExportRequestProcessor implements ProcessorInterface
     public function __construct(
         private Security $security,
         private MessageBusInterface $messageBus,
-        private ExporterIterator $handler
+        private ExporterIterator $handler,
     ) {
     }
 

+ 1 - 1
src/State/Processor/Organization/OrganizationProcessor.php

@@ -15,7 +15,7 @@ class OrganizationProcessor extends EntityProcessor
 {
     #[Pure]
     public function __construct(
-        OnOrganizationChange $onChange
+        OnOrganizationChange $onChange,
     ) {
         parent::__construct($onChange);
     }

+ 1 - 1
src/State/Processor/Organization/ParametersProcessor.php

@@ -15,7 +15,7 @@ class ParametersProcessor extends EntityProcessor
 {
     #[Pure]
     public function __construct(
-        OnParametersChange $onChange
+        OnParametersChange $onChange,
     ) {
         parent::__construct($onChange);
     }

+ 1 - 1
src/State/Processor/Organization/SubdomainProcessor.php

@@ -22,7 +22,7 @@ class SubdomainProcessor implements ProcessorInterface
 {
     public function __construct(
         private readonly SubdomainService $subdomainService,
-        private Security $security
+        private Security $security,
     ) {
     }
 

+ 1 - 1
src/State/Provider/Access/AccessProfileProvider.php

@@ -21,7 +21,7 @@ final class AccessProfileProvider implements ProviderInterface
 {
     public function __construct(
         private Security $security,
-        private AccessProfileCreator $accessProfileCreator
+        private AccessProfileCreator $accessProfileCreator,
     ) {
     }
 

+ 1 - 1
src/State/Provider/Access/AdminAccessProvider.php

@@ -20,7 +20,7 @@ final class AdminAccessProvider implements ProviderInterface
 {
     public function __construct(
         private Security $security,
-        private AdminAccessUtils $adminAccessUtils
+        private AdminAccessUtils $adminAccessUtils,
     ) {
     }
 

+ 1 - 1
src/State/Provider/Core/DownloadProvider.php

@@ -22,7 +22,7 @@ final class DownloadProvider implements ProviderInterface
 {
     public function __construct(
         private readonly FileRepository $fileRepository,
-        private readonly FileManager $fileManager
+        private readonly FileManager $fileManager,
     ) {
     }
 

+ 1 - 1
src/State/Provider/Core/ImageProvider.php

@@ -23,7 +23,7 @@ final class ImageProvider implements ProviderInterface
     public function __construct(
         private readonly FileRepository $fileRepository,
         private readonly FileManager $fileManager,
-        private readonly FileUtils $fileUtils
+        private readonly FileUtils $fileUtils,
     ) {
     }
 

+ 1 - 1
src/State/Provider/Enum/EnumProvider.php

@@ -18,7 +18,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 final class EnumProvider implements ProviderInterface
 {
     public function __construct(
-        private readonly ParameterBagInterface $parameterBag
+        private readonly ParameterBagInterface $parameterBag,
     ) {
     }
 

+ 1 - 1
src/State/Provider/OnlineRegistration/RegistrationAvailabilityProvider.php

@@ -14,7 +14,7 @@ class RegistrationAvailabilityProvider implements ProviderInterface
 {
     public function __construct(
         private readonly Security $security,
-        private readonly ApiLegacyRequestService $apiLegacyRequestService
+        private readonly ApiLegacyRequestService $apiLegacyRequestService,
     ) {
     }
 

+ 1 - 1
src/State/Provider/OnlineRegistration/RegistrationStatusProvider.php

@@ -15,7 +15,7 @@ class RegistrationStatusProvider implements ProviderInterface
 {
     public function __construct(
         private readonly Security $security,
-        private readonly ApiLegacyRequestService $apiLegacyRequestService
+        private readonly ApiLegacyRequestService $apiLegacyRequestService,
     ) {
     }
 

+ 1 - 1
src/State/Provider/Organization/Subdomain/SubdomainAvailabilityProvider.php

@@ -16,7 +16,7 @@ use Symfony\Component\HttpFoundation\Response;
 final class SubdomainAvailabilityProvider implements ProviderInterface
 {
     public function __construct(
-        private readonly SubdomainService $subdomainService
+        private readonly SubdomainService $subdomainService,
     ) {
     }
 

+ 1 - 1
src/State/Provider/Utils/GpsCoordinateSearchingProvider.php

@@ -24,7 +24,7 @@ final class GpsCoordinateSearchingProvider implements ProviderInterface
 {
     public function __construct(
         private readonly GpsCoordinateUtils $gpsCoordinateUtils,
-        private readonly RequestStack $requestStack
+        private readonly RequestStack $requestStack,
     ) {
     }
 

+ 1 - 1
src/State/Provider/Utils/SiretProvider.php

@@ -21,7 +21,7 @@ use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
 final class SiretProvider implements ProviderInterface
 {
     public function __construct(
-        private readonly SiretUtils $siretUtils
+        private readonly SiretUtils $siretUtils,
     ) {
     }
 

+ 119 - 0
tests/Unit/Doctrine/AbstractExtensionTest.php

@@ -0,0 +1,119 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Tests\Unit\Doctrine;
+
+use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
+use ApiPlatform\Metadata\Operation;
+use Doctrine\ORM\QueryBuilder;
+use PHPUnit\Framework\MockObject\MockObject;
+
+class TestableAbstractExtension extends \App\Doctrine\AbstractExtension
+{
+    public function apply(QueryBuilder $queryBuilder, string $resourceClass, ?Operation $operation): void
+    {
+        parent::apply($queryBuilder, $resourceClass, $operation);
+    }
+
+    public function supports(string $resourceClass, ?Operation $operation): bool
+    {
+        throw new \Exception('This method should not be called');
+    }
+
+    public function addWhere(QueryBuilder $queryBuilder, string $resourceClass, ?Operation $operation): void
+    {
+        throw new \Exception('This method should not be called');
+    }
+}
+
+class AbstractExtensionTest extends ExtensionTestCase
+{
+    protected function getMockObjectFor(string $methodName): MockObject|TestableAbstractExtension
+    {
+        return $this
+            ->getMockBuilder(TestableAbstractExtension::class)
+            ->setMethodsExcept([$methodName])
+            ->getMock();
+    }
+
+    public function testApplyToCollection(): void
+    {
+        $extension = $this->getMockObjectFor('applyToCollection');
+
+        $queryNameGeneratorInterface = $this->getMockBuilder(QueryNameGeneratorInterface::class)->getMock();
+        $operation = $this->getMockBuilder(Operation::class)->getMock();
+
+        $extension
+            ->expects($this->once())
+            ->method('apply')
+            ->with($this->queryBuilder, 'App\Entity\Access\Access', $operation);
+
+        $extension->applyToCollection(
+            $this->queryBuilder,
+            $queryNameGeneratorInterface,
+            'App\Entity\Access\Access',
+            $operation
+        );
+    }
+
+    public function testApplyToItem(): void
+    {
+        $extension = $this->getMockObjectFor('applyToItem');
+
+        $queryNameGeneratorInterface = $this->getMockBuilder(QueryNameGeneratorInterface::class)->getMock();
+        $operation = $this->getMockBuilder(Operation::class)->getMock();
+
+        $extension
+            ->expects($this->once())
+            ->method('apply')
+            ->with($this->queryBuilder, 'App\Entity\Access\Access', $operation);
+
+        $extension->applyToItem(
+            $this->queryBuilder,
+            $queryNameGeneratorInterface,
+            'App\Entity\Access\Access',
+            [],
+            $operation
+        );
+    }
+
+    public function testApply(): void
+    {
+        $extension = $this->getMockObjectFor('apply');
+
+        $operation = $this->getMockBuilder(Operation::class)->getMock();
+
+        $extension
+            ->expects($this->once())
+            ->method('supports')
+            ->with('App\Entity\Access\Access', $operation)
+            ->willReturn(true);
+
+        $extension
+            ->expects(self::once())
+            ->method('addWhere')
+            ->with($this->queryBuilder, 'App\Entity\Access\Access', $operation);
+
+        $extension->apply($this->queryBuilder, 'App\Entity\Access\Access', $operation);
+    }
+
+    public function testApplyNoSupport(): void
+    {
+        $extension = $this->getMockObjectFor('apply');
+
+        $operation = $this->getMockBuilder(Operation::class)->getMock();
+
+        $extension
+            ->expects($this->once())
+            ->method('supports')
+            ->with('App\Entity\Access\Access', $operation)
+            ->willReturn(false);
+
+        $extension
+            ->expects(self::never())
+            ->method('addWhere');
+
+        $extension->apply($this->queryBuilder, 'App\Entity\Access\Access', $operation);
+    }
+}

+ 109 - 0
tests/Unit/Doctrine/Access/CurrentAccessExtensionTest.php

@@ -0,0 +1,109 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Tests\Unit\Doctrine\Access;
+
+use App\Doctrine\Access\CurrentAccessExtension;
+use App\Entity\Access\Access;
+use App\Service\ServiceIterator\CurrentAccessExtensionIterator;
+use App\Tests\Unit\Doctrine\ExtensionTestCase;
+use PHPUnit\Framework\MockObject\MockObject;
+
+class CurrentAccessExtensionTest extends ExtensionTestCase
+{
+    private CurrentAccessExtension $extension;
+    private CurrentAccessExtensionIterator|MockObject $currentAccessExtensionIterator;
+
+    protected function setUp(): void
+    {
+        parent::setUp();
+        $this->currentAccessExtensionIterator = $this->createMock(CurrentAccessExtensionIterator::class);
+        $this->extension = new CurrentAccessExtension($this->security, $this->currentAccessExtensionIterator);
+    }
+
+    public function testSupportsReturnsTrueForAccessClass(): void
+    {
+        $this->assertTrue(
+            $this->extension->supports(Access::class, null)
+        );
+    }
+
+    public function testSupportsReturnsFalseForOtherClasses(): void
+    {
+        $this->assertFalse(
+            $this->extension->supports('OtherClass', null)
+        );
+    }
+
+    public function testAddWhere(): void
+    {
+        $this->security->method('getToken')->willReturn($this->token);
+
+        $this->token->method('getUser')->willReturn($this->user);
+
+        $this->user->method('getOrganization')->willReturn($this->organization);
+
+        $this->queryBuilder->method('getRootAliases')->willReturn(['a']);
+
+        $this->queryBuilder->expects($this->once())
+            ->method('andWhere')
+            ->with('a.organization = :current_organization')
+            ->willReturn($this->queryBuilder);
+
+        $this->queryBuilder->expects($this->once())
+            ->method('setParameter')
+            ->with('current_organization', $this->organization)
+            ->willReturn($this->queryBuilder);
+
+        $this->currentAccessExtensionIterator->expects($this->once())
+            ->method('addWhere')
+            ->with($this->queryBuilder, '');
+
+        $this->invokeAddWhere($this->extension, $this->queryBuilder, Access::class, null);
+    }
+
+    public function testAddWhereMissingToken(): void
+    {
+        $this->security->method('getToken')->willReturn(null);
+
+        $this->token->expects(self::never())->method('getUser');
+        $this->user->expects(self::never())->method('getOrganization');
+        $this->queryBuilder->expects(self::never())->method('getRootAliases');
+        $this->queryBuilder->expects(self::never())->method('andWhere');
+        $this->queryBuilder->expects($this->never())->method('setParameter');
+        $this->currentAccessExtensionIterator->expects($this->never())->method('addWhere');
+
+        $this->invokeAddWhere($this->extension, $this->queryBuilder, Access::class, null);
+    }
+
+    public function testAddWhereMissingAccess(): void
+    {
+        $this->security->expects(self::once())->method('getToken')->willReturn($this->token);
+        $this->token->expects(self::once())->method('getUser')->willReturn(null);
+
+        $this->user->expects(self::never())->method('getOrganization');
+        $this->queryBuilder->expects(self::never())->method('getRootAliases');
+        $this->queryBuilder->expects(self::never())->method('andWhere');
+        $this->queryBuilder->expects($this->never())->method('setParameter');
+        $this->currentAccessExtensionIterator->expects($this->never())->method('addWhere');
+
+        $this->invokeAddWhere($this->extension, $this->queryBuilder, Access::class, null);
+    }
+
+    public function testAddWhereNoRootAlias(): void
+    {
+        $this->security->expects(self::once())->method('getToken')->willReturn($this->token);
+        $this->token->expects(self::once())->method('getUser')->willReturn($this->user);
+        $this->user->expects(self::once())->method('getOrganization')->willReturn($this->organization);
+        $this->queryBuilder->expects(self::once())->method('getRootAliases')->willReturn([]);
+
+        $this->queryBuilder->expects(self::never())->method('andWhere');
+        $this->queryBuilder->expects($this->never())->method('setParameter');
+        $this->currentAccessExtensionIterator->expects($this->never())->method('addWhere');
+
+        $this->expectException(\LogicException::class);
+
+        $this->invokeAddWhere($this->extension, $this->queryBuilder, Access::class, null);
+    }
+}

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików