AbstractExtensionTest.php 3.6 KB

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