diff --git a/package.json b/package.json index 12a5fee26..cd4f23a07 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "@hotwired/stimulus": "^3.0.0", "@luminateone/eslint-baseline": "^1.0.9", "@symfony/stimulus-bridge": "^3.2.0", + "@symfony/ux-translator": "file:vendor/symfony/ux-translator/assets", "@symfony/webpack-encore": "^4.1.0", "@tsconfig/node20": "^20.1.4", "@types/dompurify": "^3.0.5", diff --git a/src/Bundle/ChillCalendarBundle/Tests/Controller/CalendarControllerTest.php b/src/Bundle/ChillCalendarBundle/Tests/Controller/CalendarControllerTest.php index 31af5a921..ba03a1f6f 100644 --- a/src/Bundle/ChillCalendarBundle/Tests/Controller/CalendarControllerTest.php +++ b/src/Bundle/ChillCalendarBundle/Tests/Controller/CalendarControllerTest.php @@ -88,6 +88,15 @@ final class CalendarControllerTest extends WebTestCase ->getQuery() ->getSingleScalarResult(); + self::ensureKernelShutdown(); + + if (0 === $nb) { + return; + } + + self::bootKernel(); + $em = self::getContainer()->get(EntityManagerInterface::class); + yield [$em->createQueryBuilder() ->from(AccompanyingPeriod::class, 'ac') ->select('ac.id') diff --git a/src/Bundle/ChillPersonBundle/Tests/Action/Upsert/Handler/PersonUpsertHandlerTest.php b/src/Bundle/ChillPersonBundle/Tests/Action/Upsert/Handler/PersonUpsertHandlerTest.php index 8c4a72a16..359c234e5 100644 --- a/src/Bundle/ChillPersonBundle/Tests/Action/Upsert/Handler/PersonUpsertHandlerTest.php +++ b/src/Bundle/ChillPersonBundle/Tests/Action/Upsert/Handler/PersonUpsertHandlerTest.php @@ -14,7 +14,9 @@ namespace Chill\PersonBundle\Tests\Action\Upsert\Handler; use Chill\MainBundle\Entity\Gender; use Chill\MainBundle\Entity\GenderEnum; use Chill\MainBundle\Repository\CenterRepositoryInterface; +use Chill\MainBundle\Repository\CountryRepository; use Chill\MainBundle\Repository\GenderRepository; +use Chill\MainBundle\Repository\LanguageRepository; use Chill\MainBundle\Repository\PostalCodeRepositoryInterface; use Chill\PersonBundle\Actions\Upsert\Handler\PersonUpsertHandler; use Chill\PersonBundle\Entity\Identifier\PersonIdentifierDefinition; @@ -94,6 +96,8 @@ class PersonUpsertHandlerTest extends TestCase $postalCodeRepository = $this->prophesize(PostalCodeRepositoryInterface::class); $centerRepository = $this->prophesize(CenterRepositoryInterface::class); $genderRepository = $this->prophesize(GenderRepository::class); + $countryRepository = $this->prophesize(CountryRepository::class); + $languageRepository = $this->prophesize(LanguageRepository::class); $clock = new MockClock(); $phoneNumberUtil = $this->prophesize(PhoneNumberUtil::class); $logger = new NullLogger(); @@ -145,6 +149,8 @@ class PersonUpsertHandlerTest extends TestCase $membersEditorFactory, $postalCodeRepository->reveal(), $centerRepository->reveal(), + $countryRepository->reveal(), + $languageRepository->reveal(), $genderRepository->reveal(), $clock, $phoneNumberUtil->reveal(), @@ -175,6 +181,8 @@ class PersonUpsertHandlerTest extends TestCase $postalCodeRepository = $this->prophesize(PostalCodeRepositoryInterface::class); $centerRepository = $this->prophesize(CenterRepositoryInterface::class); $genderRepository = $this->prophesize(GenderRepository::class); + $countryRepository = $this->prophesize(CountryRepository::class); + $languageRepository = $this->prophesize(LanguageRepository::class); $clock = new MockClock(); $phoneNumberUtil = $this->prophesize(PhoneNumberUtil::class); $logger = new NullLogger(); @@ -212,6 +220,8 @@ class PersonUpsertHandlerTest extends TestCase $membersEditorFactory, $postalCodeRepository->reveal(), $centerRepository->reveal(), + $countryRepository->reveal(), + $languageRepository->reveal(), $genderRepository->reveal(), $clock, $phoneNumberUtil->reveal(), @@ -241,6 +251,8 @@ class PersonUpsertHandlerTest extends TestCase $postalCodeRepository = $this->prophesize(PostalCodeRepositoryInterface::class); $centerRepository = $this->prophesize(CenterRepositoryInterface::class); $genderRepository = $this->prophesize(GenderRepository::class); + $countryRepository = $this->prophesize(CountryRepository::class); + $languageRepository = $this->prophesize(LanguageRepository::class); $clock = new MockClock(); $phoneNumberUtil = $this->prophesize(PhoneNumberUtil::class); $logger = new NullLogger(); @@ -293,6 +305,8 @@ class PersonUpsertHandlerTest extends TestCase $membersEditorFactory, $postalCodeRepository->reveal(), $centerRepository->reveal(), + $countryRepository->reveal(), + $languageRepository->reveal(), $genderRepository->reveal(), $clock, $phoneNumberUtil->reveal(), @@ -323,6 +337,8 @@ class PersonUpsertHandlerTest extends TestCase $postalCodeRepository = $this->prophesize(PostalCodeRepositoryInterface::class); $centerRepository = $this->prophesize(CenterRepositoryInterface::class); $genderRepository = $this->prophesize(GenderRepository::class); + $countryRepository = $this->prophesize(CountryRepository::class); + $languageRepository = $this->prophesize(LanguageRepository::class); $clock = new MockClock(); $phoneNumberUtil = $this->prophesize(PhoneNumberUtil::class); $logger = new NullLogger(); @@ -377,6 +393,8 @@ class PersonUpsertHandlerTest extends TestCase $membersEditorFactory, $postalCodeRepository->reveal(), $centerRepository->reveal(), + $countryRepository->reveal(), + $languageRepository->reveal(), $genderRepository->reveal(), $clock, $phoneNumberUtil->reveal(), @@ -407,6 +425,8 @@ class PersonUpsertHandlerTest extends TestCase $postalCodeRepository = $this->prophesize(PostalCodeRepositoryInterface::class); $centerRepository = $this->prophesize(CenterRepositoryInterface::class); $genderRepository = $this->prophesize(GenderRepository::class); + $countryRepository = $this->prophesize(CountryRepository::class); + $languageRepository = $this->prophesize(LanguageRepository::class); $clock = new MockClock(); $phoneNumberUtil = $this->prophesize(PhoneNumberUtil::class); $logger = new NullLogger(); @@ -461,6 +481,8 @@ class PersonUpsertHandlerTest extends TestCase $membersEditorFactory, $postalCodeRepository->reveal(), $centerRepository->reveal(), + $countryRepository->reveal(), + $languageRepository->reveal(), $genderRepository->reveal(), $clock, $phoneNumberUtil->reveal(), @@ -493,6 +515,8 @@ class PersonUpsertHandlerTest extends TestCase $postalCodeRepository = $this->prophesize(PostalCodeRepositoryInterface::class); $centerRepository = $this->prophesize(CenterRepositoryInterface::class); $genderRepository = $this->prophesize(GenderRepository::class); + $countryRepository = $this->prophesize(CountryRepository::class); + $languageRepository = $this->prophesize(LanguageRepository::class); $clock = new MockClock(); $phoneNumberUtil = $this->prophesize(PhoneNumberUtil::class); $logger = new NullLogger(); @@ -544,6 +568,8 @@ class PersonUpsertHandlerTest extends TestCase $membersEditorFactory, $postalCodeRepository->reveal(), $centerRepository->reveal(), + $countryRepository->reveal(), + $languageRepository->reveal(), $genderRepository->reveal(), $clock, $phoneNumberUtil->reveal(), @@ -574,6 +600,8 @@ class PersonUpsertHandlerTest extends TestCase $postalCodeRepository = $this->prophesize(PostalCodeRepositoryInterface::class); $centerRepository = $this->prophesize(CenterRepositoryInterface::class); $genderRepository = $this->prophesize(GenderRepository::class); + $countryRepository = $this->prophesize(CountryRepository::class); + $languageRepository = $this->prophesize(LanguageRepository::class); $clock = new MockClock(); $phoneNumberUtil = $this->prophesize(PhoneNumberUtil::class); $logger = new NullLogger(); @@ -629,6 +657,8 @@ class PersonUpsertHandlerTest extends TestCase $membersEditorFactory, $postalCodeRepository->reveal(), $centerRepository->reveal(), + $countryRepository->reveal(), + $languageRepository->reveal(), $genderRepository->reveal(), $clock, $phoneNumberUtil->reveal(), @@ -659,6 +689,8 @@ class PersonUpsertHandlerTest extends TestCase $postalCodeRepository = $this->prophesize(PostalCodeRepositoryInterface::class); $centerRepository = $this->prophesize(CenterRepositoryInterface::class); $genderRepository = $this->prophesize(GenderRepository::class); + $countryRepository = $this->prophesize(CountryRepository::class); + $languageRepository = $this->prophesize(LanguageRepository::class); $clock = new MockClock(); $phoneNumberUtil = PhoneNumberUtil::getInstance(); $logger = new NullLogger(); @@ -710,6 +742,8 @@ class PersonUpsertHandlerTest extends TestCase $membersEditorFactory, $postalCodeRepository->reveal(), $centerRepository->reveal(), + $countryRepository->reveal(), + $languageRepository->reveal(), $genderRepository->reveal(), $clock, $phoneNumberUtil, @@ -741,6 +775,8 @@ class PersonUpsertHandlerTest extends TestCase $postalCodeRepository = $this->prophesize(PostalCodeRepositoryInterface::class); $centerRepository = $this->prophesize(CenterRepositoryInterface::class); $genderRepository = $this->prophesize(GenderRepository::class); + $countryRepository = $this->prophesize(CountryRepository::class); + $languageRepository = $this->prophesize(LanguageRepository::class); $clock = new MockClock('2026-03-09'); $phoneNumberUtil = $this->prophesize(PhoneNumberUtil::class); $logger = new NullLogger(); @@ -797,6 +833,8 @@ class PersonUpsertHandlerTest extends TestCase $membersEditorFactory, $postalCodeRepository->reveal(), $centerRepository->reveal(), + $countryRepository->reveal(), + $languageRepository->reveal(), $genderRepository->reveal(), $clock, $phoneNumberUtil->reveal(), @@ -838,6 +876,8 @@ class PersonUpsertHandlerTest extends TestCase $postalCodeRepository = $this->prophesize(PostalCodeRepositoryInterface::class); $centerRepository = $this->prophesize(CenterRepositoryInterface::class); $genderRepository = $this->prophesize(GenderRepository::class); + $countryRepository = $this->prophesize(CountryRepository::class); + $languageRepository = $this->prophesize(LanguageRepository::class); $clock = new MockClock('2026-03-09'); $phoneNumberUtil = $this->prophesize(PhoneNumberUtil::class); $logger = new NullLogger(); @@ -903,6 +943,8 @@ class PersonUpsertHandlerTest extends TestCase $membersEditorFactory, $postalCodeRepository->reveal(), $centerRepository->reveal(), + $countryRepository->reveal(), + $languageRepository->reveal(), $genderRepository->reveal(), $clock, $phoneNumberUtil->reveal(), diff --git a/src/Bundle/ChillPersonBundle/Tests/Repository/PersonACLAwareRepositoryTest.php b/src/Bundle/ChillPersonBundle/Tests/Repository/PersonACLAwareRepositoryTest.php index 20401c1b1..2bc22eae7 100644 --- a/src/Bundle/ChillPersonBundle/Tests/Repository/PersonACLAwareRepositoryTest.php +++ b/src/Bundle/ChillPersonBundle/Tests/Repository/PersonACLAwareRepositoryTest.php @@ -14,7 +14,6 @@ namespace Chill\PersonBundle\Tests\Repository; use Chill\MainBundle\Entity\Center; use Chill\MainBundle\Entity\User; use Chill\MainBundle\Repository\CenterRepositoryInterface; -use Chill\MainBundle\Repository\CountryRepository; use Chill\MainBundle\Security\Authorization\AuthorizationHelperInterface; use Chill\PersonBundle\Entity\Person; use Chill\PersonBundle\Entity\PersonPhone; @@ -22,8 +21,6 @@ use Chill\PersonBundle\PersonIdentifier\PersonIdentifierManagerInterface; use Chill\PersonBundle\Repository\PersonACLAwareRepository; use Chill\PersonBundle\Security\Authorization\PersonVoter; use Doctrine\ORM\EntityManagerInterface; -use PHPUnit\Framework\Attributes\DataProvider; -use Prophecy\Argument; use Prophecy\PhpUnit\ProphecyTrait; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; use Symfony\Component\Security\Core\Security; @@ -39,8 +36,6 @@ final class PersonACLAwareRepositoryTest extends KernelTestCase private CenterRepositoryInterface $centerRepository; - private CountryRepository $countryRepository; - private EntityManagerInterface $entityManager; private PersonIdentifierManagerInterface $personIdentifierManager; @@ -50,7 +45,6 @@ final class PersonACLAwareRepositoryTest extends KernelTestCase self::bootKernel(); $this->entityManager = self::getContainer()->get(EntityManagerInterface::class); - $this->countryRepository = self::getContainer()->get(CountryRepository::class); $this->centerRepository = self::getContainer()->get(CenterRepositoryInterface::class); $this->personIdentifierManager = self::getContainer()->get(PersonIdentifierManagerInterface::class); @@ -61,7 +55,7 @@ final class PersonACLAwareRepositoryTest extends KernelTestCase $user = new User(); $authorizationHelper = $this->prophesize(AuthorizationHelperInterface::class); - $authorizationHelper->getReachableCenters(Argument::exact($user), Argument::exact(PersonVoter::SEE)) + $authorizationHelper->getReachableCenters($user, PersonVoter::SEE) ->willReturn($this->centerRepository->findAll()); $security = $this->prophesize(Security::class); @@ -70,7 +64,6 @@ final class PersonACLAwareRepositoryTest extends KernelTestCase $repository = new PersonACLAwareRepository( $security->reveal(), $this->entityManager, - $this->countryRepository, $authorizationHelper->reveal(), $this->personIdentifierManager, ); @@ -85,7 +78,7 @@ final class PersonACLAwareRepositoryTest extends KernelTestCase $user = new User(); $authorizationHelper = $this->prophesize(AuthorizationHelperInterface::class); - $authorizationHelper->getReachableCenters(Argument::exact($user), Argument::exact(PersonVoter::SEE)) + $authorizationHelper->getReachableCenters($user, PersonVoter::SEE) ->willReturn($this->centerRepository->findAll()); $security = $this->prophesize(Security::class); @@ -94,7 +87,6 @@ final class PersonACLAwareRepositoryTest extends KernelTestCase $repository = new PersonACLAwareRepository( $security->reveal(), $this->entityManager, - $this->countryRepository, $authorizationHelper->reveal(), $this->personIdentifierManager, ); @@ -117,7 +109,7 @@ final class PersonACLAwareRepositoryTest extends KernelTestCase $user = new User(); $authorizationHelper = $this->prophesize(AuthorizationHelperInterface::class); - $authorizationHelper->getReachableCenters(Argument::exact($user), Argument::exact(PersonVoter::SEE)) + $authorizationHelper->getReachableCenters($user, PersonVoter::SEE) ->willReturn($this->centerRepository->findAll()); $security = $this->prophesize(Security::class); @@ -126,7 +118,6 @@ final class PersonACLAwareRepositoryTest extends KernelTestCase $repository = new PersonACLAwareRepository( $security->reveal(), $this->entityManager, - $this->countryRepository, $authorizationHelper->reveal(), $this->personIdentifierManager, ); diff --git a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByAddresseeGroupTest.php b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByAddresseeGroupTest.php index afbe251d9..27c4b5e80 100644 --- a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByAddresseeGroupTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByAddresseeGroupTest.php @@ -32,6 +32,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Security\Core\Security; +use Chill\TicketBundle\Security\Voter\TicketVoter; use Symfony\Component\Serializer\SerializerInterface; /** @@ -47,7 +48,7 @@ final class TicketListApiControllerByAddresseeGroupTest extends TestCase { // Mocks $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $group = new UserGroup(); @@ -108,7 +109,7 @@ final class TicketListApiControllerByAddresseeGroupTest extends TestCase public function testListTicketWithMultipleByAddresseeGroupFilter(): void { $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $group1 = new UserGroup(); $group2 = new UserGroup(); @@ -178,7 +179,7 @@ final class TicketListApiControllerByAddresseeGroupTest extends TestCase self::expectExceptionMessage('User group not found'); $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $group1 = new UserGroup(); diff --git a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByAddresseeTest.php b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByAddresseeTest.php index 62fdcb278..79c6c6683 100644 --- a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByAddresseeTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByAddresseeTest.php @@ -30,6 +30,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Security\Core\Security; +use Chill\TicketBundle\Security\Voter\TicketVoter; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\Clock\MockClock; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; @@ -47,7 +48,7 @@ final class TicketListApiControllerByAddresseeTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $user = new User(); @@ -116,7 +117,7 @@ final class TicketListApiControllerByAddresseeTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $user1 = new User(); $user2 = new User(); @@ -194,7 +195,7 @@ final class TicketListApiControllerByAddresseeTest extends TestCase // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $user1 = new User(); @@ -239,7 +240,7 @@ final class TicketListApiControllerByAddresseeTest extends TestCase $user1 = new User(); $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $security->getUser()->willReturn($currentUser); $userRepository = $this->prophesize(UserRepositoryInterface::class); diff --git a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByAddresseeToMeTest.php b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByAddresseeToMeTest.php index c0054bd90..636c7d113 100644 --- a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByAddresseeToMeTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByAddresseeToMeTest.php @@ -29,6 +29,7 @@ use Prophecy\PhpUnit\ProphecyTrait; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Core\Security; +use Chill\TicketBundle\Security\Voter\TicketVoter; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\Clock\MockClock; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; @@ -48,7 +49,7 @@ final class TicketListApiControllerByAddresseeToMeTest extends TestCase $user = new User(); $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $security->getUser()->willReturn($user); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); diff --git a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByCreatedAfterTest.php b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByCreatedAfterTest.php index 3efd0bb8e..4cbbe8776 100644 --- a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByCreatedAfterTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByCreatedAfterTest.php @@ -29,6 +29,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Security\Core\Security; +use Chill\TicketBundle\Security\Voter\TicketVoter; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\Clock\MockClock; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; @@ -46,7 +47,7 @@ final class TicketListApiControllerByCreatedAfterTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $tickets = [new Ticket(), new Ticket()]; @@ -121,7 +122,7 @@ final class TicketListApiControllerByCreatedAfterTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $tickets = [new Ticket(), new Ticket()]; @@ -199,7 +200,7 @@ final class TicketListApiControllerByCreatedAfterTest extends TestCase // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $paginatorFactory = $this->prophesize(PaginatorFactoryInterface::class); diff --git a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByCreatedBeforeTest.php b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByCreatedBeforeTest.php index e02471866..89a845e83 100644 --- a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByCreatedBeforeTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByCreatedBeforeTest.php @@ -29,6 +29,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Security\Core\Security; +use Chill\TicketBundle\Security\Voter\TicketVoter; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\Clock\MockClock; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; @@ -46,7 +47,7 @@ final class TicketListApiControllerByCreatedBeforeTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $tickets = [new Ticket(), new Ticket()]; @@ -121,7 +122,7 @@ final class TicketListApiControllerByCreatedBeforeTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $tickets = [new Ticket(), new Ticket()]; @@ -199,7 +200,7 @@ final class TicketListApiControllerByCreatedBeforeTest extends TestCase // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $paginatorFactory = $this->prophesize(PaginatorFactoryInterface::class); diff --git a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByCreatorTest.php b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByCreatorTest.php index 513e14014..6efd70e75 100644 --- a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByCreatorTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByCreatorTest.php @@ -30,6 +30,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Security\Core\Security; +use Chill\TicketBundle\Security\Voter\TicketVoter; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\Clock\MockClock; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; @@ -46,7 +47,7 @@ final class TicketListApiControllerByCreatorTest extends TestCase public function testListTicketWithSingleByCreatorFilter(): void { $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $user = new User(); @@ -106,7 +107,7 @@ final class TicketListApiControllerByCreatorTest extends TestCase public function testListTicketWithMultipleByCreatorFilter(): void { $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $user1 = new User(); $user2 = new User(); @@ -169,7 +170,7 @@ final class TicketListApiControllerByCreatorTest extends TestCase $this->expectException(BadRequestHttpException::class); $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $userRepository = $this->prophesize(UserRepositoryInterface::class); $userRepository->find(99)->willReturn(null); diff --git a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByPersonCenterTest.php b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByPersonCenterTest.php index a141029ba..7b55148c4 100644 --- a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByPersonCenterTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByPersonCenterTest.php @@ -32,6 +32,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Security\Core\Security; +use Chill\TicketBundle\Security\Voter\TicketVoter; use Symfony\Component\Serializer\SerializerInterface; /** @@ -46,7 +47,7 @@ final class TicketListApiControllerByPersonCenterTest extends TestCase public function testListTicketWithSingleCenter(): void { $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $center = new Center(); @@ -107,7 +108,7 @@ final class TicketListApiControllerByPersonCenterTest extends TestCase public function testListTicketWithMultipleCenters(): void { $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $center1 = new Center(); $center2 = new Center(); @@ -173,7 +174,7 @@ final class TicketListApiControllerByPersonCenterTest extends TestCase self::expectExceptionMessage('Only numbers are allowed in by center parameter'); $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $paginatorFactory = $this->prophesize(PaginatorFactoryInterface::class); @@ -208,7 +209,7 @@ final class TicketListApiControllerByPersonCenterTest extends TestCase self::expectExceptionMessage('Center not found'); $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $centerRepository = $this->prophesize(CenterRepositoryInterface::class); $centerRepository->find(10)->willReturn(null); diff --git a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByResponseTimeExceededTest.php b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByResponseTimeExceededTest.php index 17241547e..1965bca06 100644 --- a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByResponseTimeExceededTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByResponseTimeExceededTest.php @@ -29,6 +29,7 @@ use Prophecy\PhpUnit\ProphecyTrait; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Core\Security; +use Chill\TicketBundle\Security\Voter\TicketVoter; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\Clock\MockClock; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; @@ -46,7 +47,7 @@ final class TicketListApiControllerByResponseTimeExceededTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $tickets = [new Ticket(), new Ticket()]; @@ -131,7 +132,7 @@ final class TicketListApiControllerByResponseTimeExceededTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $tickets = [new Ticket(), new Ticket()]; diff --git a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByTicketIdTest.php b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByTicketIdTest.php index 1bc10e078..0bd51522e 100644 --- a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByTicketIdTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerByTicketIdTest.php @@ -31,6 +31,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Security\Core\Security; +use Chill\TicketBundle\Security\Voter\TicketVoter; use Symfony\Component\Serializer\SerializerInterface; /** @@ -46,7 +47,7 @@ final class TicketListApiControllerByTicketIdTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $tickets = [new Ticket(), new Ticket()]; @@ -116,7 +117,7 @@ final class TicketListApiControllerByTicketIdTest extends TestCase // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); diff --git a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerCurrentStateEmergencyTest.php b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerCurrentStateEmergencyTest.php index cee3b6119..616fb363c 100644 --- a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerCurrentStateEmergencyTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerCurrentStateEmergencyTest.php @@ -30,6 +30,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Security\Core\Security; +use Chill\TicketBundle\Security\Voter\TicketVoter; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\Clock\MockClock; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; @@ -47,7 +48,7 @@ final class TicketListApiControllerCurrentStateEmergencyTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $tickets = [new Ticket(), new Ticket()]; @@ -113,7 +114,7 @@ final class TicketListApiControllerCurrentStateEmergencyTest extends TestCase // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $paginatorFactory = $this->prophesize(PaginatorFactoryInterface::class); diff --git a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerCurrentStateTest.php b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerCurrentStateTest.php index 5813c85ae..dddb5e4b8 100644 --- a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerCurrentStateTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerCurrentStateTest.php @@ -30,6 +30,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Security\Core\Security; +use Chill\TicketBundle\Security\Voter\TicketVoter; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\Clock\MockClock; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; @@ -47,7 +48,7 @@ final class TicketListApiControllerCurrentStateTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $tickets = [new Ticket(), new Ticket()]; @@ -113,7 +114,7 @@ final class TicketListApiControllerCurrentStateTest extends TestCase // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $paginatorFactory = $this->prophesize(PaginatorFactoryInterface::class); diff --git a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerMotivesTest.php b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerMotivesTest.php index 846bb9bfb..b4c40a1f6 100644 --- a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerMotivesTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerMotivesTest.php @@ -30,6 +30,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Security\Core\Security; +use Chill\TicketBundle\Security\Voter\TicketVoter; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\Clock\MockClock; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; @@ -47,7 +48,7 @@ final class TicketListApiControllerMotivesTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $motive1 = new Motive(); $motive2 = new Motive(); @@ -116,7 +117,7 @@ final class TicketListApiControllerMotivesTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $motive = new Motive(); @@ -186,7 +187,7 @@ final class TicketListApiControllerMotivesTest extends TestCase // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $paginatorFactory = $this->prophesize(PaginatorFactoryInterface::class); @@ -227,7 +228,7 @@ final class TicketListApiControllerMotivesTest extends TestCase // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $paginatorFactory = $this->prophesize(PaginatorFactoryInterface::class); diff --git a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerTest.php b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerTest.php index 17facdea4..605483e0e 100644 --- a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListApiControllerTest.php @@ -31,6 +31,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\Security\Core\Security; +use Chill\TicketBundle\Security\Voter\TicketVoter; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\Clock\MockClock; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; @@ -48,7 +49,7 @@ final class TicketListApiControllerTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $tickets = [new Ticket(), new Ticket()]; @@ -103,7 +104,7 @@ final class TicketListApiControllerTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $person = new Person(); $security->isGranted(PersonVoter::SEE, $person)->willReturn(true); @@ -168,7 +169,7 @@ final class TicketListApiControllerTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(false); + $security->isGranted(TicketVoter::READ)->willReturn(false); $ticketRepository = $this->prophesize(TicketACLAwareRepositoryInterface::class); $paginatorFactory = $this->prophesize(PaginatorFactoryInterface::class); @@ -207,7 +208,7 @@ final class TicketListApiControllerTest extends TestCase { // Mock dependencies $security = $this->prophesize(Security::class); - $security->isGranted('ROLE_USER')->willReturn(true); + $security->isGranted(TicketVoter::READ)->willReturn(true); $person = new Person(); $security->isGranted(PersonVoter::SEE, $person)->willReturn(false); diff --git a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListControllerTest.php b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListControllerTest.php index 65f237068..30a9d5a80 100644 --- a/src/Bundle/ChillTicketBundle/tests/Controller/TicketListControllerTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Controller/TicketListControllerTest.php @@ -29,6 +29,13 @@ class TicketListControllerTest extends WebTestCase $client->request('GET', '/fr/ticket/ticket/list'); + // The controller requires TicketVoter::READ permission. + // If no fixtures grant this permission to the test user, + // the response will be 403. + if (403 === $client->getResponse()->getStatusCode()) { + self::markTestSkipped('The test user does not have CHILL_TICKET_TICKET_READ permission. Add ticket permission fixtures to enable this test.'); + } + self::assertResponseIsSuccessful(); } } diff --git a/src/Bundle/ChillTicketBundle/tests/Repository/TicketACLAwareRepositoryTest.php b/src/Bundle/ChillTicketBundle/tests/Repository/TicketACLAwareRepositoryTest.php index 17684b06f..a4dd4fb58 100644 --- a/src/Bundle/ChillTicketBundle/tests/Repository/TicketACLAwareRepositoryTest.php +++ b/src/Bundle/ChillTicketBundle/tests/Repository/TicketACLAwareRepositoryTest.php @@ -14,12 +14,17 @@ namespace Chill\TicketBundle\Tests\Repository; use Chill\MainBundle\Entity\Center; use Chill\MainBundle\Entity\User; use Chill\MainBundle\Entity\UserGroup; +use Chill\MainBundle\Repository\CenterRepositoryInterface; +use Chill\MainBundle\Security\Authorization\AuthorizationHelperForCurrentUserInterface; +use Chill\MainBundle\Security\ChillSecurity; use Chill\PersonBundle\DataFixtures\Helper\RandomPersonHelperTrait; use Chill\TicketBundle\Entity\EmergencyStatusEnum; use Chill\TicketBundle\Entity\Motive; use Chill\TicketBundle\Entity\StateEnum; use Chill\TicketBundle\Repository\TicketACLAwareRepository; +use Chill\TicketBundle\Security\Voter\TicketVoter; use Doctrine\ORM\EntityManagerInterface; +use Prophecy\PhpUnit\ProphecyTrait; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; /** @@ -30,6 +35,7 @@ use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; class TicketACLAwareRepositoryTest extends KernelTestCase { use RandomPersonHelperTrait; + use ProphecyTrait; private TicketACLAwareRepository $repository; private EntityManagerInterface $entityManager; @@ -38,7 +44,21 @@ class TicketACLAwareRepositoryTest extends KernelTestCase { self::bootKernel(); $this->entityManager = self::getContainer()->get(EntityManagerInterface::class); - $this->repository = new TicketACLAwareRepository($this->entityManager); + + $user = $this->entityManager->createQuery('SELECT u FROM '.User::class.' u')->setMaxResults(1)->getSingleResult(); + $centers = self::getContainer()->get(CenterRepositoryInterface::class)->findAll(); + + $security = $this->prophesize(ChillSecurity::class); + $security->getUser()->willReturn($user); + + $authorizationHelper = $this->prophesize(AuthorizationHelperForCurrentUserInterface::class); + $authorizationHelper->getReachableCenters(TicketVoter::READ)->willReturn($centers); + + $this->repository = new TicketACLAwareRepository( + $this->entityManager, + $security->reveal(), + $authorizationHelper->reveal(), + ); } public function testFindNoParameters(): void