AbstractExtensionTest.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Tests\Unit\Doctrine;
  4. use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
  5. use ApiPlatform\Metadata\Operation;
  6. use Doctrine\ORM\QueryBuilder;
  7. use PHPUnit\Framework\MockObject\MockObject;
  8. class TestableAbstractExtension extends \App\Doctrine\AbstractExtension
  9. {
  10. public function apply(QueryBuilder $queryBuilder, string $resourceClass, ?Operation $operation): void
  11. {
  12. parent::apply($queryBuilder, $resourceClass, $operation);
  13. }
  14. public function supports(string $resourceClass, ?Operation $operation): bool
  15. {
  16. throw new \Exception('This method should not be called');
  17. }
  18. public function addWhere(QueryBuilder $queryBuilder, string $resourceClass, ?Operation $operation): void
  19. {
  20. throw new \Exception('This method should not be called');
  21. }
  22. }
  23. class AbstractExtensionTest extends ExtensionTestCase
  24. {
  25. protected function getMockObjectFor(string $methodName): MockObject|TestableAbstractExtension
  26. {
  27. return $this
  28. ->getMockBuilder(TestableAbstractExtension::class)
  29. ->setMethodsExcept([$methodName])
  30. ->getMock();
  31. }
  32. public function testApplyToCollection(): void
  33. {
  34. $extension = $this->getMockObjectFor('applyToCollection');
  35. $queryNameGeneratorInterface = $this->getMockBuilder(QueryNameGeneratorInterface::class)->getMock();
  36. $operation = $this->getMockBuilder(Operation::class)->getMock();
  37. $extension
  38. ->expects($this->once())
  39. ->method('apply')
  40. ->with($this->queryBuilder, 'App\Entity\Access\Access', $operation);
  41. $extension->applyToCollection(
  42. $this->queryBuilder,
  43. $queryNameGeneratorInterface,
  44. 'App\Entity\Access\Access',
  45. $operation
  46. );
  47. }
  48. public function testApplyToItem(): void
  49. {
  50. $extension = $this->getMockObjectFor('applyToItem');
  51. $queryNameGeneratorInterface = $this->getMockBuilder(QueryNameGeneratorInterface::class)->getMock();
  52. $operation = $this->getMockBuilder(Operation::class)->getMock();
  53. $extension
  54. ->expects($this->once())
  55. ->method('apply')
  56. ->with($this->queryBuilder, 'App\Entity\Access\Access', $operation);
  57. $extension->applyToItem(
  58. $this->queryBuilder,
  59. $queryNameGeneratorInterface,
  60. 'App\Entity\Access\Access',
  61. [],
  62. $operation
  63. );
  64. }
  65. public function testApply(): void
  66. {
  67. $extension = $this->getMockObjectFor('apply');
  68. $operation = $this->getMockBuilder(Operation::class)->getMock();
  69. $extension
  70. ->expects($this->once())
  71. ->method('supports')
  72. ->with('App\Entity\Access\Access', $operation)
  73. ->willReturn(true);
  74. $extension
  75. ->expects(self::once())
  76. ->method('addWhere')
  77. ->with($this->queryBuilder, 'App\Entity\Access\Access', $operation);
  78. $extension->apply($this->queryBuilder, 'App\Entity\Access\Access', $operation);
  79. }
  80. public function testApplyNoSupport(): void
  81. {
  82. $extension = $this->getMockObjectFor('apply');
  83. $operation = $this->getMockBuilder(Operation::class)->getMock();
  84. $extension
  85. ->expects($this->once())
  86. ->method('supports')
  87. ->with('App\Entity\Access\Access', $operation)
  88. ->willReturn(false);
  89. $extension
  90. ->expects(self::never())
  91. ->method('addWhere');
  92. $extension->apply($this->queryBuilder, 'App\Entity\Access\Access', $operation);
  93. }
  94. }