OnParametersChangeTest.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. namespace App\Test\Service\OnChange\Organization;
  3. use App\Entity\Access\Access;
  4. use App\Entity\Booking\Course;
  5. use App\Entity\Education\EducationCurriculum;
  6. use App\Entity\Education\EducationNotationConfig;
  7. use App\Entity\Organization\Organization;
  8. use App\Entity\Organization\Parameters;
  9. use App\Enum\Education\AdvancedEducationNotationTypeEnum;
  10. use App\Repository\Booking\CourseRepository;
  11. use App\Service\OnChange\Organization\OnParametersChange;
  12. use PHPUnit\Framework\TestCase;
  13. use Symfony\Component\Messenger\MessageBusInterface;
  14. class OnParametersChangeTest extends TestCase
  15. {
  16. private Parameters $parameters;
  17. private OnParametersChange $onParametersChange;
  18. private CourseRepository $courseRepositoryMock;
  19. private \App\Service\Network\Utils $networkUtils;
  20. private MessageBusInterface $messageBus;
  21. public function setUp():void
  22. {
  23. $this->courseRepositoryMock = $this->getMockBuilder(CourseRepository::class)->disableOriginalConstructor()->getMock();
  24. $this->networkUtils = $this->getMockBuilder(\App\Service\Network\Utils::class)->disableOriginalConstructor()->getMock();
  25. $this->messageBus = $this->getMockBuilder(MessageBusInterface::class)->disableOriginalConstructor()->getMock();
  26. $this->parameters = new Parameters();
  27. $this->onParametersChange = new OnParametersChange(
  28. $this->courseRepositoryMock,
  29. $this->networkUtils,
  30. $this->messageBus
  31. );
  32. }
  33. /**
  34. * @see OnParametersChange::onAdvancedEducationNotationTypeChange()
  35. */
  36. public function testOnAdvancedEducationNotationTypeByTeachersChange(){
  37. $educationNotationConfig = new EducationNotationConfig();
  38. $educationCurriculum = new EducationCurriculum();
  39. $educationNotationConfig->addEducationCurriculum($educationCurriculum);
  40. $organization = new Organization();
  41. $organization->addEducationNotationConfig($educationNotationConfig);
  42. $this->parameters->setAdvancedEducationNotationType(AdvancedEducationNotationTypeEnum::BY_TEACHER()->getValue());
  43. $this->parameters->setOrganization($organization);
  44. $this->assertCount(1, $educationNotationConfig->getEducationCurriculums());
  45. $this->onParametersChange->onAdvancedEducationNotationTypeChange($this->parameters);
  46. $this->assertNull($educationNotationConfig->getEducationCurriculums()->first()->getEducationNotationConfig());
  47. }
  48. /**
  49. * @see OnParametersChange::onAdvancedEducationNotationTypeChange()
  50. */
  51. public function testOnAdvancedEducationNotationTypeByEducationChange(){
  52. $educationNotationConfig = new EducationNotationConfig();
  53. $teacher = new Access();
  54. $educationNotationConfig->addTeacher($teacher);
  55. $organization = new Organization();
  56. $organization->addEducationNotationConfig($educationNotationConfig);
  57. $this->parameters->setAdvancedEducationNotationType(AdvancedEducationNotationTypeEnum::BY_EDUCATION()->getValue());
  58. $this->parameters->setOrganization($organization);
  59. $this->assertCount(1, $educationNotationConfig->getTeachers());
  60. $this->onParametersChange->onAdvancedEducationNotationTypeChange($this->parameters);
  61. $this->assertNull($educationNotationConfig->getTeachers()->first()->getEducationNotationConfig());
  62. }
  63. /**
  64. * Un cours qui débute le 2/09/2022, si l'année musical passe du 05/09 au 01/09 alors le cours passe de l'année 2021/2022 à 2022/2023
  65. * @throws \Exception
  66. * @see OnParametersChange::onMusicalDateChange()
  67. */
  68. public function testOnMusicalDateChange(){
  69. $organization = new Organization();
  70. $this->parameters->setMusicalDate(new \DateTime('2022-09-01'));
  71. $organization->setParameters($this->parameters);
  72. $course = new Course();
  73. $course->setStartYear(2021);
  74. $course->setEndYear(2022);
  75. $course->setDatetimeStart(new \DateTime('2022-09-02'));
  76. $this->courseRepositoryMock
  77. ->method('getCoursesToFrom')
  78. ->willReturn([$course])
  79. ;
  80. $this->onParametersChange->onMusicalDateChange($organization, new \DateTime('2022-09-05'));
  81. $this->assertEquals(2022, $course->getStartYear());
  82. $this->assertEquals(2023, $course->getEndYear());
  83. }
  84. }