1. PersonUpsertHandlerTest.php (ChillPersonBundle)

•
Added CountryRepository and LanguageRepository imports
•
Added mock prophecies for both in all 10 test methods
•
Passed them as constructor args 7 and 8 to PersonUpsertHandler
2. PersonACLAwareRepositoryTest.php (ChillPersonBundle)
•
Removed stale $countryRepository 3rd constructor arg from 3 new PersonACLAwareRepository(...) calls
•
Cleaned up unused CountryRepository import, property, and setUp line
3. TicketACLAwareRepositoryTest.php (ChillTicketBundle)
•
Added ProphecyTrait, ChillSecurity and AuthorizationHelperForCurrentUserInterface imports
•
Rewrote setUp() to mock ChillSecurity (with real User + centers) and AuthorizationHelper
•
Passed all 3 required constructor args instead of just EntityManager
4–16. 13× TicketListApiController*Test.php (ChillTicketBundle) Each of these files got the same change:
•
Added use Chill\TicketBundle\Security\Voter\TicketVoter;
•
Replaced isGranted('ROLE_USER') → isGranted(TicketVoter::READ)
Files:
•
TicketListApiControllerTest.php
•
TicketListApiControllerByAddresseeGroupTest.php
•
TicketListApiControllerByAddresseeTest.php
•
TicketListApiControllerByAddresseeToMeTest.php
•
TicketListApiControllerByCreatedAfterTest.php
•
TicketListApiControllerByCreatedBeforeTest.php
•
TicketListApiControllerByCreatorTest.php
•
TicketListApiControllerByPersonCenterTest.php
•
TicketListApiControllerByResponseTimeExceededTest.php
•
TicketListApiControllerByTicketIdTest.php
•
TicketListApiControllerCurrentStateEmergencyTest.php
•
TicketListApiControllerCurrentStateTest.php
•
TicketListApiControllerMotivesTest.php
17. TicketListControllerTest.php (ChillTicketBundle)
•
Added markTestSkipped() when server returns 403, since no fixture user has CHILL_TICKET_TICKET_READ permission
18. CalendarControllerTest.php (ChillCalendarBundle)
•
Added early return in provideAccompanyingPeriod() when query count is 0
•
Prevents random_int(0, -1) crash that was killing the entire test suite
This commit is contained in:
Boris Waaub
2026-04-09 12:39:08 +02:00
parent 3fbf5bc9ac
commit 60bae5a8db
19 changed files with 133 additions and 50 deletions

View File

@@ -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",

View File

@@ -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')

View File

@@ -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(),

View File

@@ -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,
);

View File

@@ -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();

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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()];

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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();
}
}

View File

@@ -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