summaryrefslogtreecommitdiffstats
path: root/apps/files_sharing/tests/Controller
diff options
context:
space:
mode:
authorRoeland Jago Douma <roeland@famdouma.nl>2016-10-24 11:46:25 +0200
committerRoeland Jago Douma <roeland@famdouma.nl>2016-10-24 11:46:25 +0200
commitf589f1a1d62bac542f96082c3db2c9577c841e59 (patch)
tree82fac23710866b68289a39c26b2b8eda3b85f338 /apps/files_sharing/tests/Controller
parentf054adb4291c83b05777688360780146af5f7d94 (diff)
downloadnextcloud-server-f589f1a1d62bac542f96082c3db2c9577c841e59.tar.gz
nextcloud-server-f589f1a1d62bac542f96082c3db2c9577c841e59.zip
Move files_sharing Controllers => Controller
lib/Controller is the default location for controllers. So lets put them all in there. Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
Diffstat (limited to 'apps/files_sharing/tests/Controller')
-rw-r--r--apps/files_sharing/tests/Controller/ExternalShareControllerTest.php156
-rw-r--r--apps/files_sharing/tests/Controller/ShareControllerTest.php502
2 files changed, 658 insertions, 0 deletions
diff --git a/apps/files_sharing/tests/Controller/ExternalShareControllerTest.php b/apps/files_sharing/tests/Controller/ExternalShareControllerTest.php
new file mode 100644
index 00000000000..71a4f4adeba
--- /dev/null
+++ b/apps/files_sharing/tests/Controller/ExternalShareControllerTest.php
@@ -0,0 +1,156 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ *
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\Files_Sharing\Tests\Controllers;
+
+use OCA\Files_Sharing\Controller\ExternalSharesController;
+use OCP\AppFramework\Http\DataResponse;
+use OCP\AppFramework\Http\JSONResponse;
+use OCP\Http\Client\IClientService;
+use OCP\IRequest;
+
+/**
+ * Class ExternalShareControllerTest
+ *
+ * @package OCA\Files_Sharing\Controllers
+ */
+class ExternalShareControllerTest extends \Test\TestCase {
+ /** @var IRequest */
+ private $request;
+ /** @var \OCA\Files_Sharing\External\Manager */
+ private $externalManager;
+ /** @var IClientService */
+ private $clientService;
+
+ public function setUp() {
+ parent::setUp();
+ $this->request = $this->getMockBuilder('\\OCP\\IRequest')
+ ->disableOriginalConstructor()->getMock();
+ $this->externalManager = $this->getMockBuilder('\\OCA\\Files_Sharing\\External\\Manager')
+ ->disableOriginalConstructor()->getMock();
+ $this->clientService = $this->getMockBuilder('\\OCP\Http\\Client\\IClientService')
+ ->disableOriginalConstructor()->getMock();
+ }
+
+ /**
+ * @return ExternalSharesController
+ */
+ public function getExternalShareController() {
+ return new ExternalSharesController(
+ 'files_sharing',
+ $this->request,
+ $this->externalManager,
+ $this->clientService
+ );
+ }
+
+ public function testIndex() {
+ $this->externalManager
+ ->expects($this->once())
+ ->method('getOpenShares')
+ ->will($this->returnValue(['MyDummyArray']));
+
+ $this->assertEquals(new JSONResponse(['MyDummyArray']), $this->getExternalShareController()->index());
+ }
+
+ public function testCreate() {
+ $this->externalManager
+ ->expects($this->once())
+ ->method('acceptShare')
+ ->with(4);
+
+ $this->assertEquals(new JSONResponse(), $this->getExternalShareController()->create(4));
+ }
+
+ public function testDestroy() {
+ $this->externalManager
+ ->expects($this->once())
+ ->method('declineShare')
+ ->with(4);
+
+ $this->assertEquals(new JSONResponse(), $this->getExternalShareController()->destroy(4));
+ }
+
+ public function testRemoteWithValidHttps() {
+ $client = $this->getMockBuilder('\\OCP\\Http\\Client\\IClient')
+ ->disableOriginalConstructor()->getMock();
+ $response = $this->getMockBuilder('\\OCP\\Http\\Client\\IResponse')
+ ->disableOriginalConstructor()->getMock();
+ $response
+ ->expects($this->exactly(2))
+ ->method('getBody')
+ ->will($this->onConsecutiveCalls('Certainly not a JSON string', '{"installed":true,"maintenance":false,"version":"8.1.0.8","versionstring":"8.1.0","edition":""}'));
+ $client
+ ->expects($this->any())
+ ->method('get')
+ ->will($this->returnValue($response));
+
+ $this->clientService
+ ->expects($this->exactly(2))
+ ->method('newClient')
+ ->will($this->returnValue($client));
+
+ $this->assertEquals(new DataResponse('https'), $this->getExternalShareController()->testRemote('owncloud.org'));
+ }
+
+ public function testRemoteWithWorkingHttp() {
+ $client = $this->getMockBuilder('\\OCP\\Http\\Client\\IClient')
+ ->disableOriginalConstructor()->getMock();
+ $response = $this->getMockBuilder('\\OCP\\Http\\Client\\IResponse')
+ ->disableOriginalConstructor()->getMock();
+ $client
+ ->method('get')
+ ->will($this->returnValue($response));
+ $response
+ ->expects($this->exactly(5))
+ ->method('getBody')
+ ->will($this->onConsecutiveCalls('Certainly not a JSON string', 'Certainly not a JSON string', 'Certainly not a JSON string', 'Certainly not a JSON string', '{"installed":true,"maintenance":false,"version":"8.1.0.8","versionstring":"8.1.0","edition":""}'));
+ $this->clientService
+ ->expects($this->exactly(5))
+ ->method('newClient')
+ ->will($this->returnValue($client));
+
+ $this->assertEquals(new DataResponse('http'), $this->getExternalShareController()->testRemote('owncloud.org'));
+ }
+
+ public function testRemoteWithInvalidRemote() {
+ $client = $this->getMockBuilder('\\OCP\\Http\\Client\\IClient')
+ ->disableOriginalConstructor()->getMock();
+ $response = $this->getMockBuilder('\\OCP\\Http\\Client\\IResponse')
+ ->disableOriginalConstructor()->getMock();
+ $client
+ ->method('get')
+ ->will($this->returnValue($response));
+ $response
+ ->expects($this->exactly(6))
+ ->method('getBody')
+ ->will($this->returnValue('Certainly not a JSON string'));
+ $this->clientService
+ ->expects($this->exactly(6))
+ ->method('newClient')
+ ->will($this->returnValue($client));
+
+ $this->assertEquals(new DataResponse(false), $this->getExternalShareController()->testRemote('owncloud.org'));
+ }
+}
diff --git a/apps/files_sharing/tests/Controller/ShareControllerTest.php b/apps/files_sharing/tests/Controller/ShareControllerTest.php
new file mode 100644
index 00000000000..dae7740b3ae
--- /dev/null
+++ b/apps/files_sharing/tests/Controller/ShareControllerTest.php
@@ -0,0 +1,502 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Björn Schießle <bjoern@schiessle.org>
+ * @author Georg Ehrke <georg@owncloud.com>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Vincent Cloutier <vincent1cloutier@gmail.com>
+ *
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\Files_Sharing\Tests\Controllers;
+
+use OC\Files\Filesystem;
+use OCA\FederatedFileSharing\FederatedShareProvider;
+use OCA\Files_Sharing\Controller\ShareController;
+use OCP\AppFramework\Http\DataResponse;
+use OCP\Share\Exceptions\ShareNotFound;
+use OCP\AppFramework\Http\NotFoundResponse;
+use OCP\AppFramework\Http\RedirectResponse;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\ISession;
+use OCP\IUserManager;
+use OCP\Security\ISecureRandom;
+use OCP\IURLGenerator;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
+
+/**
+ * @group DB
+ *
+ * @package OCA\Files_Sharing\Controllers
+ */
+class ShareControllerTest extends \Test\TestCase {
+
+ /** @var string */
+ private $user;
+ /** @var string */
+ private $oldUser;
+
+ /** @var string */
+ private $appName = 'files_sharing';
+ /** @var ShareController */
+ private $shareController;
+ /** @var IURLGenerator | \PHPUnit_Framework_MockObject_MockObject */
+ private $urlGenerator;
+ /** @var ISession | \PHPUnit_Framework_MockObject_MockObject */
+ private $session;
+ /** @var \OCP\IPreview | \PHPUnit_Framework_MockObject_MockObject */
+ private $previewManager;
+ /** @var \OCP\IConfig | \PHPUnit_Framework_MockObject_MockObject */
+ private $config;
+ /** @var \OC\Share20\Manager | \PHPUnit_Framework_MockObject_MockObject */
+ private $shareManager;
+ /** @var IUserManager | \PHPUnit_Framework_MockObject_MockObject */
+ private $userManager;
+ /** @var FederatedShareProvider | \PHPUnit_Framework_MockObject_MockObject */
+ private $federatedShareProvider;
+ /** @var EventDispatcherInterface | \PHPUnit_Framework_MockObject_MockObject */
+ private $eventDispatcher;
+
+ protected function setUp() {
+ parent::setUp();
+ $this->appName = 'files_sharing';
+
+ $this->shareManager = $this->getMockBuilder('\OC\Share20\Manager')->disableOriginalConstructor()->getMock();
+ $this->urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')->getMock();
+ $this->session = $this->getMockBuilder('\OCP\ISession')->getMock();
+ $this->previewManager = $this->getMockBuilder('\OCP\IPreview')->getMock();
+ $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock();
+ $this->userManager = $this->getMockBuilder('\OCP\IUserManager')->getMock();
+ $this->federatedShareProvider = $this->getMockBuilder('OCA\FederatedFileSharing\FederatedShareProvider')
+ ->disableOriginalConstructor()->getMock();
+ $this->federatedShareProvider->expects($this->any())
+ ->method('isOutgoingServer2serverShareEnabled')->willReturn(true);
+ $this->federatedShareProvider->expects($this->any())
+ ->method('isIncomingServer2serverShareEnabled')->willReturn(true);
+ $this->eventDispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock();
+
+ $this->shareController = new \OCA\Files_Sharing\Controller\ShareController(
+ $this->appName,
+ $this->getMockBuilder('\OCP\IRequest')->getMock(),
+ $this->config,
+ $this->urlGenerator,
+ $this->userManager,
+ $this->getMockBuilder('\OCP\ILogger')->getMock(),
+ $this->getMockBuilder('\OCP\Activity\IManager')->getMock(),
+ $this->shareManager,
+ $this->session,
+ $this->previewManager,
+ $this->getMockBuilder('\OCP\Files\IRootFolder')->getMock(),
+ $this->federatedShareProvider,
+ $this->eventDispatcher,
+ $this->getMockBuilder('\OCP\IL10N')->getMock(),
+ $this->getMockBuilder('\OC_Defaults')->getMock()
+ );
+
+
+ // Store current user
+ $this->oldUser = \OC_User::getUser();
+
+ // Create a dummy user
+ $this->user = \OC::$server->getSecureRandom()->generate(12, ISecureRandom::CHAR_LOWER);
+
+ \OC::$server->getUserManager()->createUser($this->user, $this->user);
+ \OC_Util::tearDownFS();
+ $this->loginAsUser($this->user);
+ }
+
+ protected function tearDown() {
+ \OC_Util::tearDownFS();
+ \OC_User::setUserId('');
+ Filesystem::tearDown();
+ $user = \OC::$server->getUserManager()->get($this->user);
+ if ($user !== null) { $user->delete(); }
+ \OC_User::setIncognitoMode(false);
+
+ \OC::$server->getSession()->set('public_link_authenticated', '');
+
+ // Set old user
+ \OC_User::setUserId($this->oldUser);
+ \OC_Util::setupFS($this->oldUser);
+ parent::tearDown();
+ }
+
+ public function testShowAuthenticateNotAuthenticated() {
+ $share = \OC::$server->getShareManager()->newShare();
+
+ $this->shareManager
+ ->expects($this->once())
+ ->method('getShareByToken')
+ ->with('token')
+ ->willReturn($share);
+
+ $response = $this->shareController->showAuthenticate('token');
+ $expectedResponse = new TemplateResponse($this->appName, 'authenticate', [], 'guest');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testShowAuthenticateAuthenticatedForDifferentShare() {
+ $share = \OC::$server->getShareManager()->newShare();
+ $share->setId(1);
+
+ $this->shareManager
+ ->expects($this->once())
+ ->method('getShareByToken')
+ ->with('token')
+ ->willReturn($share);
+
+ $this->session->method('exists')->with('public_link_authenticated')->willReturn(true);
+ $this->session->method('get')->with('public_link_authenticated')->willReturn('2');
+
+ $response = $this->shareController->showAuthenticate('token');
+ $expectedResponse = new TemplateResponse($this->appName, 'authenticate', [], 'guest');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testShowAuthenticateCorrectShare() {
+ $share = \OC::$server->getShareManager()->newShare();
+ $share->setId(1);
+
+ $this->shareManager
+ ->expects($this->once())
+ ->method('getShareByToken')
+ ->with('token')
+ ->willReturn($share);
+
+ $this->session->method('exists')->with('public_link_authenticated')->willReturn(true);
+ $this->session->method('get')->with('public_link_authenticated')->willReturn('1');
+
+ $this->urlGenerator->expects($this->once())
+ ->method('linkToRoute')
+ ->with('files_sharing.sharecontroller.showShare', ['token' => 'token'])
+ ->willReturn('redirect');
+
+ $response = $this->shareController->showAuthenticate('token');
+ $expectedResponse = new RedirectResponse('redirect');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testAuthenticateInvalidToken() {
+ $this->shareManager
+ ->expects($this->once())
+ ->method('getShareByToken')
+ ->with('token')
+ ->will($this->throwException(new \OCP\Share\Exceptions\ShareNotFound()));
+
+ $response = $this->shareController->authenticate('token');
+ $expectedResponse = new NotFoundResponse();
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testAuthenticateValidPassword() {
+ $share = \OC::$server->getShareManager()->newShare();
+ $share->setId(42);
+
+ $this->shareManager
+ ->expects($this->once())
+ ->method('getShareByToken')
+ ->with('token')
+ ->willReturn($share);
+
+ $this->shareManager
+ ->expects($this->once())
+ ->method('checkPassword')
+ ->with($share, 'validpassword')
+ ->willReturn(true);
+
+ $this->session
+ ->expects($this->once())
+ ->method('set')
+ ->with('public_link_authenticated', '42');
+
+ $this->urlGenerator->expects($this->once())
+ ->method('linkToRoute')
+ ->with('files_sharing.sharecontroller.showShare', ['token'=>'token'])
+ ->willReturn('redirect');
+
+ $response = $this->shareController->authenticate('token', 'validpassword');
+ $expectedResponse = new RedirectResponse('redirect');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testAuthenticateInvalidPassword() {
+ $share = \OC::$server->getShareManager()->newShare();
+ $share->setNodeId(100)
+ ->setNodeType('file')
+ ->setToken('token')
+ ->setSharedBy('initiator')
+ ->setId(42);
+
+ $this->shareManager
+ ->expects($this->once())
+ ->method('getShareByToken')
+ ->with('token')
+ ->willReturn($share);
+
+ $this->shareManager
+ ->expects($this->once())
+ ->method('checkPassword')
+ ->with($share, 'invalidpassword')
+ ->willReturn(false);
+
+ $this->session
+ ->expects($this->never())
+ ->method('set');
+
+ $hookListner = $this->getMockBuilder('Dummy')->setMethods(['access'])->getMock();
+ \OCP\Util::connectHook('OCP\Share', 'share_link_access', $hookListner, 'access');
+
+ $hookListner->expects($this->once())
+ ->method('access')
+ ->with($this->callback(function(array $data) {
+ return $data['itemType'] === 'file' &&
+ $data['itemSource'] === 100 &&
+ $data['uidOwner'] === 'initiator' &&
+ $data['token'] === 'token' &&
+ $data['errorCode'] === 403 &&
+ $data['errorMessage'] === 'Wrong password';
+ }));
+
+ $response = $this->shareController->authenticate('token', 'invalidpassword');
+ $expectedResponse = new TemplateResponse($this->appName, 'authenticate', array('wrongpw' => true), 'guest');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testShowShareInvalidToken() {
+ $this->shareManager
+ ->expects($this->once())
+ ->method('getShareByToken')
+ ->with('invalidtoken')
+ ->will($this->throwException(new ShareNotFound()));
+
+ // Test without a not existing token
+ $response = $this->shareController->showShare('invalidtoken');
+ $expectedResponse = new NotFoundResponse();
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testShowShareNotAuthenticated() {
+ $share = \OC::$server->getShareManager()->newShare();
+ $share->setPassword('password');
+
+ $this->shareManager
+ ->expects($this->once())
+ ->method('getShareByToken')
+ ->with('validtoken')
+ ->willReturn($share);
+
+ $this->urlGenerator->expects($this->once())
+ ->method('linkToRoute')
+ ->with('files_sharing.sharecontroller.authenticate', ['token' => 'validtoken'])
+ ->willReturn('redirect');
+
+ // Test without a not existing token
+ $response = $this->shareController->showShare('validtoken');
+ $expectedResponse = new RedirectResponse('redirect');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+
+ public function testShowShare() {
+ $owner = $this->getMockBuilder('OCP\IUser')->getMock();
+ $owner->method('getDisplayName')->willReturn('ownerDisplay');
+ $owner->method('getUID')->willReturn('ownerUID');
+
+ $file = $this->getMockBuilder('OCP\Files\File')->getMock();
+ $file->method('getName')->willReturn('file1.txt');
+ $file->method('getMimetype')->willReturn('text/plain');
+ $file->method('getSize')->willReturn(33);
+ $file->method('isReadable')->willReturn(true);
+ $file->method('isShareable')->willReturn(true);
+
+ $share = \OC::$server->getShareManager()->newShare();
+ $share->setId(42);
+ $share->setPassword('password')
+ ->setShareOwner('ownerUID')
+ ->setNode($file)
+ ->setTarget('/file1.txt');
+
+ $this->session->method('exists')->with('public_link_authenticated')->willReturn(true);
+ $this->session->method('get')->with('public_link_authenticated')->willReturn('42');
+
+ $this->previewManager->method('isMimeSupported')->with('text/plain')->willReturn(true);
+
+ $this->config->method('getSystemValue')
+ ->willReturnMap(
+ [
+ ['max_filesize_animated_gifs_public_sharing', 10, 10],
+ ['enable_previews', true, true],
+ ['preview_max_x', 1024, 1024],
+ ['preview_max_y', 1024, 1024],
+ ]
+ );
+ $shareTmpl['maxSizeAnimateGif'] = $this->config->getSystemValue('max_filesize_animated_gifs_public_sharing', 10);
+ $shareTmpl['previewEnabled'] = $this->config->getSystemValue('enable_previews', true);
+
+ $this->shareManager
+ ->expects($this->once())
+ ->method('getShareByToken')
+ ->with('token')
+ ->willReturn($share);
+ $this->config
+ ->expects($this->once())
+ ->method('getAppValue')
+ ->with('core', 'shareapi_public_link_disclaimertext', null)
+ ->willReturn('My disclaimer text');
+
+ $this->userManager->method('get')->with('ownerUID')->willReturn($owner);
+
+ $this->eventDispatcher->expects($this->once())
+ ->method('dispatch')
+ ->with('OCA\Files_Sharing::loadAdditionalScripts');
+
+ $response = $this->shareController->showShare('token');
+ $sharedTmplParams = array(
+ 'displayName' => 'ownerDisplay',
+ 'owner' => 'ownerUID',
+ 'filename' => 'file1.txt',
+ 'directory_path' => '/file1.txt',
+ 'mimetype' => 'text/plain',
+ 'dirToken' => 'token',
+ 'sharingToken' => 'token',
+ 'server2serversharing' => true,
+ 'protected' => 'true',
+ 'dir' => '',
+ 'downloadURL' => null,
+ 'fileSize' => '33 B',
+ 'nonHumanFileSize' => 33,
+ 'maxSizeAnimateGif' => 10,
+ 'previewSupported' => true,
+ 'previewEnabled' => true,
+ 'previewMaxX' => 1024,
+ 'previewMaxY' => 1024,
+ 'hideFileList' => false,
+ 'shareOwner' => 'ownerDisplay',
+ 'disclaimer' => 'My disclaimer text',
+ 'shareUrl' => null,
+ 'previewImage' => null
+ );
+
+ $csp = new \OCP\AppFramework\Http\ContentSecurityPolicy();
+ $csp->addAllowedFrameDomain('\'self\'');
+ $expectedResponse = new TemplateResponse($this->appName, 'public', $sharedTmplParams, 'base');
+ $expectedResponse->setContentSecurityPolicy($csp);
+
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotFoundException
+ */
+ public function testShowShareInvalid() {
+ $owner = $this->getMockBuilder('OCP\IUser')->getMock();
+ $owner->method('getDisplayName')->willReturn('ownerDisplay');
+ $owner->method('getUID')->willReturn('ownerUID');
+
+ $file = $this->getMockBuilder('OCP\Files\File')->getMock();
+ $file->method('getName')->willReturn('file1.txt');
+ $file->method('getMimetype')->willReturn('text/plain');
+ $file->method('getSize')->willReturn(33);
+ $file->method('isShareable')->willReturn(false);
+ $file->method('isReadable')->willReturn(true);
+
+ $share = \OC::$server->getShareManager()->newShare();
+ $share->setId(42);
+ $share->setPassword('password')
+ ->setShareOwner('ownerUID')
+ ->setNode($file)
+ ->setTarget('/file1.txt');
+
+ $this->session->method('exists')->with('public_link_authenticated')->willReturn(true);
+ $this->session->method('get')->with('public_link_authenticated')->willReturn('42');
+
+ $this->previewManager->method('isMimeSupported')->with('text/plain')->willReturn(true);
+
+ $this->config->method('getSystemValue')
+ ->willReturnMap(
+ [
+ ['max_filesize_animated_gifs_public_sharing', 10, 10],
+ ['enable_previews', true, true],
+ ]
+ );
+ $shareTmpl['maxSizeAnimateGif'] = $this->config->getSystemValue('max_filesize_animated_gifs_public_sharing', 10);
+ $shareTmpl['previewEnabled'] = $this->config->getSystemValue('enable_previews', true);
+
+ $this->shareManager
+ ->expects($this->once())
+ ->method('getShareByToken')
+ ->with('token')
+ ->willReturn($share);
+
+ $this->userManager->method('get')->with('ownerUID')->willReturn($owner);
+
+ $this->shareController->showShare('token');
+ }
+
+ public function testDownloadShare() {
+ $share = $this->getMockBuilder('\OCP\Share\IShare')->getMock();
+ $share->method('getPassword')->willReturn('password');
+ $share
+ ->expects($this->once())
+ ->method('getPermissions')
+ ->willReturn(\OCP\Constants::PERMISSION_READ);
+
+ $this->shareManager
+ ->expects($this->once())
+ ->method('getShareByToken')
+ ->with('validtoken')
+ ->willReturn($share);
+
+ $this->urlGenerator->expects($this->once())
+ ->method('linkToRoute')
+ ->with('files_sharing.sharecontroller.authenticate', ['token' => 'validtoken'])
+ ->willReturn('redirect');
+
+ // Test with a password protected share and no authentication
+ $response = $this->shareController->downloadShare('validtoken');
+ $expectedResponse = new RedirectResponse('redirect');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testDownloadShareWithCreateOnlyShare() {
+ $share = $this->getMockBuilder('\OCP\Share\IShare')->getMock();
+ $share->method('getPassword')->willReturn('password');
+ $share
+ ->expects($this->once())
+ ->method('getPermissions')
+ ->willReturn(\OCP\Constants::PERMISSION_CREATE);
+
+ $this->shareManager
+ ->expects($this->once())
+ ->method('getShareByToken')
+ ->with('validtoken')
+ ->willReturn($share);
+
+ // Test with a password protected share and no authentication
+ $response = $this->shareController->downloadShare('validtoken');
+ $expectedResponse = new DataResponse('Share is read-only');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+}