123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- <?php
- /**
- * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
- * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
- * SPDX-License-Identifier: AGPL-3.0-only
- */
- namespace OCA\FederatedFileSharing\Tests\Controller;
- use OC\Federation\CloudIdManager;
- use OC\Share20\Share;
- use OCA\FederatedFileSharing\AddressHandler;
- use OCA\FederatedFileSharing\Controller\MountPublicLinkController;
- use OCA\FederatedFileSharing\FederatedShareProvider;
- use OCP\AppFramework\Http;
- use OCP\Contacts\IManager as IContactsManager;
- use OCP\EventDispatcher\IEventDispatcher;
- use OCP\Federation\ICloudIdManager;
- use OCP\Files\IRootFolder;
- use OCP\HintException;
- use OCP\Http\Client\IClientService;
- use OCP\ICacheFactory;
- use OCP\IL10N;
- use OCP\IRequest;
- use OCP\ISession;
- use OCP\IURLGenerator;
- use OCP\IUserManager;
- use OCP\IUserSession;
- use OCP\Share\IManager;
- use OCP\Share\IShare;
- use PHPUnit\Framework\MockObject\MockObject;
- use Psr\Log\LoggerInterface;
- class MountPublicLinkControllerTest extends \Test\TestCase {
- /** @var IContactsManager|MockObject */
- protected $contactsManager;
- /** @var MountPublicLinkController */
- private $controller;
- /** @var IRequest|MockObject */
- private $request;
- /** @var FederatedShareProvider|MockObject */
- private $federatedShareProvider;
- /** @var IManager|MockObject */
- private $shareManager;
- /** @var AddressHandler|MockObject */
- private $addressHandler;
- /** @var IRootFolder|MockObject */
- private $rootFolder;
- /** @var IUserManager|MockObject */
- private $userManager;
- /** @var ISession|MockObject */
- private $session;
- /** @var IL10N|MockObject */
- private $l10n;
- /** @var IUserSession|MockObject */
- private $userSession;
- /** @var IClientService|MockObject */
- private $clientService;
- /** @var IShare */
- private $share;
- /** @var ICloudIdManager */
- private $cloudIdManager;
- protected function setUp(): void {
- parent::setUp();
- $this->request = $this->getMockBuilder(IRequest::class)->disableOriginalConstructor()->getMock();
- $this->federatedShareProvider = $this->getMockBuilder('OCA\FederatedFileSharing\FederatedShareProvider')
- ->disableOriginalConstructor()->getMock();
- $this->shareManager = $this->getMockBuilder(IManager::class)->disableOriginalConstructor()->getMock();
- $this->addressHandler = $this->getMockBuilder('OCA\FederatedFileSharing\AddressHandler')
- ->disableOriginalConstructor()->getMock();
- $this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder')->disableOriginalConstructor()->getMock();
- $this->userManager = $this->getMockBuilder(IUserManager::class)->disableOriginalConstructor()->getMock();
- $this->share = new Share($this->rootFolder, $this->userManager);
- $this->session = $this->getMockBuilder(ISession::class)->disableOriginalConstructor()->getMock();
- $this->l10n = $this->getMockBuilder(IL10N::class)->disableOriginalConstructor()->getMock();
- $this->userSession = $this->getMockBuilder(IUserSession::class)->disableOriginalConstructor()->getMock();
- $this->clientService = $this->getMockBuilder('OCP\Http\Client\IClientService')->disableOriginalConstructor()->getMock();
- $this->contactsManager = $this->createMock(IContactsManager::class);
- $this->cloudIdManager = new CloudIdManager(
- $this->contactsManager,
- $this->createMock(IURLGenerator::class),
- $this->userManager,
- $this->createMock(ICacheFactory::class),
- $this->createMock(IEventDispatcher::class)
- );
- $this->controller = new MountPublicLinkController(
- 'federatedfilesharing', $this->request,
- $this->federatedShareProvider,
- $this->shareManager,
- $this->addressHandler,
- $this->session,
- $this->l10n,
- $this->userSession,
- $this->clientService,
- $this->cloudIdManager,
- $this->createMock(LoggerInterface::class),
- );
- }
- /**
- * @dataProvider dataTestCreateFederatedShare
- *
- * @param string $shareWith
- * @param bool $outgoingSharesAllowed
- * @param bool $validShareWith
- * @param string $token
- * @param bool $validToken
- * @param bool $createSuccessful
- * @param string $expectedReturnData
- */
- public function testCreateFederatedShare($shareWith,
- $outgoingSharesAllowed,
- $validShareWith,
- $token,
- $validToken,
- $createSuccessful,
- $expectedReturnData,
- $permissions,
- ): void {
- $this->federatedShareProvider->expects($this->any())
- ->method('isOutgoingServer2serverShareEnabled')
- ->willReturn($outgoingSharesAllowed);
- $this->addressHandler->expects($this->any())->method('splitUserRemote')
- ->with($shareWith)
- ->willReturnCallback(
- function ($shareWith) use ($validShareWith, $expectedReturnData) {
- if ($validShareWith) {
- return ['user', 'server'];
- }
- throw new HintException($expectedReturnData, $expectedReturnData);
- }
- );
- $share = $this->share;
- $share->setPermissions($permissions);
- $this->shareManager->expects($this->any())->method('getShareByToken')
- ->with($token)
- ->willReturnCallback(
- function ($token) use ($validToken, $share, $expectedReturnData) {
- if ($validToken) {
- return $share;
- }
- throw new HintException($expectedReturnData, $expectedReturnData);
- }
- );
- $this->federatedShareProvider->expects($this->any())->method('create')
- ->with($share)
- ->willReturnCallback(
- function (IShare $share) use ($createSuccessful, $shareWith, $expectedReturnData) {
- $this->assertEquals($shareWith, $share->getSharedWith());
- if ($createSuccessful) {
- return $share;
- }
- throw new HintException($expectedReturnData, $expectedReturnData);
- }
- );
- $result = $this->controller->createFederatedShare($shareWith, $token);
- $errorCase = !$validShareWith || !$validToken || !$createSuccessful || !$outgoingSharesAllowed;
- if ($errorCase) {
- $this->assertSame(Http::STATUS_BAD_REQUEST, $result->getStatus());
- $this->assertTrue(isset($result->getData()['message']));
- $this->assertSame($expectedReturnData, $result->getData()['message']);
- } else {
- $this->assertSame(Http::STATUS_OK, $result->getStatus());
- $this->assertTrue(isset($result->getData()['remoteUrl']));
- $this->assertSame($expectedReturnData, $result->getData()['remoteUrl']);
- }
- }
- public function dataTestCreateFederatedShare() {
- return [
- //shareWith, outgoingSharesAllowed, validShareWith, token, validToken, createSuccessful, expectedReturnData
- ['user@server', true, true, 'token', true, true, 'server', 31],
- ['user@server', true, true, 'token', false, false, 'server', 4],
- ['user@server', true, false, 'token', true, true, 'invalid federated cloud id', 31],
- ['user@server', true, false, 'token', false, true, 'invalid federated cloud id', 31],
- ['user@server', true, false, 'token', false, false, 'invalid federated cloud id', 31],
- ['user@server', true, false, 'token', true, false, 'invalid federated cloud id', 31],
- ['user@server', true, true, 'token', false, true, 'invalid token', 31],
- ['user@server', true, true, 'token', false, false, 'invalid token', 31],
- ['user@server', true, true, 'token', true, false, 'can not create share', 31],
- ['user@server', false, true, 'token', true, true, 'This server doesn\'t support outgoing federated shares', 31],
- ];
- }
- }
|