OnParametersChangeTest.php 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace App\Test\Service\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\Organization\OnParametersChange;
  12. use PHPUnit\Framework\TestCase;
  13. class OnParametersChangeTest extends TestCase
  14. {
  15. private Parameters $parameters;
  16. private OnParametersChange $onParametersChange;
  17. private CourseRepository $courseRepositoryMock;
  18. public function setUp():void
  19. {
  20. $this->courseRepositoryMock = $this->getMockBuilder(CourseRepository::class)->disableOriginalConstructor()->getMock();
  21. $this->parameters = new Parameters();
  22. $this->onParametersChange = new OnParametersChange($this->courseRepositoryMock);
  23. }
  24. /**
  25. * @see OnParametersChange::onAdvancedEducationNotationType()
  26. */
  27. public function testOnAdvancedEducationNotationTypeByTeachers(){
  28. $educationNotationConfig = new EducationNotationConfig();
  29. $educationCurriculum = new EducationCurriculum();
  30. $educationNotationConfig->addEducationCurriculum($educationCurriculum);
  31. $organization = new Organization();
  32. $organization->addEducationNotationConfig($educationNotationConfig);
  33. $this->parameters->setAdvancedEducationNotationType(AdvancedEducationNotationTypeEnum::BY_TEACHER()->getValue());
  34. $this->parameters->setOrganization($organization);
  35. $this->assertCount(1, $educationNotationConfig->getEducationCurriculums());
  36. $this->onParametersChange->onAdvancedEducationNotationType($this->parameters);
  37. $this->assertNull($educationNotationConfig->getEducationCurriculums()->first()->getEducationNotationConfig());
  38. }
  39. /**
  40. * @see OnParametersChange::onAdvancedEducationNotationType()
  41. */
  42. public function testOnAdvancedEducationNotationTypeByEducation(){
  43. $educationNotationConfig = new EducationNotationConfig();
  44. $teacher = new Access();
  45. $educationNotationConfig->addTeacher($teacher);
  46. $organization = new Organization();
  47. $organization->addEducationNotationConfig($educationNotationConfig);
  48. $this->parameters->setAdvancedEducationNotationType(AdvancedEducationNotationTypeEnum::BY_EDUCATION()->getValue());
  49. $this->parameters->setOrganization($organization);
  50. $this->assertCount(1, $educationNotationConfig->getTeachers());
  51. $this->onParametersChange->onAdvancedEducationNotationType($this->parameters);
  52. $this->assertNull($educationNotationConfig->getTeachers()->first()->getEducationNotationConfig());
  53. }
  54. /**
  55. * 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
  56. * @throws \Exception
  57. * @see OnParametersChange::onMusicalDate()
  58. */
  59. public function testOnMusicalDate(){
  60. $organization = new Organization();
  61. $this->parameters->setMusicalDate(new \DateTime('2022-09-01'));
  62. $organization->setParameters($this->parameters);
  63. $course = new Course();
  64. $course->setStartYear(2021);
  65. $course->setEndYear(2022);
  66. $course->setDatetimeStart(new \DateTime('2022-09-02'));
  67. $this->courseRepositoryMock
  68. ->method('getCoursesToFrom')
  69. ->willReturn([$course])
  70. ;
  71. $this->onParametersChange->onMusicalDate($organization, new \DateTime('2022-09-05'));
  72. $this->assertEquals(2022, $course->getStartYear());
  73. $this->assertEquals(2023, $course->getEndYear());
  74. }
  75. }