DateTimeConstraintTest.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <?php
  2. namespace App\Tests\Service\Constraint;
  3. use App\Entity\Access\Access;
  4. use App\Entity\Organization\Organization;
  5. use App\Entity\Organization\Parameters;
  6. use App\Service\Constraint\DateTimeConstraint;
  7. use App\Tests\TestToolsTrait;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use PHPUnit\Framework\TestCase;
  10. class DateTimeConstraintTest extends TestCase
  11. {
  12. use TestToolsTrait;
  13. private DateTimeConstraint $dateTimeConstraint;
  14. private array $periods;
  15. public function setUp(): void
  16. {
  17. $em = $this->getMockBuilder(EntityManagerInterface::class)->disableOriginalConstructor()->getMock();
  18. $organizationUtils = new \App\Service\Organization\Utils();
  19. $this->dateTimeConstraint = new DateTimeConstraint($em, $organizationUtils);
  20. $this->periods = [
  21. 'dateStart' => '2021-12-20',
  22. 'dateEnd' => '2022-08-31'
  23. ];
  24. }
  25. /**
  26. * @see DateTimeConstraint::presentConstraint()
  27. */
  28. public function testPresentConstrain(){
  29. $constraintExpected = [
  30. 'start' => [
  31. '2022-08-31' => 4
  32. ],
  33. 'end' => [
  34. '2021-12-20' => 8,
  35. 'NULL' => 0
  36. ]
  37. ];
  38. $this->assertEquals($constraintExpected, $this->invokeMethod($this->dateTimeConstraint, 'presentConstraint', [$this->periods]));
  39. }
  40. /**
  41. * @see DateTimeConstraint::pastConstraint()
  42. */
  43. public function testPastConstrain(){
  44. $constraintExpected = [
  45. 'end' => [
  46. '2021-12-20' => 1
  47. ]
  48. ];
  49. $this->assertEquals($constraintExpected, $this->invokeMethod($this->dateTimeConstraint, 'pastConstraint', [$this->periods]));
  50. }
  51. /**
  52. * @see DateTimeConstraint::futurConstraint()
  53. */
  54. public function testFuturConstrain(){
  55. $constraintExpected = [
  56. 'start' => [
  57. '2022-08-31' => 5
  58. ]
  59. ];
  60. $this->assertEquals($constraintExpected, $this->invokeMethod($this->dateTimeConstraint, 'futurConstraint', [$this->periods]));
  61. }
  62. /**
  63. * @see DateTimeConstraint::clearNull()
  64. */
  65. public function testClearNull(){
  66. $originalEndConstraint= [
  67. 'end' => [
  68. 'NULL' => 0
  69. ]
  70. ];
  71. $endConstraintExpected = [];
  72. $this->assertEquals($endConstraintExpected, $this->invokeMethod($this->dateTimeConstraint, 'clearNull', [$originalEndConstraint, 'end']));
  73. }
  74. /**
  75. * @see DateTimeConstraint::filterConstraint()
  76. */
  77. public function testFilterConstraint(){
  78. $originalStartConstraint= [
  79. 'start' => [
  80. '2021-12-20' => [8, 1],
  81. '2022-01-01' => [5]
  82. ]
  83. ];
  84. $startConstraintExpected = [
  85. '2022-01-01' => [5]
  86. ];
  87. $this->assertEquals($startConstraintExpected, $this->invokeMethod($this->dateTimeConstraint, 'filterConstraint', [$originalStartConstraint, 'start']));
  88. }
  89. /**
  90. * @see DateTimeConstraint::cleanConstraints()
  91. */
  92. public function testCleanConstraints(){
  93. $originalConstraint= [
  94. 'start' => [
  95. '2022-08-31' => [5]
  96. ],
  97. 'end' => [
  98. '2021-12-20' => [8, 1],
  99. 'NULL' => [0]
  100. ]
  101. ];
  102. $constraintExpected= [
  103. 'start' => [
  104. '2022-08-31' => [5]
  105. ],
  106. 'end' => []
  107. ];
  108. $this->assertEquals($constraintExpected, $this->invokeMethod($this->dateTimeConstraint, 'cleanConstraints', [$originalConstraint]));
  109. }
  110. /**
  111. * @see DateTimeConstraint::addConstraint()
  112. */
  113. public function testAddConstraint(){
  114. $originalConstraint = [
  115. 'start' => [],
  116. 'end' => []
  117. ];
  118. $presentConstraint = [
  119. 'start' => [
  120. '2022-08-31' => 4
  121. ],
  122. 'end' => [
  123. '2021-12-20' => 8,
  124. 'NULL' => 0
  125. ]
  126. ];
  127. $pastConstraint = [
  128. 'end' => [
  129. '2021-12-20' => 1
  130. ]
  131. ];
  132. $constraintAfterStartExpected = [
  133. 'start' => [
  134. '2022-08-31' => [4]
  135. ],
  136. 'end' => [
  137. '2021-12-20' => [8],
  138. 'NULL' => [0]
  139. ]
  140. ];
  141. $constraintAfterEndExpected = [
  142. 'start' => [
  143. '2022-08-31' => [4]
  144. ],
  145. 'end' => [
  146. '2021-12-20' => [8, 1],
  147. 'NULL' => [0]
  148. ]
  149. ];
  150. $this->assertEquals($constraintAfterStartExpected, $this->invokeMethod($this->dateTimeConstraint, 'addConstraint', [$originalConstraint, $presentConstraint]));
  151. $this->assertEquals($constraintAfterEndExpected, $this->invokeMethod($this->dateTimeConstraint, 'addConstraint', [$constraintAfterStartExpected, $pastConstraint]));
  152. }
  153. /**
  154. * @throws \ReflectionException
  155. * @see DateTimeConstraint::getPeriods()
  156. */
  157. public function testGetPeriodsToday(){
  158. $today = new \DateTime('now');
  159. $organization = $this->getMockBuilder(Organization::class)->disableOriginalConstructor()->getMock();
  160. $parameters = new Parameters();
  161. $parameters->setMusicalDate(new \DateTime('2000-09-01'));
  162. $organization->method('getParameters')->willReturn($parameters);
  163. $access = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  164. $access->method('getOrganization')->willReturn($organization);
  165. $activityYear = $today->format('Y');
  166. if($today->format('m') < 9) $activityYear--;
  167. $access->method('getActivityYear')->willReturn(intval($activityYear));
  168. $periodExpected = ['dateStart' => $today->format('Y-m-d'), 'dateEnd' => '2022-08-31'];
  169. $this->assertEquals($periodExpected, $this->invokeMethod($this->dateTimeConstraint, 'getPeriods', [$access]));
  170. }
  171. /**
  172. * @throws \ReflectionException
  173. * @see DateTimeConstraint::getPeriods()
  174. */
  175. public function testGetPeriodsNotToday(){
  176. $organization = $this->getMockBuilder(Organization::class)->disableOriginalConstructor()->getMock();
  177. $access = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  178. $access->method('getOrganization')->willReturn($organization);
  179. $access->method('getActivityYear')->willReturn(2020);
  180. $periodExpected = ['dateStart' => '2020-09-01', 'dateEnd' => '2021-08-31'];
  181. $this->assertEquals($periodExpected, $this->invokeMethod($this->dateTimeConstraint, 'getPeriods', [$access]));
  182. }
  183. /**
  184. * @throws \ReflectionException
  185. * @see DateTimeConstraint::hasCustomPeriods()
  186. */
  187. public function testHasCustomPeriods(){
  188. $historical = ['dateStart' => '2020-09-01', 'dateEnd' => '2021-08-31'];
  189. $this->assertTrue($this->invokeMethod($this->dateTimeConstraint, 'hasCustomPeriods', [$historical]));
  190. }
  191. /**
  192. * @throws \ReflectionException
  193. * @see DateTimeConstraint::hasCustomPeriods()
  194. */
  195. public function testHasNotCustomPeriods(){
  196. $historical = ['dateStart' => null, 'dateEnd' => null];
  197. $this->assertFalse($this->invokeMethod($this->dateTimeConstraint, 'hasCustomPeriods', [$historical]));
  198. }
  199. }