You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

136 lines
4.8 KiB

  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
  5. * SPDX-License-Identifier: AGPL-3.0-or-later
  6. */
  7. namespace OCA\CloudFederationApi\Tests;
  8. use NCU\Security\Signature\ISignatureManager;
  9. use OC\OCM\OCMSignatoryManager;
  10. use OCA\CloudFederationAPI\Config;
  11. use OCA\CloudFederationAPI\Controller\RequestHandlerController;
  12. use OCA\CloudFederationAPI\Db\FederatedInvite;
  13. use OCA\CloudFederationAPI\Db\FederatedInviteMapper;
  14. use OCA\FederatedFileSharing\AddressHandler;
  15. use OCP\AppFramework\Http;
  16. use OCP\AppFramework\Http\JSONResponse;
  17. use OCP\AppFramework\Utility\ITimeFactory;
  18. use OCP\EventDispatcher\IEventDispatcher;
  19. use OCP\Federation\ICloudFederationFactory;
  20. use OCP\Federation\ICloudFederationProviderManager;
  21. use OCP\Federation\ICloudIdManager;
  22. use OCP\IAppConfig;
  23. use OCP\IGroupManager;
  24. use OCP\IRequest;
  25. use OCP\IURLGenerator;
  26. use OCP\IUser;
  27. use OCP\IUserManager;
  28. use PHPUnit\Framework\MockObject\MockObject;
  29. use Psr\Log\LoggerInterface;
  30. use Test\TestCase;
  31. class RequestHandlerControllerTest extends TestCase {
  32. private IRequest&MockObject $request;
  33. private LoggerInterface&MockObject $logger;
  34. private IUserManager&MockObject $userManager;
  35. private IGroupManager&MockObject $groupManager;
  36. private IURLGenerator&MockObject $urlGenerator;
  37. private ICloudFederationProviderManager&MockObject $cloudFederationProviderManager;
  38. private Config&MockObject $config;
  39. private IEventDispatcher&MockObject $eventDispatcher;
  40. private FederatedInviteMapper&MockObject $federatedInviteMapper;
  41. private AddressHandler&MockObject $addressHandler;
  42. private IAppConfig&MockObject $appConfig;
  43. private ICloudFederationFactory&MockObject $cloudFederationFactory;
  44. private ICloudIdManager&MockObject $cloudIdManager;
  45. private ISignatureManager&MockObject $signatureManager;
  46. private OCMSignatoryManager&MockObject $signatoryManager;
  47. private ITimeFactory&MockObject $timeFactory;
  48. private RequestHandlerController $requestHandlerController;
  49. protected function setUp(): void {
  50. parent::setUp();
  51. $this->request = $this->createMock(IRequest::class);
  52. $this->logger = $this->createMock(LoggerInterface::class);
  53. $this->userManager = $this->createMock(IUserManager::class);
  54. $this->groupManager = $this->createMock(IGroupManager::class);
  55. $this->urlGenerator = $this->createMock(IURLGenerator::class);
  56. $this->cloudFederationProviderManager = $this->createMock(ICloudFederationProviderManager::class);
  57. $this->config = $this->createMock(Config::class);
  58. $this->eventDispatcher = $this->createMock(IEventDispatcher::class);
  59. $this->federatedInviteMapper = $this->createMock(FederatedInviteMapper::class);
  60. $this->addressHandler = $this->createMock(AddressHandler::class);
  61. $this->appConfig = $this->createMock(IAppConfig::class);
  62. $this->cloudFederationFactory = $this->createMock(ICloudFederationFactory::class);
  63. $this->cloudIdManager = $this->createMock(ICloudIdManager::class);
  64. $this->signatureManager = $this->createMock(ISignatureManager::class);
  65. $this->signatoryManager = $this->createMock(OCMSignatoryManager::class);
  66. $this->timeFactory = $this->createMock(ITimeFactory::class);
  67. $this->requestHandlerController = new RequestHandlerController(
  68. 'cloud_federation_api',
  69. $this->request,
  70. $this->logger,
  71. $this->userManager,
  72. $this->groupManager,
  73. $this->urlGenerator,
  74. $this->cloudFederationProviderManager,
  75. $this->config,
  76. $this->eventDispatcher,
  77. $this->federatedInviteMapper,
  78. $this->addressHandler,
  79. $this->appConfig,
  80. $this->cloudFederationFactory,
  81. $this->cloudIdManager,
  82. $this->signatureManager,
  83. $this->signatoryManager,
  84. $this->timeFactory,
  85. );
  86. }
  87. public function testInviteAccepted(): void {
  88. $token = 'token';
  89. $userId = 'userId';
  90. $invite = new FederatedInvite();
  91. $invite->setCreatedAt(1);
  92. $invite->setUserId($userId);
  93. $invite->setToken($token);
  94. $this->federatedInviteMapper->expects(self::once())
  95. ->method('findByToken')
  96. ->with($token)
  97. ->willReturn($invite);
  98. $this->federatedInviteMapper->expects(self::once())
  99. ->method('update')
  100. ->willReturnArgument(0);
  101. $user = $this->createMock(IUser::class);
  102. $user->method('getUID')
  103. ->willReturn($userId);
  104. $user->method('getEMailAddress')
  105. ->willReturn('email');
  106. $user->method('getDisplayName')
  107. ->willReturn('displayName');
  108. $this->userManager->expects(self::once())
  109. ->method('get')
  110. ->with($userId)
  111. ->willReturn($user);
  112. $recipientProvider = 'http://127.0.0.1';
  113. $recipientId = 'remote';
  114. $recipientEmail = 'remote@example.org';
  115. $recipientName = 'Remote Remoteson';
  116. $response = ['userID' => $userId, 'email' => 'email', 'name' => 'displayName'];
  117. $json = new JSONResponse($response, Http::STATUS_OK);
  118. $this->assertEquals($json, $this->requestHandlerController->inviteAccepted($recipientProvider, $token, $recipientId, $recipientEmail, $recipientName));
  119. }
  120. }