@ -35,17 +35,21 @@
*/
namespace OCA\Files_Sharing\Tests\Controller;
use OCA\Files_Sharing\AppInfo\Application;
use OCA\Files_Sharing\Controller\ShareAPIController;
use OCP\App\IAppManager;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSBadRequestException;
use OCP\AppFramework\OCS\OCSException;
use OCP\AppFramework\OCS\OCSNotFoundException;
use OCP\Constants;
use OCP\Files\File;
use OCP\Files\Folder;
use OCP\Files\IRootFolder;
use OCP\Files\Mount\IMountPoint;
use OCP\Files\NotFoundException;
use OCP\Files\Storage;
use OCP\Files\Storage\IStorage;
use OCP\IConfig;
use OCP\IDateTimeZone;
use OCP\IGroup;
@ -62,6 +66,7 @@ use OCP\Share\IAttributes as IShareAttributes;
use OCP\Share\IManager;
use OCP\Share\IShare;
use OCP\UserStatus\IManager as IUserStatusManager;
use PHPUnit\Framework\MockObject\MockObject;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
use Test\TestCase;
@ -74,25 +79,26 @@ use Test\TestCase;
*/
class ShareAPIControllerTest extends TestCase {
private string $appName = 'files_sharing';
private \OC\Share20\Manager|\PHPUnit\Framework\MockObject\MockObject $shareManager;
private IGroupManager|\PHPUnit\Framework\MockObject\MockObject $groupManager;
private IUserManager|\PHPUnit\Framework\MockObject\MockObject $userManager;
private IRequest|\PHPUnit\Framework\MockObject\MockObject $request;
private IRootFolder|\PHPUnit\Framework\MockObject\MockObject $rootFolder;
private IURLGenerator|\PHPUnit\Framework\MockObject\MockObject $urlGenerator;
private string|\PHPUnit\Framework\MockObject\MockObject $currentUser;
private ShareAPIController $ocs;
private IL10N|\PHPUnit\Framework\MockObject\MockObject $l;
private IConfig|\PHPUnit\Framework\MockObject\MockObject $config;
private IAppManager|\PHPUnit\Framework\MockObject\MockObject $appManager;
private IServerContainer|\PHPUnit\Framework\MockObject\MockObject $serverContainer;
private IUserStatusManager|\PHPUnit\Framework\MockObject\MockObject $userStatusManager;
private IPreview|\PHPUnit\Framework\MockObject\MockObject $previewManager;
private IDateTimeZone|\PHPUnit\Framework\MockObject\MockObject $dateTimeZone;
private LoggerInterface $logger;
private string $currentUser;
private \OC\Share20\Manager|MockObject $shareManager;
private IGroupManager|MockObject $groupManager;
private IUserManager|MockObject $userManager;
private IRequest|MockObject $request;
private IRootFolder|MockObject $rootFolder;
private IURLGenerator|MockObject $urlGenerator;
private IL10N|MockObject $l;
private IConfig|MockObject $config;
private IAppManager|MockObject $appManager;
private ContainerInterface|MockObject $serverContainer;
private IUserStatusManager|MockObject $userStatusManager;
private IPreview|MockObject $previewManager;
private IDateTimeZone|MockObject $dateTimeZone;
private LoggerInterface|MockObject $logger;
protected function setUp(): void {
/** @var IManager|MockObject */
$this->shareManager = $this->createMock(IManager::class);
$this->shareManager
->expects($this->any())
@ -126,7 +132,7 @@ class ShareAPIControllerTest extends TestCase {
$this->logger = $this->createMock(LoggerInterface::class);
$this->ocs = new ShareAPIController(
$this->appName ,
Application::APP_ID ,
$this->request,
$this->shareManager,
$this->groupManager,
@ -146,12 +152,12 @@ class ShareAPIControllerTest extends TestCase {
}
/**
* @return ShareAPIController|\PHPUnit\Framework\MockObject\ MockObject
* @return ShareAPIController& MockObject
*/
private function mockFormatShare() {
return $this->getMockBuilder(ShareAPIController::class)
->setConstructorArgs([
$this->appName ,
Application::APP_ID ,
$this->request,
$this->shareManager,
$this->groupManager,
@ -172,7 +178,7 @@ class ShareAPIControllerTest extends TestCase {
}
private function newShare() {
return \OC::$server->getShareManager( )->newShare();
return \OCP\Server::get(IManager::class )->newShare();
}
@ -759,11 +765,11 @@ class ShareAPIControllerTest extends TestCase {
/**
* @dataProvider dataGetShare
*/
public function testGetShare(\OCP\Share\ IShare $share, array $result) {
/** @var ShareAPIController|\PHPUnit\Framework\MockObject\ MockObject $ocs */
public function testGetShare(IShare $share, array $result): void {
/** @var ShareAPIController& MockObject $ocs */
$ocs = $this->getMockBuilder(ShareAPIController::class)
->setConstructorArgs([
$this->appName ,
Application::APP_ID ,
$this->request,
$this->shareManager,
$this->groupManager,
@ -846,7 +852,7 @@ class ShareAPIControllerTest extends TestCase {
$this->expectException(\OCP\AppFramework\OCS\OCSNotFoundException::class);
$this->expectExceptionMessage('Wrong share ID, share does not exist');
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setSharedBy('initiator')
->setSharedWith('recipient')
->setShareOwner('owner');
@ -877,7 +883,7 @@ class ShareAPIControllerTest extends TestCase {
$folder->method('getDirectoryListing')
->willReturn([$file1, $file2]);
$file1UserShareOwner = \OC::$server->getShareManager( )->newShare();
$file1UserShareOwner = \OCP\Server::get(IManager::class )->newShare();
$file1UserShareOwner->setShareType(IShare::TYPE_USER)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -891,7 +897,7 @@ class ShareAPIControllerTest extends TestCase {
'share_type' => IShare::TYPE_USER,
];
$file1UserShareInitiator = \OC::$server->getShareManager( )->newShare();
$file1UserShareInitiator = \OCP\Server::get(IManager::class )->newShare();
$file1UserShareInitiator->setShareType(IShare::TYPE_USER)
->setSharedWith('recipient')
->setSharedBy('currentUser')
@ -905,7 +911,7 @@ class ShareAPIControllerTest extends TestCase {
'share_type' => IShare::TYPE_USER,
];
$file1UserShareRecipient = \OC::$server->getShareManager( )->newShare();
$file1UserShareRecipient = \OCP\Server::get(IManager::class )->newShare();
$file1UserShareRecipient->setShareType(IShare::TYPE_USER)
->setSharedWith('currentUser')
->setSharedBy('initiator')
@ -919,7 +925,7 @@ class ShareAPIControllerTest extends TestCase {
'share_type' => IShare::TYPE_USER,
];
$file1UserShareOther = \OC::$server->getShareManager( )->newShare();
$file1UserShareOther = \OCP\Server::get(IManager::class )->newShare();
$file1UserShareOther->setShareType(IShare::TYPE_USER)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -933,7 +939,7 @@ class ShareAPIControllerTest extends TestCase {
'share_type' => IShare::TYPE_USER,
];
$file1GroupShareOwner = \OC::$server->getShareManager( )->newShare();
$file1GroupShareOwner = \OCP\Server::get(IManager::class )->newShare();
$file1GroupShareOwner->setShareType(IShare::TYPE_GROUP)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -947,7 +953,7 @@ class ShareAPIControllerTest extends TestCase {
'share_type' => IShare::TYPE_GROUP,
];
$file1GroupShareRecipient = \OC::$server->getShareManager( )->newShare();
$file1GroupShareRecipient = \OCP\Server::get(IManager::class )->newShare();
$file1GroupShareRecipient->setShareType(IShare::TYPE_GROUP)
->setSharedWith('currentUserGroup')
->setSharedBy('initiator')
@ -961,7 +967,7 @@ class ShareAPIControllerTest extends TestCase {
'share_type' => IShare::TYPE_GROUP,
];
$file1GroupShareOther = \OC::$server->getShareManager( )->newShare();
$file1GroupShareOther = \OCP\Server::get(IManager::class )->newShare();
$file1GroupShareOther->setShareType(IShare::TYPE_GROUP)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -970,7 +976,7 @@ class ShareAPIControllerTest extends TestCase {
->setNode($file1)
->setId(108);
$file1LinkShareOwner = \OC::$server->getShareManager( )->newShare();
$file1LinkShareOwner = \OCP\Server::get(IManager::class )->newShare();
$file1LinkShareOwner->setShareType(IShare::TYPE_LINK)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -984,7 +990,7 @@ class ShareAPIControllerTest extends TestCase {
'share_type' => IShare::TYPE_LINK,
];
$file1EmailShareOwner = \OC::$server->getShareManager( )->newShare();
$file1EmailShareOwner = \OCP\Server::get(IManager::class )->newShare();
$file1EmailShareOwner->setShareType(IShare::TYPE_EMAIL)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -998,7 +1004,7 @@ class ShareAPIControllerTest extends TestCase {
'share_type' => IShare::TYPE_EMAIL,
];
$file1CircleShareOwner = \OC::$server->getShareManager( )->newShare();
$file1CircleShareOwner = \OCP\Server::get(IManager::class )->newShare();
$file1CircleShareOwner->setShareType(IShare::TYPE_CIRCLE)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -1012,7 +1018,7 @@ class ShareAPIControllerTest extends TestCase {
'share_type' => IShare::TYPE_CIRCLE,
];
$file1RoomShareOwner = \OC::$server->getShareManager( )->newShare();
$file1RoomShareOwner = \OCP\Server::get(IManager::class )->newShare();
$file1RoomShareOwner->setShareType(IShare::TYPE_ROOM)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -1026,7 +1032,7 @@ class ShareAPIControllerTest extends TestCase {
'share_type' => IShare::TYPE_ROOM,
];
$file1RemoteShareOwner = \OC::$server->getShareManager( )->newShare();
$file1RemoteShareOwner = \OCP\Server::get(IManager::class )->newShare();
$file1RemoteShareOwner->setShareType(IShare::TYPE_REMOTE)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -1041,7 +1047,7 @@ class ShareAPIControllerTest extends TestCase {
'share_type' => IShare::TYPE_REMOTE,
];
$file1RemoteGroupShareOwner = \OC::$server->getShareManager( )->newShare();
$file1RemoteGroupShareOwner = \OCP\Server::get(IManager::class )->newShare();
$file1RemoteGroupShareOwner->setShareType(IShare::TYPE_REMOTE_GROUP)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -1056,7 +1062,7 @@ class ShareAPIControllerTest extends TestCase {
'share_type' => IShare::TYPE_REMOTE_GROUP,
];
$file2UserShareOwner = \OC::$server->getShareManager( )->newShare();
$file2UserShareOwner = \OCP\Server::get(IManager::class )->newShare();
$file2UserShareOwner->setShareType(IShare::TYPE_USER)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -1387,11 +1393,11 @@ class ShareAPIControllerTest extends TestCase {
/**
* @dataProvider dataGetShares
*/
public function testGetShares(array $getSharesParameters, array $shares, array $extraShareTypes, array $expected) {
/** @var \OCA\Files_Sharing\Controller\ ShareAPIController $ocs */
public function testGetShares(array $getSharesParameters, array $shares, array $extraShareTypes, array $expected): void {
/** @var ShareAPIController|MockObject $ocs */
$ocs = $this->getMockBuilder(ShareAPIController::class)
->setConstructorArgs([
$this->appName ,
Application::APP_ID ,
$this->request,
$this->shareManager,
$this->groupManager,
@ -1407,7 +1413,8 @@ class ShareAPIControllerTest extends TestCase {
$this->dateTimeZone,
$this->logger,
$this->currentUser,
])->setMethods(['formatShare'])
])
->onlyMethods(['formatShare'])
->getMock();
$ocs->method('formatShare')
@ -1638,38 +1645,35 @@ class ShareAPIControllerTest extends TestCase {
$this->ocs->createShare('invalid-path');
}
public function testCreateShareInvalidPermissions() {
$this->expectException(\OCP\AppFramework\OCS\OCSNotFoundException::class);
$this->expectExceptionMessage('Invalid permissions');
public function testCreateShareInvalidShareType(): void {
$this->expectException(OCSBadRequestException::class);
$this->expectExceptionMessage('Unknown share type');
$share = $this->newShare();
$this->shareManager->method('newShare')->willReturn($share);
$userFolder = $this->getMockBuilder(Folder::class)->getMock ();
$this->rootFolder->expects($this->o nce())
->method('getUserFolder')
->with('currentUser')
->willReturn($userFolder);
[$userFolder, $file] = $this->getNonSharedUserFile ();
$this->rootFolder->expects($this->atLeastO nce())
->method('getUserFolder')
->with('currentUser')
->willReturn($userFolder);
$path = $this->getMockBuilder(File::class)->getMock();
$userFolder->expects($this->once())
->method('get')
->with('valid-path')
->willReturn($path);
$userFolder->expects($this->atLeastOnce())
->method('get')
->with('valid-path')
->willReturn($file);
$userFolder->method('getById')
->willReturn([]);
$path ->expects($this->once())
$file ->expects($this->once())
->method('lock')
->with(\OCP\Lock\ILockingProvider::LOCK_SHARED);
$this->ocs->createShare('valid-path', 32 );
$this->ocs->createShare('valid-path', 31 );
}
public function testCreateShareUserNoShareWith() {
$this->expectException(\OCP\AppFramework\OCS\OCSNotFoundException::class);
public function testCreateShareUserNoShareWith(): void {
$this->expectException(OCSNotFoundException::class);
$this->expectExceptionMessage('Please specify a valid user');
$share = $this->newShare();
@ -1732,7 +1736,7 @@ class ShareAPIControllerTest extends TestCase {
/** @var \OCA\Files_Sharing\Controller\ShareAPIController $ocs */
$ocs = $this->getMockBuilder(ShareAPIController::class)
->setConstructorArgs([
$this->appName ,
Application::APP_ID ,
$this->request,
$this->shareManager,
$this->groupManager,
@ -1825,10 +1829,10 @@ class ShareAPIControllerTest extends TestCase {
$share = $this->newShare();
$this->shareManager->method('newShare')->willReturn($share);
/** @var ShareAPIController|\PHPUnit\Framework\MockObject\ MockObject $ocs */
/** @var ShareAPIController& MockObject $ocs */
$ocs = $this->getMockBuilder(ShareAPIController::class)
->setConstructorArgs([
$this->appName ,
Application::APP_ID ,
$this->request,
$this->shareManager,
$this->groupManager,
@ -1951,7 +1955,9 @@ class ShareAPIControllerTest extends TestCase {
$this->rootFolder->method('getById')
->willReturn([]);
$this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager()->newShare());
$this->shareManager->method('newShare')->willReturn(\OCP\Server::get(IManager::class)->newShare());
$this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
$this->shareManager->method('shareApiAllowLinks')->willReturn(false);
$this->ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, IShare::TYPE_LINK);
}
@ -1974,31 +1980,34 @@ class ShareAPIControllerTest extends TestCase {
$this->rootFolder->method('getById')
->willReturn([]);
$this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager( )->newShare());
$this->shareManager->method('newShare')->willReturn(\OCP\Server::get(IManager::class )->newShare());
$this->shareManager->method('shareApiAllowLinks')->willReturn(true);
$this->ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, IShare::TYPE_LINK, null, 'true');
}
public function testCreateShareLinkPublicUploadFile() {
$this->expectException(\OCP\AppFramework\OCS\OCSNotFound Exception::class);
public function testCreateShareLinkPublicUploadFile(): void {
$this->expectException(OCSBadRequest Exception::class);
$this->expectExceptionMessage('Public upload is only possible for publicly shared folders');
$path = $this->getMockBuilder(File::class)->getMock();
$storage = $this->createMock(Storage::class);
$storage = $this->createMock(IStorage::class);
$storage->method('instanceOfStorage')
->willReturnMap([
['OCA\Files_Sharing\External\Storage', false],
['OCA\Files_Sharing\SharedStorage', false],
]);
$path->method('getStorage')->willReturn($storage);
$file = $this->createMock(File::class);
$file->method('getId')->willReturn(42);
$file->method('getStorage')->willReturn($storage);
$this->rootFolder->method('getUserFolder')->with($this->currentUser)->willReturnSelf();
$this->rootFolder->method('get')->with('valid-path')->willReturn($path);
$this->rootFolder->method('get')->with('valid-path')->willReturn($file );
$this->rootFolder->method('getById')
->willReturn([]);
$this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager( )->newShare());
$this->shareManager->method('newShare')->willReturn(\OCP\Server::get(IManager::class )->newShare());
$this->shareManager->method('shareApiAllowLinks')->willReturn(true);
$this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
@ -2021,7 +2030,7 @@ class ShareAPIControllerTest extends TestCase {
$this->rootFolder->method('getById')
->willReturn([]);
$this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager( )->newShare());
$this->shareManager->method('newShare')->willReturn(\OCP\Server::get(IManager::class )->newShare());
$this->shareManager->method('shareApiAllowLinks')->willReturn(true);
$this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
@ -2059,23 +2068,23 @@ class ShareAPIControllerTest extends TestCase {
$this->rootFolder->method('getById')
->willReturn([]);
$this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager( )->newShare());
$this->shareManager->method('newShare')->willReturn(\OCP\Server::get(IManager::class )->newShare());
$this->shareManager->method('shareApiAllowLinks')->willReturn(true);
$this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
$this->shareManager->expects($this->once())->method('createShare')->with(
$this->callback(function (\OCP\Share\ IShare $share) use ($path) {
return $share->getNode() === $path & &
$share->getShareType() === IShare::TYPE_LINK & &
$share->getPermissions() === \OCP\Constants::PERMISSION_ALL & &
$share->getSharedBy() === 'currentUser' & &
$share->getPassword() === 'password' & &
$share->getExpirationDate() === null;
$this->callback(function (IShare $share) use ($path) {
return $share->getNode() === $path
& & $share->getShareType() === IShare::TYPE_LINK
& & $share->getPermissions() === Constants::PERMISSION_READ // publicUpload was set to false
& & $share->getSharedBy() === 'currentUser'
& & $share->getPassword() === 'password'
& & $share->getExpirationDate() === null;
})
)->willReturnArgument(0);
$expected = new DataResponse([]);
$result = $ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL , IShare::TYPE_LINK, null, 'false', 'password', null, '');
$result = $ocs->createShare('valid-path', Constants::PERMISSION_READ , IShare::TYPE_LINK, null, 'false', 'password', null, '');
$this->assertInstanceOf(get_class($expected), $result);
$this->assertEquals($expected->getData(), $result->getData());
@ -2097,7 +2106,7 @@ class ShareAPIControllerTest extends TestCase {
$this->rootFolder->method('getById')
->willReturn([]);
$this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager( )->newShare());
$this->shareManager->method('newShare')->willReturn(\OCP\Server::get(IManager::class )->newShare());
$this->shareManager->method('shareApiAllowLinks')->willReturn(true);
$this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
@ -2107,7 +2116,7 @@ class ShareAPIControllerTest extends TestCase {
$this->callback(function (\OCP\Share\IShare $share) use ($path) {
return $share->getNode() === $path & &
$share->getShareType() === IShare::TYPE_LINK & &
$share->getPermissions() === \OCP\Constants::PERMISSION_ALL & &
$share->getPermissions() === (Constants::PERMISSION_ALL & ~(Constants::PERMISSION_SHARE)) & &
$share->getSharedBy() === 'currentUser' & &
$share->getPassword() === 'password' & &
$share->getSendPasswordByTalk() === true & &
@ -2116,7 +2125,7 @@ class ShareAPIControllerTest extends TestCase {
)->willReturnArgument(0);
$expected = new DataResponse([]);
$result = $ocs->createShare('valid-path', \OCP\ Constants::PERMISSION_ALL, IShare::TYPE_LINK, null, 'fals e', 'password', 'true', '');
$result = $ocs->createShare('valid-path', Constants::PERMISSION_ALL, IShare::TYPE_LINK, null, 'tru e', 'password', 'true', '');
$this->assertInstanceOf(get_class($expected), $result);
$this->assertEquals($expected->getData(), $result->getData());
@ -2143,7 +2152,7 @@ class ShareAPIControllerTest extends TestCase {
$this->rootFolder->method('getById')
->willReturn([]);
$this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager( )->newShare());
$this->shareManager->method('newShare')->willReturn(\OCP\Server::get(IManager::class )->newShare());
$this->shareManager->method('shareApiAllowLinks')->willReturn(true);
$this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
@ -2180,7 +2189,7 @@ class ShareAPIControllerTest extends TestCase {
$this->rootFolder->method('getById')
->willReturn([]);
$this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager( )->newShare());
$this->shareManager->method('newShare')->willReturn(\OCP\Server::get(IManager::class )->newShare());
$this->shareManager->method('shareApiAllowLinks')->willReturn(true);
$this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
@ -2225,7 +2234,7 @@ class ShareAPIControllerTest extends TestCase {
$this->rootFolder->method('getById')
->willReturn([]);
$this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager( )->newShare());
$this->shareManager->method('newShare')->willReturn(\OCP\Server::get(IManager::class )->newShare());
$this->shareManager->method('shareApiAllowLinks')->willReturn(true);
$this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
@ -2239,7 +2248,7 @@ class ShareAPIControllerTest extends TestCase {
/** @var \OCA\Files_Sharing\Controller\ShareAPIController $ocs */
$ocs = $this->getMockBuilder(ShareAPIController::class)
->setConstructorArgs([
$this->appName ,
Application::APP_ID ,
$this->request,
$this->shareManager,
$this->groupManager,
@ -2307,7 +2316,7 @@ class ShareAPIControllerTest extends TestCase {
/** @var \OCA\Files_Sharing\Controller\ShareAPIController $ocs */
$ocs = $this->getMockBuilder(ShareAPIController::class)
->setConstructorArgs([
$this->appName ,
Application::APP_ID ,
$this->request,
$this->shareManager,
$this->groupManager,
@ -2409,11 +2418,7 @@ class ShareAPIControllerTest extends TestCase {
)->willReturnCallback(
function ($share) {
$share->setSharedWith('recipientRoom');
$share->setPermissions(
\OCP\Constants::PERMISSION_ALL &
~\OCP\Constants::PERMISSION_DELETE &
~\OCP\Constants::PERMISSION_CREATE
);
$share->setPermissions(Constants::PERMISSION_ALL);
}
);
@ -2422,16 +2427,12 @@ class ShareAPIControllerTest extends TestCase {
->willReturn($helper);
$this->shareManager->method('createShare')
->with($this->callback(function (\OCP\Share\IShare $share) use ($path) {
return $share->getNode() === $path & &
$share->getPermissions() === (
\OCP\Constants::PERMISSION_ALL &
~\OCP\Constants::PERMISSION_DELETE &
~\OCP\Constants::PERMISSION_CREATE
) & &
$share->getShareType() === IShare::TYPE_ROOM & &
$share->getSharedWith() === 'recipientRoom' & &
$share->getSharedBy() === 'currentUser';
->with($this->callback(function (IShare $share) use ($path) {
return $share->getNode() === $path
& & $share->getPermissions() === Constants::PERMISSION_ALL
& & $share->getShareType() === IShare::TYPE_ROOM
& & $share->getSharedWith() === 'recipientRoom'
& & $share->getSharedBy() === 'currentUser';
}))
->willReturnArgument(0);
@ -2512,15 +2513,13 @@ class ShareAPIControllerTest extends TestCase {
->willReturn(true);
$helper = $this->getMockBuilder('\OCA\Talk\Share\Helper\ShareAPIController')
->set Methods(['createShare'])
->add Methods(['createShare'])
->getMock();
$helper->method('createShare')
->with(
$share,
'recipientRoom',
\OCP\Constants::PERMISSION_ALL &
~\OCP\Constants::PERMISSION_DELETE &
~\OCP\Constants::PERMISSION_CREATE,
Constants::PERMISSION_ALL & ~(Constants::PERMISSION_CREATE | Constants::PERMISSION_DELETE),
''
)->willReturnCallback(
function ($share) {
@ -2541,14 +2540,14 @@ class ShareAPIControllerTest extends TestCase {
* Test for https://github.com/owncloud/core/issues/22587
* TODO: Remove once proper solution is in place
*/
public function testCreateReshareOfFederatedMountNoDeletePermissions() {
$share = \OC::$server->getShareManager( )->newShare();
public function testCreateReshareOfFederatedMountNoDeletePermissions(): void {
$share = \OCP\Server::get(IManager::class )->newShare();
$this->shareManager->method('newShare')->willReturn($share);
/** @var ShareAPIController|\PHPUnit\Framework\MockObject\ MockObject $ocs */
/** @var ShareAPIController& MockObject $ocs */
$ocs = $this->getMockBuilder(ShareAPIController::class)
->setConstructorArgs([
$this->appName ,
Application::APP_ID ,
$this->request,
$this->shareManager,
$this->groupManager,
@ -2740,8 +2739,8 @@ class ShareAPIControllerTest extends TestCase {
$folder->method('getId')
->willReturn(42);
$share = \OC::$server->getShareManager( )->newShare();
$share->setPermissions(\OCP\ Constants::PERMISSION_ALL)
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setPermissions(Constants::PERMISSION_ALL)
->setSharedBy($this->currentUser)
->setShareType(IShare::TYPE_LINK)
->setNode($folder);
@ -2797,8 +2796,8 @@ class ShareAPIControllerTest extends TestCase {
$folder->method('getId')
->willReturn(42);
$share = \OC::$server->getShareManager( )->newShare();
$share->setPermissions(\OCP\ Constants::PERMISSION_ALL)
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setPermissions(Constants::PERMISSION_ALL)
->setSharedBy($this->currentUser)
->setShareType(IShare::TYPE_LINK)
->setPassword('password')
@ -2858,8 +2857,8 @@ class ShareAPIControllerTest extends TestCase {
$folder->method('getId')
->willReturn(42);
$share = \OC::$server->getShareManager( )->newShare();
$share->setPermissions(\OCP\ Constants::PERMISSION_ALL)
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setPermissions(Constants::PERMISSION_ALL)
->setSharedBy($this->currentUser)
->setShareType(IShare::TYPE_LINK)
->setPassword('password')
@ -2889,7 +2888,7 @@ class ShareAPIControllerTest extends TestCase {
->willReturn(42);
$expected = new DataResponse([]);
$result = $ocs->updateShare(42, $permissions, 'password', null, 'true' , null);
$result = $ocs->updateShare(42, $permissions, 'password', null, null , null);
$this->assertInstanceOf(get_class($expected), $result);
$this->assertEquals($expected->getData(), $result->getData());
@ -2910,7 +2909,7 @@ class ShareAPIControllerTest extends TestCase {
$this->expectException(\OCP\AppFramework\OCS\OCSBadRequestException::class);
$this->expectExceptionMessage('Share must at least have READ or CREATE permissions');
$this->testUpdateLinkShareSetCRUDPermissions($permissions);
$this->testUpdateLinkShareSetCRUDPermissions($permissions, null );
}
public function publicLinkInvalidPermissionsProvider2() {
@ -2946,8 +2945,8 @@ class ShareAPIControllerTest extends TestCase {
$folder->method('getId')
->willReturn(42);
$share = \OC::$server->getShareManager( )->newShare();
$share->setPermissions(\OCP\ Constants::PERMISSION_ALL)
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setPermissions(Constants::PERMISSION_ALL)
->setSharedBy($this->currentUser)
->setShareType(IShare::TYPE_LINK)
->setNode($folder);
@ -2992,8 +2991,8 @@ class ShareAPIControllerTest extends TestCase {
$folder->method('getId')->willReturn(42);
$share = \OC::$server->getShareManager( )->newShare();
$share->setPermissions(\OCP\ Constants::PERMISSION_ALL)
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setPermissions(Constants::PERMISSION_ALL)
->setSharedBy($this->currentUser)
->setShareType(IShare::TYPE_LINK)
->setNode($folder);
@ -3011,25 +3010,32 @@ class ShareAPIControllerTest extends TestCase {
$ocs = $this->mockFormatShare();
$file = $this->getMockBuilder(File::class)->getMock();
$file->method('getId')
->willReturn(42);
[$userFolder, $folder] = $this->getNonSharedUserFolder();
[$userFolder, $file] = $this->getNonSharedUserFile();
$file->method('getId')->willReturn(42);
$userFolder->method('getById')
->with(42)
->willReturn([$folder ]);
->willReturn([$file ]);
$this->rootFolder->method('getUserFolder')
->with($this->currentUser)
->willReturn($userFolder);
$share = \OC::$server->getShareManager( )->newShare();
$share->setPermissions(\OCP\ Constants::PERMISSION_ALL)
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setPermissions(Constants::PERMISSION_ALL)
->setSharedBy($this->currentUser)
->setShareType(IShare::TYPE_LINK)
->setNode($file);
$this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share);
$this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
$this->shareManager
->method('getShareById')
->with('ocinternal:42')
->willReturn($share);
$this->shareManager
->method('shareApiLinkAllowPublicUpload')
->willReturn(true);
$this->shareManager
->method('updateShare')
->with($share)
->willThrowException(new \InvalidArgumentException('File shares cannot have create or delete permissions'));
$ocs->updateShare(42, null, 'password', null, 'true', '');
}
@ -3379,8 +3385,8 @@ class ShareAPIControllerTest extends TestCase {
$folder->method('getId')
->willReturn(42);
$share = \OC::$server->getShareManager( )->newShare();
$share->setPermissions(\OCP\ Constants::PERMISSION_ALL)
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setPermissions(Constants::PERMISSION_ALL)
->setSharedBy($this->currentUser)
->setShareType(IShare::TYPE_LINK)
->setPassword('password')
@ -3440,8 +3446,8 @@ class ShareAPIControllerTest extends TestCase {
$folder->method('getId')
->willReturn(42);
$share = \OC::$server->getShareManager( )->newShare();
$share->setPermissions(\OCP\ Constants::PERMISSION_ALL)
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setPermissions(Constants::PERMISSION_ALL)
->setSharedBy($this->currentUser)
->setShareType(IShare::TYPE_LINK)
->setPassword('password')
@ -3500,8 +3506,8 @@ class ShareAPIControllerTest extends TestCase {
$folder->method('getId')
->willReturn(42);
$share = \OC::$server->getShareManager( )->newShare();
$share->setPermissions(\OCP\ Constants::PERMISSION_ALL)
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setPermissions(Constants::PERMISSION_ALL)
->setSharedBy($this->currentUser)
->setShareType(IShare::TYPE_LINK)
->setPassword('password')
@ -3516,17 +3522,19 @@ class ShareAPIControllerTest extends TestCase {
$this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share);
$this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
$this->shareManager->expects($this->once())->method('updateShare')->with(
$this->callback(function (\OCP\Share\IShare $share) use ($date) {
return $share->getPermissions() === (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE) & &
$share->getPassword() === 'password' & &
$share->getSendPasswordByTalk() === true & &
$share->getExpirationDate() === $date & &
$share->getNote() === 'note' & &
$share->getLabel() === 'label' & &
$share->getHideDownload() === true;
})
)->willReturnArgument(0);
$this->shareManager->expects($this->once())
->method('updateShare')
->with(
$this->callback(function (IShare $share) use ($date) {
return $share->getPermissions() === Constants::PERMISSION_ALL & &
$share->getPassword() === 'password' & &
$share->getSendPasswordByTalk() === true & &
$share->getExpirationDate() === $date & &
$share->getNote() === 'note' & &
$share->getLabel() === 'label' & &
$share->getHideDownload() === true;
})
)->willReturnArgument(0);
$this->rootFolder->method('getUserFolder')
->with($this->currentUser)
@ -3545,7 +3553,7 @@ class ShareAPIControllerTest extends TestCase {
$this->shareManager->method('getSharedWith')->willReturn([]);
$expected = new DataResponse([]);
$result = $ocs->updateShare(42, 31 , null, null, null, null, null, null, null);
$result = $ocs->updateShare(42, Constants::PERMISSION_ALL , null, null, null, null, null, null, null);
$this->assertInstanceOf(get_class($expected), $result);
$this->assertEquals($expected->getData(), $result->getData());
@ -3558,8 +3566,8 @@ class ShareAPIControllerTest extends TestCase {
$file->method('getId')
->willReturn(42);
$share = \OC::$server->getShareManager( )->newShare();
$share->setPermissions(\OCP\ Constants::PERMISSION_ALL)
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setPermissions(Constants::PERMISSION_ALL)
->setSharedBy($this->currentUser)
->setShareType(IShare::TYPE_USER)
->setNode($file);
@ -3604,7 +3612,7 @@ class ShareAPIControllerTest extends TestCase {
$folder->method('getId')
->willReturn(42);
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share
->setId(42)
->setSharedBy($this->currentUser)
@ -3616,7 +3624,7 @@ class ShareAPIControllerTest extends TestCase {
// note: updateShare will modify the received instance but getSharedWith will reread from the database,
// so their values will be different
$incomingShare = \OC::$server->getShareManager( )->newShare();
$incomingShare = \OCP\Server::get(IManager::class )->newShare();
$incomingShare
->setId(42)
->setSharedBy($this->currentUser)
@ -3676,7 +3684,7 @@ class ShareAPIControllerTest extends TestCase {
$folder->method('getId')
->willReturn(42);
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share
->setId(42)
->setSharedBy($this->currentUser)
@ -3688,7 +3696,7 @@ class ShareAPIControllerTest extends TestCase {
// note: updateShare will modify the received instance but getSharedWith will reread from the database,
// so their values will be different
$incomingShare = \OC::$server->getShareManager( )->newShare();
$incomingShare = \OCP\Server::get(IManager::class )->newShare();
$incomingShare
->setId(42)
->setSharedBy($this->currentUser)
@ -3793,7 +3801,7 @@ class ShareAPIControllerTest extends TestCase {
$result = [];
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_USER)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -3895,7 +3903,7 @@ class ShareAPIControllerTest extends TestCase {
], false
];
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_USER)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -3949,7 +3957,7 @@ class ShareAPIControllerTest extends TestCase {
], $share, [], false
];
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_USER)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -4005,7 +4013,7 @@ class ShareAPIControllerTest extends TestCase {
// with existing group
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_GROUP)
->setSharedWith('recipientGroup')
->setSharedBy('initiator')
@ -4059,7 +4067,7 @@ class ShareAPIControllerTest extends TestCase {
];
// with unknown group / no group backend
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_GROUP)
->setSharedWith('recipientGroup2')
->setSharedBy('initiator')
@ -4110,7 +4118,7 @@ class ShareAPIControllerTest extends TestCase {
], $share, [], false
];
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_LINK)
->setSharedBy('initiator')
->setShareOwner('owner')
@ -4169,7 +4177,7 @@ class ShareAPIControllerTest extends TestCase {
], $share, [], false
];
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_LINK)
->setSharedBy('initiator')
->setShareOwner('owner')
@ -4228,7 +4236,7 @@ class ShareAPIControllerTest extends TestCase {
], $share, [], false
];
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_REMOTE)
->setSharedBy('initiator')
->setSharedWith('user@server.com')
@ -4281,7 +4289,7 @@ class ShareAPIControllerTest extends TestCase {
], $share, [], false
];
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_REMOTE_GROUP)
->setSharedBy('initiator')
->setSharedWith('user@server.com')
@ -4335,7 +4343,7 @@ class ShareAPIControllerTest extends TestCase {
];
// Circle with id, display name and avatar set by the Circles app
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_CIRCLE)
->setSharedBy('initiator')
->setSharedWith('Circle (Public circle, circleOwner) [4815162342]')
@ -4391,7 +4399,7 @@ class ShareAPIControllerTest extends TestCase {
];
// Circle with id set by the Circles app
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_CIRCLE)
->setSharedBy('initiator')
->setSharedWith('Circle (Public circle, circleOwner) [4815162342]')
@ -4444,7 +4452,7 @@ class ShareAPIControllerTest extends TestCase {
];
// Circle with id not set by the Circles app
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_CIRCLE)
->setSharedBy('initiator')
->setSharedWith('Circle (Public circle, circleOwner)')
@ -4496,7 +4504,7 @@ class ShareAPIControllerTest extends TestCase {
], $share, [], false
];
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_USER)
->setSharedBy('initiator')
->setSharedWith('recipient')
@ -4511,7 +4519,7 @@ class ShareAPIControllerTest extends TestCase {
[], $share, [], true
];
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_EMAIL)
->setSharedBy('initiator')
->setSharedWith('user@server.com')
@ -4566,7 +4574,7 @@ class ShareAPIControllerTest extends TestCase {
], $share, [], false
];
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_EMAIL)
->setSharedBy('initiator')
->setSharedWith('user@server.com')
@ -4623,7 +4631,7 @@ class ShareAPIControllerTest extends TestCase {
];
// Preview is available
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_USER)
->setSharedWith('recipient')
->setSharedBy('initiator')
@ -4789,7 +4797,7 @@ class ShareAPIControllerTest extends TestCase {
$result = [];
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_ROOM)
->setSharedWith('recipientRoom')
->setSharedBy('initiator')
@ -4841,7 +4849,7 @@ class ShareAPIControllerTest extends TestCase {
], $share, false, []
];
$share = \OC::$server->getShareManager( )->newShare();
$share = \OCP\Server::get(IManager::class )->newShare();
$share->setShareType(IShare::TYPE_ROOM)
->setSharedWith('recipientRoom')
->setSharedBy('initiator')
@ -4947,6 +4955,9 @@ class ShareAPIControllerTest extends TestCase {
$this->assertEquals($expects, $result);
}
/**
* @return list{Folder, Folder}
*/
private function getNonSharedUserFolder(): array {
$node = $this->getMockBuilder(Folder::class)->getMock();
$userFolder = $this->getMockBuilder(Folder::class)->getMock();
@ -4961,6 +4972,9 @@ class ShareAPIControllerTest extends TestCase {
return [$userFolder, $node];
}
/**
* @return list{Folder, File}
*/
private function getNonSharedUserFile(): array {
$node = $this->getMockBuilder(File::class)->getMock();
$userFolder = $this->getMockBuilder(Folder::class)->getMock();