Move pre_shared and post_shared events to EventDispatcher
* Now listeners for those events get proper share objects. * Legacy hooks still fired * Updated tests Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
parent
8fecc336ac
commit
4633717f04
|
@ -22,6 +22,7 @@
|
||||||
*/
|
*/
|
||||||
namespace OC\Share20;
|
namespace OC\Share20;
|
||||||
|
|
||||||
|
use OCP\Files\File;
|
||||||
use OCP\Share\IShare;
|
use OCP\Share\IShare;
|
||||||
use Symfony\Component\EventDispatcher\EventDispatcher;
|
use Symfony\Component\EventDispatcher\EventDispatcher;
|
||||||
use Symfony\Component\EventDispatcher\GenericEvent;
|
use Symfony\Component\EventDispatcher\GenericEvent;
|
||||||
|
@ -41,6 +42,8 @@ class LegacyHooks {
|
||||||
$this->eventDispatcher->addListener('OCP\Share::preUnshare', [$this, 'preUnshare']);
|
$this->eventDispatcher->addListener('OCP\Share::preUnshare', [$this, 'preUnshare']);
|
||||||
$this->eventDispatcher->addListener('OCP\Share::postUnshare', [$this, 'postUnshare']);
|
$this->eventDispatcher->addListener('OCP\Share::postUnshare', [$this, 'postUnshare']);
|
||||||
$this->eventDispatcher->addListener('OCP\Share::postUnshareFromSelf', [$this, 'postUnshareFromSelf']);
|
$this->eventDispatcher->addListener('OCP\Share::postUnshareFromSelf', [$this, 'postUnshareFromSelf']);
|
||||||
|
$this->eventDispatcher->addListener('OCP\Share::preShare', [$this, 'preShare']);
|
||||||
|
$this->eventDispatcher->addListener('OCP\Share::postShare', [$this, 'postShare']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -112,4 +115,58 @@ class LegacyHooks {
|
||||||
];
|
];
|
||||||
return $hookParams;
|
return $hookParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function preShare(GenericEvent $e) {
|
||||||
|
/** @var IShare $share */
|
||||||
|
$share = $e->getSubject();
|
||||||
|
|
||||||
|
// Pre share hook
|
||||||
|
$run = true;
|
||||||
|
$error = '';
|
||||||
|
$preHookData = [
|
||||||
|
'itemType' => $share->getNode() instanceof File ? 'file' : 'folder',
|
||||||
|
'itemSource' => $share->getNode()->getId(),
|
||||||
|
'shareType' => $share->getShareType(),
|
||||||
|
'uidOwner' => $share->getSharedBy(),
|
||||||
|
'permissions' => $share->getPermissions(),
|
||||||
|
'fileSource' => $share->getNode()->getId(),
|
||||||
|
'expiration' => $share->getExpirationDate(),
|
||||||
|
'token' => $share->getToken(),
|
||||||
|
'itemTarget' => $share->getTarget(),
|
||||||
|
'shareWith' => $share->getSharedWith(),
|
||||||
|
'run' => &$run,
|
||||||
|
'error' => &$error,
|
||||||
|
];
|
||||||
|
\OC_Hook::emit('OCP\Share', 'pre_shared', $preHookData);
|
||||||
|
|
||||||
|
if ($run === false) {
|
||||||
|
$e->setArgument('error', $error);
|
||||||
|
$e->stopPropagation();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function postShare(GenericEvent $e) {
|
||||||
|
/** @var IShare $share */
|
||||||
|
$share = $e->getSubject();
|
||||||
|
|
||||||
|
$postHookData = [
|
||||||
|
'itemType' => $share->getNode() instanceof File ? 'file' : 'folder',
|
||||||
|
'itemSource' => $share->getNode()->getId(),
|
||||||
|
'shareType' => $share->getShareType(),
|
||||||
|
'uidOwner' => $share->getSharedBy(),
|
||||||
|
'permissions' => $share->getPermissions(),
|
||||||
|
'fileSource' => $share->getNode()->getId(),
|
||||||
|
'expiration' => $share->getExpirationDate(),
|
||||||
|
'token' => $share->getToken(),
|
||||||
|
'id' => $share->getId(),
|
||||||
|
'shareWith' => $share->getSharedWith(),
|
||||||
|
'itemTarget' => $share->getTarget(),
|
||||||
|
'fileTarget' => $share->getTarget(),
|
||||||
|
];
|
||||||
|
|
||||||
|
\OC_Hook::emit('OCP\Share', 'post_shared', $postHookData);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -636,27 +636,11 @@ class Manager implements IManager {
|
||||||
$target = \OC\Files\Filesystem::normalizePath($target);
|
$target = \OC\Files\Filesystem::normalizePath($target);
|
||||||
$share->setTarget($target);
|
$share->setTarget($target);
|
||||||
|
|
||||||
// Pre share hook
|
// Pre share event
|
||||||
$run = true;
|
$event = new GenericEvent($share);
|
||||||
$error = '';
|
$a = $this->eventDispatcher->dispatch('OCP\Share::preShare', $event);
|
||||||
$preHookData = [
|
if ($event->isPropagationStopped() && $event->hasArgument('error')) {
|
||||||
'itemType' => $share->getNode() instanceof \OCP\Files\File ? 'file' : 'folder',
|
throw new \Exception($event->getArgument('error'));
|
||||||
'itemSource' => $share->getNode()->getId(),
|
|
||||||
'shareType' => $share->getShareType(),
|
|
||||||
'uidOwner' => $share->getSharedBy(),
|
|
||||||
'permissions' => $share->getPermissions(),
|
|
||||||
'fileSource' => $share->getNode()->getId(),
|
|
||||||
'expiration' => $share->getExpirationDate(),
|
|
||||||
'token' => $share->getToken(),
|
|
||||||
'itemTarget' => $share->getTarget(),
|
|
||||||
'shareWith' => $share->getSharedWith(),
|
|
||||||
'run' => &$run,
|
|
||||||
'error' => &$error,
|
|
||||||
];
|
|
||||||
\OC_Hook::emit('OCP\Share', 'pre_shared', $preHookData);
|
|
||||||
|
|
||||||
if ($run === false) {
|
|
||||||
throw new \Exception($error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$oldShare = $share;
|
$oldShare = $share;
|
||||||
|
@ -665,23 +649,9 @@ class Manager implements IManager {
|
||||||
//reuse the node we already have
|
//reuse the node we already have
|
||||||
$share->setNode($oldShare->getNode());
|
$share->setNode($oldShare->getNode());
|
||||||
|
|
||||||
// Post share hook
|
// Post share event
|
||||||
$postHookData = [
|
$event = new GenericEvent($share);
|
||||||
'itemType' => $share->getNode() instanceof \OCP\Files\File ? 'file' : 'folder',
|
$this->eventDispatcher->dispatch('OCP\Share::postShare', $event);
|
||||||
'itemSource' => $share->getNode()->getId(),
|
|
||||||
'shareType' => $share->getShareType(),
|
|
||||||
'uidOwner' => $share->getSharedBy(),
|
|
||||||
'permissions' => $share->getPermissions(),
|
|
||||||
'fileSource' => $share->getNode()->getId(),
|
|
||||||
'expiration' => $share->getExpirationDate(),
|
|
||||||
'token' => $share->getToken(),
|
|
||||||
'id' => $share->getId(),
|
|
||||||
'shareWith' => $share->getSharedWith(),
|
|
||||||
'itemTarget' => $share->getTarget(),
|
|
||||||
'fileTarget' => $share->getTarget(),
|
|
||||||
];
|
|
||||||
|
|
||||||
\OC_Hook::emit('OCP\Share', 'post_shared', $postHookData);
|
|
||||||
|
|
||||||
if ($share->getShareType() === \OCP\Share::SHARE_TYPE_USER) {
|
if ($share->getShareType() === \OCP\Share::SHARE_TYPE_USER) {
|
||||||
$user = $this->userManager->get($share->getSharedWith());
|
$user = $this->userManager->get($share->getSharedWith());
|
||||||
|
|
|
@ -24,6 +24,7 @@ namespace Test\Share20;
|
||||||
|
|
||||||
use OC\Share20\LegacyHooks;
|
use OC\Share20\LegacyHooks;
|
||||||
use OC\Share20\Manager;
|
use OC\Share20\Manager;
|
||||||
|
use OCP\Constants;
|
||||||
use OCP\Files\File;
|
use OCP\Files\File;
|
||||||
use Symfony\Component\EventDispatcher\EventDispatcher;
|
use Symfony\Component\EventDispatcher\EventDispatcher;
|
||||||
use Symfony\Component\EventDispatcher\GenericEvent;
|
use Symfony\Component\EventDispatcher\GenericEvent;
|
||||||
|
@ -187,4 +188,153 @@ class LegacyHooksTest extends TestCase {
|
||||||
$event = new GenericEvent($share);
|
$event = new GenericEvent($share);
|
||||||
$this->eventDispatcher->dispatch('OCP\Share::postUnshareFromSelf', $event);
|
$this->eventDispatcher->dispatch('OCP\Share::postUnshareFromSelf', $event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testPreShare() {
|
||||||
|
$path = $this->createMock(File::class);
|
||||||
|
$path->method('getId')->willReturn(1);
|
||||||
|
|
||||||
|
$date = new \DateTime();
|
||||||
|
|
||||||
|
$share = $this->manager->newShare();
|
||||||
|
$share->setShareType(\OCP\Share::SHARE_TYPE_LINK)
|
||||||
|
->setSharedWith('awesomeUser')
|
||||||
|
->setSharedBy('sharedBy')
|
||||||
|
->setNode($path)
|
||||||
|
->setTarget('myTarget')
|
||||||
|
->setPermissions(Constants::PERMISSION_ALL)
|
||||||
|
->setExpirationDate($date)
|
||||||
|
->setPassword('password')
|
||||||
|
->setToken('token');
|
||||||
|
|
||||||
|
|
||||||
|
$hookListner = $this->getMockBuilder('Dummy')->setMethods(['preShare'])->getMock();
|
||||||
|
\OCP\Util::connectHook('OCP\Share', 'pre_shared', $hookListner, 'preShare');
|
||||||
|
|
||||||
|
$run = true;
|
||||||
|
$error = '';
|
||||||
|
|
||||||
|
$expected = [
|
||||||
|
'itemType' => 'file',
|
||||||
|
'itemSource' => 1,
|
||||||
|
'shareType' => \OCP\Share::SHARE_TYPE_LINK,
|
||||||
|
'shareWith' => 'awesomeUser',
|
||||||
|
'uidOwner' => 'sharedBy',
|
||||||
|
'fileSource' => 1,
|
||||||
|
'itemTarget' => 'myTarget',
|
||||||
|
'permissions' => Constants::PERMISSION_ALL,
|
||||||
|
'expiration' => $date,
|
||||||
|
'token' => 'token',
|
||||||
|
'run' => &$run,
|
||||||
|
'error' => &$error,
|
||||||
|
];
|
||||||
|
|
||||||
|
$hookListner
|
||||||
|
->expects($this->exactly(1))
|
||||||
|
->method('preShare')
|
||||||
|
->with($expected);
|
||||||
|
|
||||||
|
$event = new GenericEvent($share);
|
||||||
|
$this->eventDispatcher->dispatch('OCP\Share::preShare', $event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPreShareError() {
|
||||||
|
$path = $this->createMock(File::class);
|
||||||
|
$path->method('getId')->willReturn(1);
|
||||||
|
|
||||||
|
$date = new \DateTime();
|
||||||
|
|
||||||
|
$share = $this->manager->newShare();
|
||||||
|
$share->setShareType(\OCP\Share::SHARE_TYPE_LINK)
|
||||||
|
->setSharedWith('awesomeUser')
|
||||||
|
->setSharedBy('sharedBy')
|
||||||
|
->setNode($path)
|
||||||
|
->setTarget('myTarget')
|
||||||
|
->setPermissions(Constants::PERMISSION_ALL)
|
||||||
|
->setExpirationDate($date)
|
||||||
|
->setPassword('password')
|
||||||
|
->setToken('token');
|
||||||
|
|
||||||
|
|
||||||
|
$hookListner = $this->getMockBuilder('Dummy')->setMethods(['preShare'])->getMock();
|
||||||
|
\OCP\Util::connectHook('OCP\Share', 'pre_shared', $hookListner, 'preShare');
|
||||||
|
|
||||||
|
$run = true;
|
||||||
|
$error = '';
|
||||||
|
|
||||||
|
$expected = [
|
||||||
|
'itemType' => 'file',
|
||||||
|
'itemSource' => 1,
|
||||||
|
'shareType' => \OCP\Share::SHARE_TYPE_LINK,
|
||||||
|
'shareWith' => 'awesomeUser',
|
||||||
|
'uidOwner' => 'sharedBy',
|
||||||
|
'fileSource' => 1,
|
||||||
|
'itemTarget' => 'myTarget',
|
||||||
|
'permissions' => Constants::PERMISSION_ALL,
|
||||||
|
'expiration' => $date,
|
||||||
|
'token' => 'token',
|
||||||
|
'run' => &$run,
|
||||||
|
'error' => &$error,
|
||||||
|
];
|
||||||
|
|
||||||
|
$hookListner
|
||||||
|
->expects($this->exactly(1))
|
||||||
|
->method('preShare')
|
||||||
|
->with($expected)
|
||||||
|
->will($this->returnCallback(function ($data) {
|
||||||
|
$data['run'] = false;
|
||||||
|
$data['error'] = 'I error';
|
||||||
|
}));
|
||||||
|
|
||||||
|
$event = new GenericEvent($share);
|
||||||
|
$this->eventDispatcher->dispatch('OCP\Share::preShare', $event);
|
||||||
|
|
||||||
|
$this->assertTrue($event->isPropagationStopped());
|
||||||
|
$this->assertSame('I error', $event->getArgument('error'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPostShare() {
|
||||||
|
$path = $this->createMock(File::class);
|
||||||
|
$path->method('getId')->willReturn(1);
|
||||||
|
|
||||||
|
$date = new \DateTime();
|
||||||
|
|
||||||
|
$share = $this->manager->newShare();
|
||||||
|
$share->setId(42)
|
||||||
|
->setShareType(\OCP\Share::SHARE_TYPE_LINK)
|
||||||
|
->setSharedWith('awesomeUser')
|
||||||
|
->setSharedBy('sharedBy')
|
||||||
|
->setNode($path)
|
||||||
|
->setTarget('myTarget')
|
||||||
|
->setPermissions(Constants::PERMISSION_ALL)
|
||||||
|
->setExpirationDate($date)
|
||||||
|
->setPassword('password')
|
||||||
|
->setToken('token');
|
||||||
|
|
||||||
|
|
||||||
|
$hookListner = $this->getMockBuilder('Dummy')->setMethods(['postShare'])->getMock();
|
||||||
|
\OCP\Util::connectHook('OCP\Share', 'post_shared', $hookListner, 'postShare');
|
||||||
|
|
||||||
|
$expected = [
|
||||||
|
'id' => 42,
|
||||||
|
'itemType' => 'file',
|
||||||
|
'itemSource' => 1,
|
||||||
|
'shareType' => \OCP\Share::SHARE_TYPE_LINK,
|
||||||
|
'shareWith' => 'awesomeUser',
|
||||||
|
'uidOwner' => 'sharedBy',
|
||||||
|
'fileSource' => 1,
|
||||||
|
'itemTarget' => 'myTarget',
|
||||||
|
'fileTarget' => 'myTarget',
|
||||||
|
'permissions' => Constants::PERMISSION_ALL,
|
||||||
|
'expiration' => $date,
|
||||||
|
'token' => 'token',
|
||||||
|
];
|
||||||
|
|
||||||
|
$hookListner
|
||||||
|
->expects($this->exactly(1))
|
||||||
|
->method('postShare')
|
||||||
|
->with($expected);
|
||||||
|
|
||||||
|
$event = new GenericEvent($share);
|
||||||
|
$this->eventDispatcher->dispatch('OCP\Share::postShare', $event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1705,46 +1705,45 @@ class ManagerTest extends \Test\TestCase {
|
||||||
return $share->setId(42);
|
return $share->setId(42);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
$hookListner = $this->getMockBuilder('Dummy')->setMethods(['pre', 'post'])->getMock();
|
// Pre share
|
||||||
\OCP\Util::connectHook('OCP\Share', 'pre_shared', $hookListner, 'pre');
|
$this->eventDispatcher->expects($this->at(0))
|
||||||
\OCP\Util::connectHook('OCP\Share', 'post_shared', $hookListner, 'post');
|
->method('dispatch')
|
||||||
|
->with(
|
||||||
|
$this->equalTo('OCP\Share::preShare'),
|
||||||
|
$this->callback(function(GenericEvent $e) use ($path, $date) {
|
||||||
|
/** @var IShare $share */
|
||||||
|
$share = $e->getSubject();
|
||||||
|
|
||||||
$hookListnerExpectsPre = [
|
return $share->getShareType() === \OCP\Share::SHARE_TYPE_LINK &&
|
||||||
'itemType' => 'file',
|
$share->getNode() === $path &&
|
||||||
'itemSource' => 1,
|
$share->getSharedBy() === 'sharedBy' &&
|
||||||
'shareType' => \OCP\Share::SHARE_TYPE_LINK,
|
$share->getPermissions() === \OCP\Constants::PERMISSION_ALL &&
|
||||||
'uidOwner' => 'sharedBy',
|
$share->getExpirationDate() === $date &&
|
||||||
'permissions' => 31,
|
$share->getPassword() === 'hashed' &&
|
||||||
'fileSource' => 1,
|
$share->getToken() === 'token';
|
||||||
'expiration' => $date,
|
})
|
||||||
'token' => 'token',
|
);
|
||||||
'run' => true,
|
|
||||||
'error' => '',
|
|
||||||
'itemTarget' => '/target',
|
|
||||||
'shareWith' => null,
|
|
||||||
];
|
|
||||||
|
|
||||||
$hookListnerExpectsPost = [
|
// Post share
|
||||||
'itemType' => 'file',
|
$this->eventDispatcher->expects($this->at(1))
|
||||||
'itemSource' => 1,
|
->method('dispatch')
|
||||||
'shareType' => \OCP\Share::SHARE_TYPE_LINK,
|
->with(
|
||||||
'uidOwner' => 'sharedBy',
|
$this->equalTo('OCP\Share::postShare'),
|
||||||
'permissions' => 31,
|
$this->callback(function(GenericEvent $e) use ($path, $date) {
|
||||||
'fileSource' => 1,
|
/** @var IShare $share */
|
||||||
'expiration' => $date,
|
$share = $e->getSubject();
|
||||||
'token' => 'token',
|
|
||||||
'id' => 42,
|
|
||||||
'itemTarget' => '/target',
|
|
||||||
'fileTarget' => '/target',
|
|
||||||
'shareWith' => null,
|
|
||||||
];
|
|
||||||
|
|
||||||
$hookListner->expects($this->once())
|
return $share->getShareType() === \OCP\Share::SHARE_TYPE_LINK &&
|
||||||
->method('pre')
|
$share->getNode() === $path &&
|
||||||
->with($this->equalTo($hookListnerExpectsPre));
|
$share->getSharedBy() === 'sharedBy' &&
|
||||||
$hookListner->expects($this->once())
|
$share->getPermissions() === \OCP\Constants::PERMISSION_ALL &&
|
||||||
->method('post')
|
$share->getExpirationDate() === $date &&
|
||||||
->with($this->equalTo($hookListnerExpectsPost));
|
$share->getPassword() === 'hashed' &&
|
||||||
|
$share->getToken() === 'token' &&
|
||||||
|
$share->getId() === '42' &&
|
||||||
|
$share->getTarget() === '/target';
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
/** @var IShare $share */
|
/** @var IShare $share */
|
||||||
$share = $manager->createShare($share);
|
$share = $manager->createShare($share);
|
||||||
|
@ -1817,46 +1816,45 @@ class ManagerTest extends \Test\TestCase {
|
||||||
return $share->setId(42);
|
return $share->setId(42);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
$hookListner = $this->getMockBuilder('Dummy')->setMethods(['pre', 'post'])->getMock();
|
// Pre share
|
||||||
\OCP\Util::connectHook('OCP\Share', 'pre_shared', $hookListner, 'pre');
|
$this->eventDispatcher->expects($this->at(0))
|
||||||
\OCP\Util::connectHook('OCP\Share', 'post_shared', $hookListner, 'post');
|
->method('dispatch')
|
||||||
|
->with(
|
||||||
|
$this->equalTo('OCP\Share::preShare'),
|
||||||
|
$this->callback(function(GenericEvent $e) use ($path) {
|
||||||
|
/** @var IShare $share */
|
||||||
|
$share = $e->getSubject();
|
||||||
|
|
||||||
$hookListnerExpectsPre = [
|
return $share->getShareType() === \OCP\Share::SHARE_TYPE_EMAIL &&
|
||||||
'itemType' => 'file',
|
$share->getNode() === $path &&
|
||||||
'itemSource' => 1,
|
$share->getSharedBy() === 'sharedBy' &&
|
||||||
'shareType' => \OCP\Share::SHARE_TYPE_EMAIL,
|
$share->getPermissions() === \OCP\Constants::PERMISSION_ALL &&
|
||||||
'uidOwner' => 'sharedBy',
|
$share->getExpirationDate() === null &&
|
||||||
'permissions' => 31,
|
$share->getPassword() === null &&
|
||||||
'fileSource' => 1,
|
$share->getToken() === 'token';
|
||||||
'expiration' => null,
|
})
|
||||||
'token' => 'token',
|
);
|
||||||
'run' => true,
|
|
||||||
'error' => '',
|
|
||||||
'itemTarget' => '/target',
|
|
||||||
'shareWith' => null,
|
|
||||||
];
|
|
||||||
|
|
||||||
$hookListnerExpectsPost = [
|
// Post share
|
||||||
'itemType' => 'file',
|
$this->eventDispatcher->expects($this->at(1))
|
||||||
'itemSource' => 1,
|
->method('dispatch')
|
||||||
'shareType' => \OCP\Share::SHARE_TYPE_EMAIL,
|
->with(
|
||||||
'uidOwner' => 'sharedBy',
|
$this->equalTo('OCP\Share::postShare'),
|
||||||
'permissions' => 31,
|
$this->callback(function(GenericEvent $e) use ($path) {
|
||||||
'fileSource' => 1,
|
/** @var IShare $share */
|
||||||
'expiration' => null,
|
$share = $e->getSubject();
|
||||||
'token' => 'token',
|
|
||||||
'id' => 42,
|
|
||||||
'itemTarget' => '/target',
|
|
||||||
'fileTarget' => '/target',
|
|
||||||
'shareWith' => null,
|
|
||||||
];
|
|
||||||
|
|
||||||
$hookListner->expects($this->once())
|
return $share->getShareType() === \OCP\Share::SHARE_TYPE_EMAIL &&
|
||||||
->method('pre')
|
$share->getNode() === $path &&
|
||||||
->with($this->equalTo($hookListnerExpectsPre));
|
$share->getSharedBy() === 'sharedBy' &&
|
||||||
$hookListner->expects($this->once())
|
$share->getPermissions() === \OCP\Constants::PERMISSION_ALL &&
|
||||||
->method('post')
|
$share->getExpirationDate() === null &&
|
||||||
->with($this->equalTo($hookListnerExpectsPost));
|
$share->getPassword() === null &&
|
||||||
|
$share->getToken() === 'token' &&
|
||||||
|
$share->getId() === '42' &&
|
||||||
|
$share->getTarget() === '/target';
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
/** @var IShare $share */
|
/** @var IShare $share */
|
||||||
$share = $manager->createShare($share);
|
$share = $manager->createShare($share);
|
||||||
|
@ -1919,14 +1917,17 @@ class ManagerTest extends \Test\TestCase {
|
||||||
->method('setTarget')
|
->method('setTarget')
|
||||||
->with('/target');
|
->with('/target');
|
||||||
|
|
||||||
$hookListner = $this->getMockBuilder('Dummy')->setMethods(['pre'])->getMock();
|
// Pre share
|
||||||
\OCP\Util::connectHook('OCP\Share', 'pre_shared', $hookListner, 'pre');
|
$this->eventDispatcher->expects($this->once())
|
||||||
$hookListner->expects($this->once())
|
->method('dispatch')
|
||||||
->method('pre')
|
->with(
|
||||||
->will($this->returnCallback(function (array $data) {
|
$this->equalTo('OCP\Share::preShare'),
|
||||||
$data['run'] = false;
|
$this->isInstanceOf(GenericEvent::class)
|
||||||
$data['error'] = 'I won\'t let you share!';
|
)->will($this->returnCallback(function($name, GenericEvent $e) {
|
||||||
}));
|
$e->setArgument('error', 'I won\'t let you share!');
|
||||||
|
$e->stopPropagation();
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
$manager->createShare($share);
|
$manager->createShare($share);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue