CurrentAccessExtensionTest.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Tests\Unit\Doctrine\Access;
  4. use App\Doctrine\Access\CurrentAccessExtension;
  5. use App\Entity\Access\Access;
  6. use App\Service\ServiceIterator\CurrentAccessExtensionIterator;
  7. use App\Tests\Unit\Doctrine\ExtensionTestCase;
  8. use \PHPUnit\Framework\MockObject\MockObject;
  9. class CurrentAccessExtensionTest extends ExtensionTestCase
  10. {
  11. private CurrentAccessExtension $extension;
  12. private CurrentAccessExtensionIterator|MockObject $currentAccessExtensionIterator;
  13. protected function setUp(): void
  14. {
  15. parent::setUp();
  16. $this->currentAccessExtensionIterator = $this->createMock(CurrentAccessExtensionIterator::class);
  17. $this->extension = new CurrentAccessExtension($this->security, $this->currentAccessExtensionIterator);
  18. }
  19. public function testSupportsReturnsTrueForAccessClass(): void
  20. {
  21. $this->assertTrue(
  22. $this->extension->supports(Access::class, null)
  23. );
  24. }
  25. public function testSupportsReturnsFalseForOtherClasses(): void
  26. {
  27. $this->assertFalse(
  28. $this->extension->supports('OtherClass', null)
  29. );
  30. }
  31. public function testAddWhere(): void
  32. {
  33. $this->security->method('getToken')->willReturn($this->token);
  34. $this->token->method('getUser')->willReturn($this->user);
  35. $this->user->method('getOrganization')->willReturn($this->organization);
  36. $this->queryBuilder->method('getRootAliases')->willReturn(['a']);
  37. $this->queryBuilder->expects($this->once())
  38. ->method('andWhere')
  39. ->with('a.organization = :current_organization')
  40. ->willReturn($this->queryBuilder);
  41. $this->queryBuilder->expects($this->once())
  42. ->method('setParameter')
  43. ->with('current_organization', $this->organization)
  44. ->willReturn($this->queryBuilder);
  45. $this->currentAccessExtensionIterator->expects($this->once())
  46. ->method('addWhere')
  47. ->with($this->queryBuilder, '');
  48. $this->invokeAddWhere($this->extension, $this->queryBuilder, Access::class, null);
  49. }
  50. public function testAddWhereMissingToken(): void
  51. {
  52. $this->security->method('getToken')->willReturn(null);
  53. $this->token->expects(self::never())->method('getUser');
  54. $this->user->expects(self::never())->method('getOrganization');
  55. $this->queryBuilder->expects(self::never())->method('getRootAliases');
  56. $this->queryBuilder->expects(self::never())->method('andWhere');
  57. $this->queryBuilder->expects($this->never())->method('setParameter');
  58. $this->currentAccessExtensionIterator->expects($this->never())->method('addWhere');
  59. $this->invokeAddWhere($this->extension, $this->queryBuilder, Access::class, null);
  60. }
  61. public function testAddWhereMissingAccess(): void
  62. {
  63. $this->security->expects(self::once())->method('getToken')->willReturn($this->token);
  64. $this->token->expects(self::once())->method('getUser')->willReturn(null);
  65. $this->user->expects(self::never())->method('getOrganization');
  66. $this->queryBuilder->expects(self::never())->method('getRootAliases');
  67. $this->queryBuilder->expects(self::never())->method('andWhere');
  68. $this->queryBuilder->expects($this->never())->method('setParameter');
  69. $this->currentAccessExtensionIterator->expects($this->never())->method('addWhere');
  70. $this->invokeAddWhere($this->extension, $this->queryBuilder, Access::class, null);
  71. }
  72. public function testAddWhereNoRootAlias(): void
  73. {
  74. $this->security->expects(self::once())->method('getToken')->willReturn($this->token);
  75. $this->token->expects(self::once())->method('getUser')->willReturn($this->user);
  76. $this->user->expects(self::once())->method('getOrganization')->willReturn($this->organization);
  77. $this->queryBuilder->expects(self::once())->method('getRootAliases')->willReturn([]);
  78. $this->queryBuilder->expects(self::never())->method('andWhere');
  79. $this->queryBuilder->expects($this->never())->method('setParameter');
  80. $this->currentAccessExtensionIterator->expects($this->never())->method('addWhere');
  81. $this->expectException(\LogicException::class);
  82. $this->invokeAddWhere($this->extension, $this->queryBuilder, Access::class, null);
  83. }
  84. }