SubdomainServiceTest.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace App\Tests\Service\Typo3;
  3. use App\Entity\Organization\Organization;
  4. use App\Entity\Organization\Subdomain;
  5. use App\Repository\Access\AccessRepository;
  6. use App\Repository\Organization\SubdomainRepository;
  7. use App\Service\Organization\Utils as OrganizationUtils;
  8. use App\Service\Typo3\BindFileService;
  9. use App\Service\Typo3\SubdomainService;
  10. use Doctrine\Common\Collections\ArrayCollection;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use PHPUnit\Framework\MockObject\MockObject;
  13. use PHPUnit\Framework\TestCase;
  14. use Symfony\Bundle\SecurityBundle\Security;
  15. use Symfony\Component\Messenger\MessageBusInterface;
  16. class TestableSubdomainService extends SubdomainService {
  17. public function setOrganizationActiveSubdomain(Subdomain $subdomain): Subdomain {
  18. return parent::setOrganizationActiveSubdomain($subdomain);
  19. }
  20. public function renameAdminUserToMatchSubdomain(Subdomain $subdomain): void {
  21. parent::renameAdminUserToMatchSubdomain($subdomain);
  22. }
  23. public function updateTypo3Website($organization) {
  24. parent::updateTypo3Website($organization);
  25. }
  26. public function sendConfirmationEmail(Subdomain $subdomain): void {
  27. parent::sendConfirmationEmail($subdomain);
  28. }
  29. }
  30. class SubdomainServiceTest extends TestCase
  31. {
  32. private SubdomainRepository $subdomainRepository;
  33. private OrganizationUtils $organizationUtils;
  34. private Security $security;
  35. private BindFileService $bindFileService;
  36. private MessageBusInterface $messageBus;
  37. private EntityManagerInterface $entityManager;
  38. private AccessRepository $accessRepository;
  39. public function setUp():void
  40. {
  41. $this->subdomainRepository = $this->getMockBuilder(SubdomainRepository::class)->disableOriginalConstructor()->getMock();
  42. $this->entityManager = $this->getMockBuilder(EntityManagerInterface::class)->disableOriginalConstructor()->getMock();
  43. $this->messageBus = $this->getMockBuilder(MessageBusInterface::class)->disableOriginalConstructor()->getMock();
  44. $this->security = $this->getMockBuilder(Security::class)->disableOriginalConstructor()->getMock();
  45. $this->organizationUtils = $this->getMockBuilder(OrganizationUtils::class)->disableOriginalConstructor()->getMock();
  46. $this->bindFileService = $this->getMockBuilder(BindFileService::class)->disableOriginalConstructor()->getMock();
  47. $this->accessRepository = $this->getMockBuilder(AccessRepository::class)->disableOriginalConstructor()->getMock();
  48. }
  49. private function makeOnSubdomainChangeMock(string $methodName): MockObject | SubdomainService {
  50. return $this->getMockBuilder(SubdomainService::class)
  51. ->setConstructorArgs([
  52. $this->subdomainRepository,
  53. $this->entityManager,
  54. $this->messageBus,
  55. $this->security,
  56. $this->organizationUtils,
  57. $this->bindFileService,
  58. $this->accessRepository
  59. ])
  60. ->setMethodsExcept([$methodName])
  61. ->getMock();
  62. }
  63. /**
  64. * @see SubdomainService::canRegisterNewSubdomain()
  65. */
  66. public function testCanRegisterNewSubdomainTrue(): void
  67. {
  68. $subdomainService = $this->makeOnSubdomainChangeMock('canRegisterNewSubdomain');
  69. $organization = $this->getMockBuilder(Organization::class)->disableOriginalConstructor()->getMock();
  70. $organization->expects(self::once())->method('getSubdomains')->willReturn(new ArrayCollection([1, 2]));
  71. $this->assertTrue($subdomainService->canRegisterNewSubdomain($organization));
  72. }
  73. /**
  74. * @see SubdomainService::canRegisterNewSubdomain()
  75. */
  76. public function testCanRegisterNewSubdomainFalse(): void
  77. {
  78. $subdomainService = $this->makeOnSubdomainChangeMock('canRegisterNewSubdomain');
  79. $organization = $this->getMockBuilder(Organization::class)->disableOriginalConstructor()->getMock();
  80. $organization->expects(self::once())->method('getSubdomains')->willReturn(new ArrayCollection([1, 2, 3]));
  81. $this->assertFalse($subdomainService->canRegisterNewSubdomain($organization));
  82. }
  83. /**
  84. * @see SubdomainService::isValidSubdomain()
  85. */
  86. public function testIsValidSubdomain(): void {
  87. $subdomainService = $this->makeOnSubdomainChangeMock('isValidSubdomain');
  88. $this->assertTrue($subdomainService->isValidSubdomain('abcd'));
  89. $this->assertTrue($subdomainService->isValidSubdomain('abcdefgh'));
  90. $this->assertTrue($subdomainService->isValidSubdomain('abcd-efgh'));
  91. $this->assertTrue($subdomainService->isValidSubdomain('123'));
  92. $this->assertTrue($subdomainService->isValidSubdomain('a'));
  93. $this->assertFalse($subdomainService->isValidSubdomain('_abc'));
  94. $this->assertFalse($subdomainService->isValidSubdomain('abc-'));
  95. $this->assertFalse($subdomainService->isValidSubdomain(str_repeat('abcdef', 20)));
  96. }
  97. }