Browse Source

Add unit tests for getting shares including subfiles

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
tags/v18.0.0beta1
Daniel Calviño Sánchez 4 years ago
parent
commit
9039dd89ef
1 changed files with 421 additions and 0 deletions
  1. 421
    0
      apps/files_sharing/tests/Controller/ShareAPIControllerTest.php

+ 421
- 0
apps/files_sharing/tests/Controller/ShareAPIControllerTest.php View File

@@ -784,6 +784,427 @@ class ShareAPIControllerTest extends TestCase {
$this->ocs->getShare(42);
}

public function dataGetShares() {
$folder = $this->getMockBuilder(Folder::class)->getMock();
$file1 = $this->getMockBuilder(File::class)->getMock();
$file1->method('getName')
->willReturn('file1');
$file2 = $this->getMockBuilder(File::class)->getMock();
$file2->method('getName')
->willReturn('file2');

$folder->method('getDirectoryListing')
->willReturn([$file1, $file2]);

$file1UserShareOwner = \OC::$server->getShareManager()->newShare();
$file1UserShareOwner->setShareType(IShare::TYPE_USER)
->setSharedWith('recipient')
->setSharedBy('initiator')
->setShareOwner('currentUser')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setNode($file1)
->setId(4);

$file1UserShareOwnerExpected = [
'id' => 4,
'share_type' => IShare::TYPE_USER,
];

$file1UserShareInitiator = \OC::$server->getShareManager()->newShare();
$file1UserShareInitiator->setShareType(IShare::TYPE_USER)
->setSharedWith('recipient')
->setSharedBy('currentUser')
->setShareOwner('owner')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setNode($file1)
->setId(8);

$file1UserShareInitiatorExpected = [
'id' => 8,
'share_type' => IShare::TYPE_USER,
];

$file1UserShareRecipient = \OC::$server->getShareManager()->newShare();
$file1UserShareRecipient->setShareType(IShare::TYPE_USER)
->setSharedWith('currentUser')
->setSharedBy('initiator')
->setShareOwner('owner')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setNode($file1)
->setId(15);

$file1UserShareOther = \OC::$server->getShareManager()->newShare();
$file1UserShareOther->setShareType(IShare::TYPE_USER)
->setSharedWith('recipient')
->setSharedBy('initiator')
->setShareOwner('owner')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setNode($file1)
->setId(16);

$file1UserShareOtherExpected = [
'id' => 16,
'share_type' => IShare::TYPE_USER,
];

$file1GroupShareOwner = \OC::$server->getShareManager()->newShare();
$file1GroupShareOwner->setShareType(IShare::TYPE_GROUP)
->setSharedWith('recipient')
->setSharedBy('initiator')
->setShareOwner('currentUser')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setNode($file1)
->setId(23);

$file1GroupShareOwnerExpected = [
'id' => 23,
'share_type' => IShare::TYPE_GROUP,
];

$file1GroupShareRecipient = \OC::$server->getShareManager()->newShare();
$file1GroupShareRecipient->setShareType(IShare::TYPE_GROUP)
->setSharedWith('currentUserGroup')
->setSharedBy('initiator')
->setShareOwner('owner')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setNode($file1)
->setId(42);

$file1GroupShareRecipientExpected = [
'id' => 42,
'share_type' => IShare::TYPE_GROUP,
];

$file1GroupShareOther = \OC::$server->getShareManager()->newShare();
$file1GroupShareOther->setShareType(IShare::TYPE_GROUP)
->setSharedWith('recipient')
->setSharedBy('initiator')
->setShareOwner('owner')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setNode($file1)
->setId(108);

$file1LinkShareOwner = \OC::$server->getShareManager()->newShare();
$file1LinkShareOwner->setShareType(IShare::TYPE_LINK)
->setSharedWith('recipient')
->setSharedBy('initiator')
->setShareOwner('currentUser')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setNode($file1)
->setId(415);

$file1LinkShareOwnerExpected = [
'id' => 415,
'share_type' => IShare::TYPE_LINK,
];

$file1EmailShareOwner = \OC::$server->getShareManager()->newShare();
$file1EmailShareOwner->setShareType(IShare::TYPE_EMAIL)
->setSharedWith('recipient')
->setSharedBy('initiator')
->setShareOwner('currentUser')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setNode($file1)
->setId(416);

$file1EmailShareOwnerExpected = [
'id' => 416,
'share_type' => IShare::TYPE_EMAIL,
];

$file1RoomShareOwner = \OC::$server->getShareManager()->newShare();
$file1RoomShareOwner->setShareType(IShare::TYPE_ROOM)
->setSharedWith('recipient')
->setSharedBy('initiator')
->setShareOwner('currentUser')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setNode($file1)
->setId(423);

$file1RoomShareOwnerExpected = [
'id' => 423,
'share_type' => IShare::TYPE_ROOM,
];

$file1RemoteShareOwner = \OC::$server->getShareManager()->newShare();
$file1RemoteShareOwner->setShareType(IShare::TYPE_REMOTE)
->setSharedWith('recipient')
->setSharedBy('initiator')
->setShareOwner('currentUser')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setNode($file1)
->setId(442);

$file1RemoteShareOwnerExpected = [
'id' => 442,
'share_type' => IShare::TYPE_REMOTE,
];

$file2UserShareOwner = \OC::$server->getShareManager()->newShare();
$file2UserShareOwner->setShareType(IShare::TYPE_USER)
->setSharedWith('recipient')
->setSharedBy('initiator')
->setShareOwner('currentUser')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setNode($file2)
->setId(815);

$file2UserShareOwnerExpected = [
'id' => 815,
'share_type' => IShare::TYPE_USER,
];

$data = [
[
[
'path' => $folder,
'subfiles' => 'true',
],
[
'file1' => [
IShare::TYPE_USER => [$file1UserShareOwner],
],
'file2' => [
IShare::TYPE_USER => [$file2UserShareOwner],
],
],
[
],
[
$file1UserShareOwnerExpected,
$file2UserShareOwnerExpected,
]
],
[
[
'path' => $folder,
'subfiles' => 'true',
],
[
'file1' => [
IShare::TYPE_USER => [$file1UserShareOwner, $file1UserShareOwner, $file1UserShareOwner],
],
],
[
],
[
$file1UserShareOwnerExpected,
]
],
[
[
'path' => $folder,
'subfiles' => 'true',
],
[
'file1' => [
IShare::TYPE_USER => [$file1UserShareOwner, $file1UserShareRecipient],
],
],
[
],
[
$file1UserShareOwnerExpected
]
],
[
[
'path' => $folder,
'subfiles' => 'true',
],
[
'file1' => [
IShare::TYPE_USER => [$file1UserShareRecipient, $file1UserShareInitiator, $file1UserShareOther],
],
'file2' => [
IShare::TYPE_USER => [$file2UserShareOwner],
],
],
[
],
[
$file1UserShareInitiatorExpected,
$file1UserShareOtherExpected,
$file2UserShareOwnerExpected,
]
],
// This might not happen in a real environment, as the combination
// of shares does not seem to be possible on a folder without
// resharing rights; if the folder has resharing rights then the
// share with others would be included too in the results.
[
[
'path' => $folder,
'subfiles' => 'true',
],
[
'file1' => [
IShare::TYPE_USER => [$file1UserShareRecipient, $file1UserShareInitiator, $file1UserShareOther],
],
],
[
],
[
$file1UserShareInitiatorExpected,
]
],
[
[
'path' => $folder,
'subfiles' => 'true',
],
[
'file1' => [
IShare::TYPE_USER => [$file1UserShareOwner],
IShare::TYPE_GROUP => [$file1GroupShareRecipient],
],
],
[
],
[
$file1UserShareOwnerExpected,
$file1GroupShareRecipientExpected,
]
],
[
[
'path' => $folder,
'subfiles' => 'true',
],
[
'file1' => [
IShare::TYPE_USER => [$file1UserShareOwner],
IShare::TYPE_GROUP => [$file1GroupShareOwner],
IShare::TYPE_LINK => [$file1LinkShareOwner],
IShare::TYPE_EMAIL => [$file1EmailShareOwner],
IShare::TYPE_ROOM => [$file1RoomShareOwner],
IShare::TYPE_REMOTE => [$file1RemoteShareOwner],
],
],
[
],
[
$file1UserShareOwnerExpected,
$file1GroupShareOwnerExpected,
$file1LinkShareOwnerExpected,
$file1RoomShareOwnerExpected,
]
],
[
[
'path' => $folder,
'subfiles' => 'true',
],
[
'file1' => [
IShare::TYPE_USER => [$file1UserShareOwner],
IShare::TYPE_GROUP => [$file1GroupShareOwner],
IShare::TYPE_LINK => [$file1LinkShareOwner],
IShare::TYPE_EMAIL => [$file1EmailShareOwner],
IShare::TYPE_ROOM => [$file1RoomShareOwner],
IShare::TYPE_REMOTE => [$file1RemoteShareOwner],
],
],
[
IShare::TYPE_EMAIL => true,
IShare::TYPE_REMOTE => true,
],
[
$file1UserShareOwnerExpected,
$file1GroupShareOwnerExpected,
$file1LinkShareOwnerExpected,
$file1EmailShareOwnerExpected,
$file1RemoteShareOwnerExpected,
$file1RoomShareOwnerExpected,
]
],
];

return $data;
}

/**
* @dataProvider dataGetShares
*/
public function testGetShares(array $getSharesParameters, array $shares, array $extraShareTypes, array $expected) {
/** @var \OCA\Files_Sharing\Controller\ShareAPIController $ocs */
$ocs = $this->getMockBuilder(ShareAPIController::class)
->setConstructorArgs([
$this->appName,
$this->request,
$this->shareManager,
$this->groupManager,
$this->userManager,
$this->rootFolder,
$this->urlGenerator,
$this->currentUser,
$this->l,
$this->config,
$this->appManager,
$this->serverContainer
])->setMethods(['formatShare'])
->getMock();

$ocs->method('formatShare')
->will($this->returnCallback(
function($share) {
return [
'id' => $share->getId(),
'share_type' => $share->getShareType()
];
}
));

$userFolder = $this->getMockBuilder('OCP\Files\Folder')->getMock();
$userFolder->method('get')
->with('path')
->willReturn($getSharesParameters['path']);

$this->rootFolder->method('getUserFolder')
->with($this->currentUser)
->willReturn($userFolder);

$this->shareManager
->method('getSharesBy')
->will($this->returnCallback(
function($user, $shareType, $node) use ($shares) {
if (!isset($shares[$node->getName()]) || !isset($shares[$node->getName()][$shareType])) {
return [];
}
return $shares[$node->getName()][$shareType];
}
));

$shareProviderExistsMap = [
[IShare::TYPE_EMAIL, $extraShareTypes[IShare::TYPE_EMAIL] ?? false],
];

$this->shareManager
->method('shareProviderExists')
->will($this->returnValueMap($shareProviderExistsMap));

$this->shareManager
->method('outgoingServer2ServerSharesAllowed')
->willReturn($extraShareTypes[ISHARE::TYPE_REMOTE] ?? false);

$this->groupManager
->method('isInGroup')
->will($this->returnCallback(
function($user, $group) {
return $group === 'currentUserGroup';
}
));

$result = $ocs->getShares(
$getSharesParameters['sharedWithMe'] ?? 'false',
$getSharesParameters['reshares'] ?? 'false',
$getSharesParameters['subfiles'] ?? 'false',
'path'
);

$this->assertEquals($expected, $result->getData());
}

public function testCanAccessShare() {
$share = $this->getMockBuilder(IShare::class)->getMock();
$share->method('getShareOwner')->willReturn($this->currentUser);

Loading…
Cancel
Save