FreemiumEventProcessorTest.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Tests\Unit\State\Processor\Freemium;
  4. use ApiPlatform\Metadata\Delete;
  5. use ApiPlatform\Metadata\Post;
  6. use ApiPlatform\Metadata\Put;
  7. use App\ApiResources\Freemium\FreemiumEvent;
  8. use App\Entity\Booking\Event;
  9. use App\Repository\Booking\EventRepository;
  10. use App\Service\ApiResourceBuilder\Freemium\EventMappingBuilder;
  11. use App\State\Processor\Freemium\FreemiumEventProcessor;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use PHPUnit\Framework\MockObject\MockObject;
  14. use PHPUnit\Framework\TestCase;
  15. /**
  16. * Unit tests for ShopService.
  17. */
  18. class FreemiumEventProcessorTest extends TestCase
  19. {
  20. private readonly MockObject|EntityManagerInterface $entityManager;
  21. private readonly MockObject|EventMappingBuilder $eventMappingBuilder;
  22. private readonly MockObject|EventRepository $eventRepository;
  23. public function setUp(): void
  24. {
  25. $this->entityManager = $this->getMockBuilder(EntityManagerInterface::class)->disableOriginalConstructor()->getMock();
  26. $this->eventMappingBuilder = $this->getMockBuilder(EventMappingBuilder::class)->disableOriginalConstructor()->getMock();
  27. $this->eventRepository = $this->getMockBuilder(EventRepository::class)->disableOriginalConstructor()->getMock();
  28. }
  29. private function getFreemiumEventProcessorMockFor(string $methodName): FreemiumEventProcessor|MockObject
  30. {
  31. $freemiumEventProcessor = $this
  32. ->getMockBuilder(FreemiumEventProcessor::class)
  33. ->setConstructorArgs(
  34. [
  35. $this->entityManager,
  36. $this->eventMappingBuilder,
  37. $this->eventRepository,
  38. ]
  39. )
  40. ->setMethodsExcept([$methodName])
  41. ->getMock();
  42. return $freemiumEventProcessor;
  43. }
  44. /**
  45. * Test process method for POST operation.
  46. */
  47. public function testProcessWithPostMethod(): void
  48. {
  49. $freemiumEventProcessor = $this->getFreemiumEventProcessorMockFor('process');
  50. $data = $this->getMockBuilder(FreemiumEvent::class)->getMock();
  51. $event = $this->getMockBuilder(Event::class)->getMock();
  52. $event->method('getId')->willReturn(1);
  53. $operation = new Post();
  54. $freemiumEventProcessor->expects(self::once())
  55. ->method('getEvent')
  56. ->with($operation)
  57. ->willReturn($event);
  58. $this->eventMappingBuilder->expects(self::once())
  59. ->method('mapInformations')
  60. ->with($event, $data);
  61. $this->entityManager->expects(self::once())
  62. ->method('persist')
  63. ->with($event);
  64. $this->entityManager->expects(self::once())
  65. ->method('flush')
  66. ;
  67. $freemiumEvent = $freemiumEventProcessor->process($data, $operation);
  68. $this->assertEquals(1, $freemiumEvent->id);
  69. }
  70. /**
  71. * Test process method for PUT operation.
  72. */
  73. public function testProcessWithPutMethod(): void
  74. {
  75. $freemiumEventProcessor = $this->getFreemiumEventProcessorMockFor('process');
  76. $data = $this->getMockBuilder(FreemiumEvent::class)->getMock();
  77. $event = $this->getMockBuilder(Event::class)->getMock();
  78. $data->id = 1;
  79. $operation = new Put();
  80. $freemiumEventProcessor->expects(self::once())
  81. ->method('getEvent')
  82. ->with($operation)
  83. ->willReturn($event);
  84. $this->eventMappingBuilder->expects(self::once())
  85. ->method('mapInformations')
  86. ->with($event, $data);
  87. $this->entityManager->expects(self::once())
  88. ->method('persist')
  89. ->with($event);
  90. $this->entityManager->expects(self::once())
  91. ->method('flush')
  92. ;
  93. $freemiumEvent = $freemiumEventProcessor->process($data, $operation);
  94. $this->assertEquals(1, $freemiumEvent->id);
  95. }
  96. /**
  97. * Test process method for DELETE operation.
  98. */
  99. public function testProcessWithDeleteMethod(): void
  100. {
  101. $freemiumEventProcessor = $this->getFreemiumEventProcessorMockFor('process');
  102. $freemiumEvent = $this->getMockBuilder(FreemiumEvent::class)->getMock();
  103. $event = $this->getMockBuilder(Event::class)->getMock();
  104. $operation = new Delete();
  105. $freemiumEventProcessor->expects(self::once())
  106. ->method('getEvent')
  107. ->with($operation)
  108. ->willReturn($event);
  109. $this->entityManager->expects(self::once())
  110. ->method('remove')
  111. ->with($event);
  112. $this->entityManager->expects(self::once())
  113. ->method('flush')
  114. ;
  115. $freemiumEventProcessor->process($freemiumEvent, $operation);
  116. }
  117. }