| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 |
- <?php
- namespace App\Tests\Unit\Service\Constraint;
- use App\Entity\Access\Access;
- use App\Entity\Organization\Organization;
- use App\Repository\Access\AccessRepository;
- use App\Service\Constraint\ActivityYearConstraint;
- use App\Service\Organization\Utils as OrganizationUtils;
- use Doctrine\ORM\EntityManagerInterface;
- use PHPUnit\Framework\TestCase;
- class TestableActivityYearConstraint extends ActivityYearConstraint
- {
- public function hasCustomPeriods($historical): bool
- {
- return parent::hasCustomPeriods($historical);
- }
- public function addConstraint(array $contraints, array $newContraint): array
- {
- return parent::addConstraint($contraints, $newContraint);
- }
- public function cleanConstraints(array $constraints): array
- {
- return parent::cleanConstraints($constraints);
- }
- public function getRangeYear(Access $access, string $dateStart, string $dateEnd): array
- {
- return parent::getRangeYear($access, $dateStart, $dateEnd);
- }
- public function presentConstraint(int $year): array
- {
- return parent::presentConstraint($year);
- }
- public function pastConstraint($year): array
- {
- return parent::pastConstraint($year);
- }
- public function futureConstraint($year): array
- {
- return parent::futureConstraint($year);
- }
- public function customConstraint($years): array
- {
- return parent::customConstraint($years);
- }
- }
- class ActivityYearConstraintTest extends TestCase
- {
- private EntityManagerInterface $entityManager;
- private OrganizationUtils $organizationUtils;
- public function setUp(): void
- {
- $this->entityManager = $this->getMockBuilder(EntityManagerInterface::class)->disableOriginalConstructor()->getMock();
- $this->organizationUtils = $this->getMockBuilder(OrganizationUtils::class)->disableOriginalConstructor()->getMock();
- }
- /**
- * @see ActivityYearConstraint::invoke()
- */
- public function testInvokePresentNoCustomPeriods(): void
- {
- $activityYearConstraint = $this->getMockBuilder(TestableActivityYearConstraint::class)
- ->setConstructorArgs([$this->entityManager, $this->organizationUtils])
- ->setMethodsExcept(['invoke'])
- ->getMock();
- $access = $this->getMockBuilder(Access::class)->getMock();
- $accessRepository = $this->getMockBuilder(AccessRepository::class)->disableOriginalConstructor()->getMock();
- $accessRepository->method('find')->with(123)->willReturn($access);
- $this->entityManager->method('getRepository')->with(Access::class)->willReturn($accessRepository);
- $historical = ['future' => false, 'past' => false, 'present' => true, 'dateStart' => null, 'dateEnd' => null];
- $access->method('getHistorical')->willReturn($historical);
- $access->method('getActivityYear')->willReturn(2020);
- $activityYearConstraint->method('hasCustomPeriods')->with($historical)->willReturn(false);
- $constraint = ['foo'];
- $activityYearConstraint->method('presentConstraint')->willReturn($constraint);
- $activityYearConstraint
- ->expects(self::once())
- ->method('addConstraint')
- ->with(['start' => [], 'end' => []], $constraint)
- ->willReturn(['bar']);
- $activityYearConstraint
- ->expects(self::once())
- ->method('cleanConstraints')
- ->with(['bar']);
- $activityYearConstraint->invoke(123);
- }
- /**
- * @see ActivityYearConstraint::invoke()
- */
- public function testInvokePastNoCustomPeriods(): void
- {
- $activityYearConstraint = $this->getMockBuilder(TestableActivityYearConstraint::class)
- ->setConstructorArgs([$this->entityManager, $this->organizationUtils])
- ->setMethodsExcept(['invoke'])
- ->getMock();
- $access = $this->getMockBuilder(Access::class)->getMock();
- $accessRepository = $this->getMockBuilder(AccessRepository::class)->disableOriginalConstructor()->getMock();
- $accessRepository->method('find')->with(123)->willReturn($access);
- $this->entityManager->method('getRepository')->with(Access::class)->willReturn($accessRepository);
- $historical = ['future' => false, 'past' => true, 'present' => false, 'dateStart' => null, 'dateEnd' => null];
- $access->method('getHistorical')->willReturn($historical);
- $access->method('getActivityYear')->willReturn(2020);
- $activityYearConstraint->method('hasCustomPeriods')->with($historical)->willReturn(false);
- $constraint = ['foo'];
- $activityYearConstraint->method('pastConstraint')->willReturn($constraint);
- $activityYearConstraint
- ->expects(self::once())
- ->method('addConstraint')
- ->with(['start' => [], 'end' => []], $constraint)
- ->willReturn(['bar']);
- $activityYearConstraint
- ->expects(self::once())
- ->method('cleanConstraints')
- ->with(['bar']);
- $activityYearConstraint->invoke(123);
- }
- /**
- * @see ActivityYearConstraint::invoke()
- */
- public function testInvokeFutureNoCustomPeriods(): void
- {
- $activityYearConstraint = $this->getMockBuilder(TestableActivityYearConstraint::class)
- ->setConstructorArgs([$this->entityManager, $this->organizationUtils])
- ->setMethodsExcept(['invoke'])
- ->getMock();
- $access = $this->getMockBuilder(Access::class)->getMock();
- $accessRepository = $this->getMockBuilder(AccessRepository::class)->disableOriginalConstructor()->getMock();
- $accessRepository->method('find')->with(123)->willReturn($access);
- $this->entityManager->method('getRepository')->with(Access::class)->willReturn($accessRepository);
- $historical = ['future' => true, 'past' => false, 'present' => false, 'dateStart' => null, 'dateEnd' => null];
- $access->method('getHistorical')->willReturn($historical);
- $access->method('getActivityYear')->willReturn(2020);
- $activityYearConstraint->method('hasCustomPeriods')->with($historical)->willReturn(false);
- $constraint = ['foo'];
- $activityYearConstraint->method('futureConstraint')->willReturn($constraint);
- $activityYearConstraint
- ->expects(self::once())
- ->method('addConstraint')
- ->with(['start' => [], 'end' => []], $constraint)
- ->willReturn(['bar']);
- $activityYearConstraint
- ->expects(self::once())
- ->method('cleanConstraints')
- ->with(['bar']);
- $activityYearConstraint->invoke(123);
- }
- /**
- * @see ActivityYearConstraint::invoke()
- */
- public function testInvokeMultiplePeriodsNoCustom(): void
- {
- $activityYearConstraint = $this->getMockBuilder(TestableActivityYearConstraint::class)
- ->setConstructorArgs([$this->entityManager, $this->organizationUtils])
- ->setMethodsExcept(['invoke'])
- ->getMock();
- $access = $this->getMockBuilder(Access::class)->getMock();
- $accessRepository = $this->getMockBuilder(AccessRepository::class)->disableOriginalConstructor()->getMock();
- $accessRepository->method('find')->with(123)->willReturn($access);
- $this->entityManager->method('getRepository')->with(Access::class)->willReturn($accessRepository);
- $historical = ['future' => true, 'past' => true, 'present' => true, 'dateStart' => null, 'dateEnd' => null];
- $access->method('getHistorical')->willReturn($historical);
- $access->method('getActivityYear')->willReturn(2020);
- $activityYearConstraint->method('hasCustomPeriods')->with($historical)->willReturn(false);
- $activityYearConstraint->method('pastConstraint')->willReturn(['pastConstraint']);
- $activityYearConstraint->method('presentConstraint')->willReturn(['presentConstraint']);
- $activityYearConstraint->method('futureConstraint')->willReturn(['futureConstraint']);
- $activityYearConstraint
- ->expects(self::exactly(3))
- ->method('addConstraint')
- ->withConsecutive(
- [['start' => [], 'end' => []], ['presentConstraint']],
- [['start' => [], 'end' => []], ['pastConstraint']],
- [['start' => [], 'end' => []], ['futureConstraint']]
- )->willReturn(['start' => [], 'end' => []]);
- $activityYearConstraint
- ->expects(self::once())
- ->method('cleanConstraints')
- ->with(['start' => [], 'end' => []]);
- $activityYearConstraint->invoke(123);
- }
- /**
- * @see ActivityYearConstraint::invoke()
- */
- public function testInvokeWithCustom(): void
- {
- $activityYearConstraint = $this->getMockBuilder(TestableActivityYearConstraint::class)
- ->setConstructorArgs([$this->entityManager, $this->organizationUtils])
- ->setMethodsExcept(['invoke'])
- ->getMock();
- $access = $this->getMockBuilder(Access::class)->getMock();
- $accessRepository = $this->getMockBuilder(AccessRepository::class)->disableOriginalConstructor()->getMock();
- $accessRepository->method('find')->with(123)->willReturn($access);
- $this->entityManager->method('getRepository')->with(Access::class)->willReturn($accessRepository);
- $historical = ['future' => false, 'past' => false, 'present' => true, 'dateStart' => '2020-01-01', 'dateEnd' => '2020-02-01'];
- $access->method('getHistorical')->willReturn($historical);
- $access->method('getActivityYear')->willReturn(2020);
- $activityYearConstraint->method('hasCustomPeriods')->with($historical)->willReturn(true);
- $activityYearConstraint->expects(self::never())->method('pastConstraint');
- $activityYearConstraint->expects(self::never())->method('presentConstraint');
- $activityYearConstraint->expects(self::never())->method('futureConstraint');
- $activityYearConstraint
- ->method('getRangeYear')
- ->with($access, '2020-01-01', '2020-02-01')
- ->willReturn(['dateStart' => 2020, 'dateEnd' => 2020]);
- $activityYearConstraint->method('customConstraint')->with(['dateStart' => 2020, 'dateEnd' => 2020])->willReturn(['bar']);
- $activityYearConstraint
- ->expects(self::once())
- ->method('addConstraint')
- ->with(['start' => [], 'end' => []], ['bar'])
- ->willReturn(['start' => [], 'end' => []]);
- $activityYearConstraint
- ->expects(self::once())
- ->method('cleanConstraints')
- ->with(['start' => [], 'end' => []]);
- $activityYearConstraint->invoke(123);
- }
- /**
- * @see ActivityYearConstraint::getRangeYear()
- */
- public function testGetRangeYear(): void
- {
- $activityYearConstraint = $this->getMockBuilder(TestableActivityYearConstraint::class)
- ->setConstructorArgs([$this->entityManager, $this->organizationUtils])
- ->setMethodsExcept(['getRangeYear'])
- ->getMock();
- $organization = $this->getMockBuilder(Organization::class)->getMock();
- $access = $this->getMockBuilder(Access::class)->getMock();
- $access->method('getOrganization')->willReturn($organization);
- $this->organizationUtils
- ->method('getActivityYearSwitchDate')
- ->with($organization, self::isInstanceOf(\DateTime::class))
- ->willReturnOnConsecutiveCalls(
- 2020, 2020, 2020, 2022
- );
- $this->assertEquals(
- ['dateStart' => 2020, 'dateEnd' => 2020],
- $activityYearConstraint->getRangeYear($access, '2020-01-01', '2020-12-31')
- );
- $this->assertEquals(
- ['dateStart' => 2020, 'dateEnd' => 2022],
- $activityYearConstraint->getRangeYear($access, '2020-01-01', '2022-12-31')
- );
- }
- /**
- * @see ActivityYearConstraint::presentConstraint()
- */
- public function testPresentConstraint(): void
- {
- $activityYearConstraint = $this->getMockBuilder(TestableActivityYearConstraint::class)
- ->setConstructorArgs([$this->entityManager, $this->organizationUtils])
- ->setMethodsExcept(['presentConstraint'])
- ->getMock();
- $this->assertEquals(
- ['start' => [2020 => 3]],
- $activityYearConstraint->presentConstraint(2020)
- );
- }
- /**
- * @see ActivityYearConstraint::pastConstraint()
- */
- public function testPastConstraint(): void
- {
- $activityYearConstraint = $this->getMockBuilder(TestableActivityYearConstraint::class)
- ->setConstructorArgs([$this->entityManager, $this->organizationUtils])
- ->setMethodsExcept(['pastConstraint'])
- ->getMock();
- $this->assertEquals(
- ['end' => [2020 => 1]],
- $activityYearConstraint->pastConstraint(2020)
- );
- }
- /**
- * @see ActivityYearConstraint::futureConstraint()
- */
- public function testFutureConstraint(): void
- {
- $activityYearConstraint = $this->getMockBuilder(TestableActivityYearConstraint::class)
- ->setConstructorArgs([$this->entityManager, $this->organizationUtils])
- ->setMethodsExcept(['futureConstraint'])
- ->getMock();
- $this->assertEquals(
- ['start' => [2020 => 5]],
- $activityYearConstraint->futureConstraint(2020)
- );
- }
- /**
- * @see ActivityYearConstraint::customConstraint()
- */
- public function testCustomConstraint(): void
- {
- $activityYearConstraint = $this->getMockBuilder(TestableActivityYearConstraint::class)
- ->setConstructorArgs([$this->entityManager, $this->organizationUtils])
- ->setMethodsExcept(['customConstraint'])
- ->getMock();
- $this->assertEquals(
- ['start' => [2020 => 8, 2022 => 4]],
- $activityYearConstraint->customConstraint(['dateStart' => 2020, 'dateEnd' => 2022])
- );
- }
- }
|