aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorMichiel de Jong <michiel@unhosted.org>2023-02-20 09:50:31 +0000
committerLouis Chemineau <louis@chmn.me>2023-03-08 16:46:55 +0100
commitc0e84cb512ca76cea263642918f9e045aed3c5c4 (patch)
treed1965e39eee3bc4358563a755fa43e9ac82a5ae4 /apps
parent80e12cf72608b7c5776f02f04da98d7a5968bc73 (diff)
downloadnextcloud-server-c0e84cb512ca76cea263642918f9e045aed3c5c4.tar.gz
nextcloud-server-c0e84cb512ca76cea263642918f9e045aed3c5c4.zip
Add SHARE_TYPE_SCIENCEMESH
Signed-off-by: Michiel de Jong <michiel@unhosted.org>
Diffstat (limited to 'apps')
-rw-r--r--apps/admin_audit/lib/Actions/Sharing.php25
-rw-r--r--apps/dav/lib/Connector/Sabre/SharesPlugin.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php1
-rw-r--r--apps/files/lib/Controller/ApiController.php1
-rw-r--r--apps/files/lib/Service/OwnershipTransferService.php2
-rw-r--r--apps/files_sharing/lib/Controller/DeletedShareAPIController.php30
-rw-r--r--apps/files_sharing/lib/Controller/ShareAPIController.php71
-rw-r--r--apps/files_sharing/lib/Controller/ShareesAPIController.php8
-rw-r--r--apps/files_sharing/lib/MountProvider.php1
-rw-r--r--apps/files_sharing/src/components/SharingInput.vue6
-rw-r--r--apps/files_sharing/src/index.js1
-rw-r--r--apps/files_sharing/src/share.js2
-rw-r--r--apps/files_sharing/tests/Controller/ShareAPIControllerTest.php4
-rw-r--r--apps/files_sharing/tests/MountProviderTest.php12
14 files changed, 153 insertions, 12 deletions
diff --git a/apps/admin_audit/lib/Actions/Sharing.php b/apps/admin_audit/lib/Actions/Sharing.php
index 329ed740b53..fd61d862e91 100644
--- a/apps/admin_audit/lib/Actions/Sharing.php
+++ b/apps/admin_audit/lib/Actions/Sharing.php
@@ -160,6 +160,19 @@ class Sharing extends Action {
'id',
]
);
+ } elseif ($params['shareType'] === IShare::TYPE_SCIENCEMESH) {
+ $this->log(
+ 'The %s "%s" with ID "%s" has been shared to the sciencemesh user "%s" with permissions "%s" (Share ID: %s)',
+ $params,
+ [
+ 'itemType',
+ 'path',
+ 'itemSource',
+ 'shareWith',
+ 'permissions',
+ 'id',
+ ]
+ );
}
}
@@ -276,6 +289,18 @@ class Sharing extends Action {
'id',
]
);
+ } elseif ($params['shareType'] === IShare::TYPE_SCIENCEMESH) {
+ $this->log(
+ 'The %s "%s" with ID "%s" has been unshared from the sciencemesh user "%s" (Share ID: %s)',
+ $params,
+ [
+ 'itemType',
+ 'fileTarget',
+ 'itemSource',
+ 'shareWith',
+ 'id',
+ ]
+ );
}
}
diff --git a/apps/dav/lib/Connector/Sabre/SharesPlugin.php b/apps/dav/lib/Connector/Sabre/SharesPlugin.php
index 9fa6775c3b5..3d52a44b6a6 100644
--- a/apps/dav/lib/Connector/Sabre/SharesPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/SharesPlugin.php
@@ -110,6 +110,7 @@ class SharesPlugin extends \Sabre\DAV\ServerPlugin {
IShare::TYPE_ROOM,
IShare::TYPE_CIRCLE,
IShare::TYPE_DECK,
+ IShare::TYPE_SCIENCEMESH,
];
foreach ($requestedShareTypes as $requestedShareType) {
$shares = $this->shareManager->getSharesBy(
diff --git a/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php
index abbf13d5479..e6e90838966 100644
--- a/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php
@@ -278,6 +278,7 @@ class SharesPluginTest extends \Test\TestCase {
[[IShare::TYPE_REMOTE]],
[[IShare::TYPE_ROOM]],
[[IShare::TYPE_DECK]],
+ [[IShare::TYPE_SCIENCEMESH]],
[[IShare::TYPE_USER, IShare::TYPE_GROUP]],
[[IShare::TYPE_USER, IShare::TYPE_GROUP, IShare::TYPE_LINK]],
[[IShare::TYPE_USER, IShare::TYPE_LINK]],
diff --git a/apps/files/lib/Controller/ApiController.php b/apps/files/lib/Controller/ApiController.php
index 604cf9a3c64..9baf5e97892 100644
--- a/apps/files/lib/Controller/ApiController.php
+++ b/apps/files/lib/Controller/ApiController.php
@@ -209,6 +209,7 @@ class ApiController extends Controller {
IShare::TYPE_EMAIL,
IShare::TYPE_ROOM,
IShare::TYPE_DECK,
+ IShare::TYPE_SCIENCEMESH,
];
$shareTypes = [];
diff --git a/apps/files/lib/Service/OwnershipTransferService.php b/apps/files/lib/Service/OwnershipTransferService.php
index 661a7e66e10..c744573ac99 100644
--- a/apps/files/lib/Service/OwnershipTransferService.php
+++ b/apps/files/lib/Service/OwnershipTransferService.php
@@ -286,7 +286,7 @@ class OwnershipTransferService {
$shares = [];
$progress = new ProgressBar($output);
- foreach ([IShare::TYPE_GROUP, IShare::TYPE_USER, IShare::TYPE_LINK, IShare::TYPE_REMOTE, IShare::TYPE_ROOM, IShare::TYPE_EMAIL, IShare::TYPE_CIRCLE, IShare::TYPE_DECK] as $shareType) {
+ foreach ([IShare::TYPE_GROUP, IShare::TYPE_USER, IShare::TYPE_LINK, IShare::TYPE_REMOTE, IShare::TYPE_ROOM, IShare::TYPE_EMAIL, IShare::TYPE_CIRCLE, IShare::TYPE_DECK, IShare::TYPE_SCIENCEMESH] as $shareType) {
$offset = 0;
while (true) {
$sharePage = $this->shareManager->getSharesBy($sourceUid, $shareType, null, true, 50, $offset);
diff --git a/apps/files_sharing/lib/Controller/DeletedShareAPIController.php b/apps/files_sharing/lib/Controller/DeletedShareAPIController.php
index 1d625b35322..19d1cbd0af6 100644
--- a/apps/files_sharing/lib/Controller/DeletedShareAPIController.php
+++ b/apps/files_sharing/lib/Controller/DeletedShareAPIController.php
@@ -159,6 +159,14 @@ class DeletedShareAPIController extends OCSController {
$result = array_merge($result, $this->getDeckShareHelper()->formatShare($share));
} catch (QueryException $e) {
}
+ } elseif ($share->getShareType() === IShare::TYPE_SCIENCEMESH) {
+ $result['share_with'] = $share->getSharedWith();
+ $result['share_with_displayname'] = '';
+
+ try {
+ $result = array_merge($result, $this->getSciencemeshShareHelper()->formatShare($share));
+ } catch (QueryException $e) {
+ }
}
return $result;
@@ -171,8 +179,9 @@ class DeletedShareAPIController extends OCSController {
$groupShares = $this->shareManager->getDeletedSharedWith($this->userId, IShare::TYPE_GROUP, null, -1, 0);
$roomShares = $this->shareManager->getDeletedSharedWith($this->userId, IShare::TYPE_ROOM, null, -1, 0);
$deckShares = $this->shareManager->getDeletedSharedWith($this->userId, IShare::TYPE_DECK, null, -1, 0);
+ $sciencemeshShares = $this->shareManager->getDeletedSharedWith($this->userId, IShare::TYPE_SCIENCEMESH, null, -1, 0);
- $shares = array_merge($groupShares, $roomShares, $deckShares);
+ $shares = array_merge($groupShares, $roomShares, $deckShares, $sciencemeshShares);
$shares = array_map(function (IShare $share) {
return $this->formatShare($share);
@@ -224,7 +233,7 @@ class DeletedShareAPIController extends OCSController {
}
/**
- * Returns the helper of ShareAPIHelper for deck shares.
+ * Returns the helper of DeletedShareAPIHelper for deck shares.
*
* If the Deck application is not enabled or the helper is not available
* a QueryException is thrown instead.
@@ -239,4 +248,21 @@ class DeletedShareAPIController extends OCSController {
return $this->serverContainer->get('\OCA\Deck\Sharing\ShareAPIHelper');
}
+
+ /**
+ * Returns the helper of DeletedShareAPIHelper for sciencemesh shares.
+ *
+ * If the sciencemesh application is not enabled or the helper is not available
+ * a QueryException is thrown instead.
+ *
+ * @return \OCA\Deck\Sharing\ShareAPIHelper
+ * @throws QueryException
+ */
+ private function getSciencemeshShareHelper() {
+ if (!$this->appManager->isEnabledForUser('sciencemesh')) {
+ throw new QueryException();
+ }
+
+ return $this->serverContainer->get('\OCA\ScienceMesh\Sharing\ShareAPIHelper');
+ }
}
diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php
index ab318a81fc2..48146bc6599 100644
--- a/apps/files_sharing/lib/Controller/ShareAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareAPIController.php
@@ -320,6 +320,14 @@ class ShareAPIController extends OCSController {
$result = array_merge($result, $this->getDeckShareHelper()->formatShare($share));
} catch (QueryException $e) {
}
+ } elseif ($share->getShareType() === IShare::TYPE_SCIENCEMESH) {
+ $result['share_with'] = $share->getSharedWith();
+ $result['share_with_displayname'] = '';
+
+ try {
+ $result = array_merge($result, $this->getSciencemeshShareHelper()->formatShare($share));
+ } catch (QueryException $e) {
+ }
}
@@ -692,6 +700,12 @@ class ShareAPIController extends OCSController {
} catch (QueryException $e) {
throw new OCSForbiddenException($this->l->t('Sharing %s failed because the back end does not support room shares', [$node->getPath()]));
}
+ } elseif ($shareType === IShare::TYPE_SCIENCEMESH) {
+ try {
+ $this->getSciencemeshShareHelper()->createShare($share, $shareWith, $permissions, $expireDate);
+ } catch (QueryException $e) {
+ throw new OCSForbiddenException($this->l->t('Sharing %s failed because the back end does not support sciencemesh shares', [$node->getPath()]));
+ }
} else {
throw new OCSBadRequestException($this->l->t('Unknown share type'));
}
@@ -730,8 +744,9 @@ class ShareAPIController extends OCSController {
$circleShares = $this->shareManager->getSharedWith($this->currentUser, IShare::TYPE_CIRCLE, $node, -1, 0);
$roomShares = $this->shareManager->getSharedWith($this->currentUser, IShare::TYPE_ROOM, $node, -1, 0);
$deckShares = $this->shareManager->getSharedWith($this->currentUser, IShare::TYPE_DECK, $node, -1, 0);
+ $sciencemeshShares = $this->shareManager->getSharedWith($this->currentUser, IShare::TYPE_SCIENCEMESH, $node, -1, 0);
- $shares = array_merge($userShares, $groupShares, $circleShares, $roomShares, $deckShares);
+ $shares = array_merge($userShares, $groupShares, $circleShares, $roomShares, $deckShares, $sciencemeshShares);
$filteredShares = array_filter($shares, function (IShare $share) {
return $share->getShareOwner() !== $this->currentUser;
@@ -1414,6 +1429,14 @@ class ShareAPIController extends OCSController {
}
}
+ if ($share->getShareType() === IShare::TYPE_SCIENCEMESH) {
+ try {
+ return $this->getSciencemeshShareHelper()->canAccessShare($share, $this->currentUser);
+ } catch (QueryException $e) {
+ return false;
+ }
+ }
+
return false;
}
@@ -1490,7 +1513,8 @@ class ShareAPIController extends OCSController {
protected function canDeleteShareFromSelf(\OCP\Share\IShare $share): bool {
if ($share->getShareType() !== IShare::TYPE_GROUP &&
$share->getShareType() !== IShare::TYPE_ROOM &&
- $share->getShareType() !== IShare::TYPE_DECK
+ $share->getShareType() !== IShare::TYPE_DECK &&
+ $share->getShareType() !== IShare::TYPE_SCIENCEMESH
) {
return false;
}
@@ -1527,6 +1551,14 @@ class ShareAPIController extends OCSController {
}
}
+ if ($share->getShareType() === IShare::TYPE_SCIENCEMESH) {
+ try {
+ return $this->getSciencemeshShareHelper()->canAccessShare($share, $this->currentUser);
+ } catch (QueryException $e) {
+ return false;
+ }
+ }
+
return false;
}
@@ -1606,6 +1638,15 @@ class ShareAPIController extends OCSController {
// Do nothing, just try the other share type
}
+ try {
+ if ($this->shareManager->shareProviderExists(IShare::TYPE_SCIENCEMESH)) {
+ $share = $this->shareManager->getShareById('sciencemesh:' . $id, $this->currentUser);
+ return $share;
+ }
+ } catch (ShareNotFound $e) {
+ // Do nothing, just try the other share type
+ }
+
if (!$this->shareManager->outgoingServer2ServerSharesAllowed()) {
throw new ShareNotFound();
}
@@ -1670,6 +1711,23 @@ class ShareAPIController extends OCSController {
}
/**
+ * Returns the helper of ShareAPIHelper for sciencemesh shares.
+ *
+ * If the sciencemesh application is not enabled or the helper is not available
+ * a QueryException is thrown instead.
+ *
+ * @return \OCA\Deck\Sharing\ShareAPIHelper
+ * @throws QueryException
+ */
+ private function getSciencemeshShareHelper() {
+ if (!$this->appManager->isEnabledForUser('sciencemesh')) {
+ throw new QueryException();
+ }
+
+ return $this->serverContainer->get('\OCA\ScienceMesh\Sharing\ShareAPIHelper');
+ }
+
+ /**
* @param string $viewer
* @param Node $node
* @param bool $reShares
@@ -1684,7 +1742,8 @@ class ShareAPIController extends OCSController {
IShare::TYPE_EMAIL,
IShare::TYPE_CIRCLE,
IShare::TYPE_ROOM,
- IShare::TYPE_DECK
+ IShare::TYPE_DECK,
+ IShare::TYPE_SCIENCEMESH
];
// Should we assume that the (currentUser) viewer is the owner of the node !?
@@ -1837,8 +1896,12 @@ class ShareAPIController extends OCSController {
// TALK SHARES
$roomShares = $this->shareManager->getSharesBy($this->currentUser, IShare::TYPE_ROOM, $path, $reshares, -1, 0);
+ // DECK SHARES
$deckShares = $this->shareManager->getSharesBy($this->currentUser, IShare::TYPE_DECK, $path, $reshares, -1, 0);
+ // SCIENCEMESH SHARES
+ $sciencemeshShares = $this->shareManager->getSharesBy($this->currentUser, IShare::TYPE_SCIENCEMESH, $path, $reshares, -1, 0);
+
// FEDERATION
if ($this->shareManager->outgoingServer2ServerSharesAllowed()) {
$federatedShares = $this->shareManager->getSharesBy($this->currentUser, IShare::TYPE_REMOTE, $path, $reshares, -1, 0);
@@ -1851,7 +1914,7 @@ class ShareAPIController extends OCSController {
$federatedGroupShares = [];
}
- return array_merge($userShares, $groupShares, $linkShares, $mailShares, $circleShares, $roomShares, $deckShares, $federatedShares, $federatedGroupShares);
+ return array_merge($userShares, $groupShares, $linkShares, $mailShares, $circleShares, $roomShares, $deckShares, $sciencemeshShares, $federatedShares, $federatedGroupShares);
}
diff --git a/apps/files_sharing/lib/Controller/ShareesAPIController.php b/apps/files_sharing/lib/Controller/ShareesAPIController.php
index 5a2e200c238..8daa7dc5ab9 100644
--- a/apps/files_sharing/lib/Controller/ShareesAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareesAPIController.php
@@ -186,6 +186,10 @@ class ShareesAPIController extends OCSController {
if ($this->shareManager->shareProviderExists(IShare::TYPE_ROOM)) {
$shareTypes[] = IShare::TYPE_ROOM;
}
+
+ if ($this->shareManager->shareProviderExists(IShare::TYPE_SCIENCEMESH)) {
+ $shareTypes[] = IShare::TYPE_SCIENCEMESH;
+ }
} else {
if ($this->shareManager->allowGroupSharing()) {
$shareTypes[] = IShare::TYPE_GROUP;
@@ -198,6 +202,10 @@ class ShareesAPIController extends OCSController {
$shareTypes[] = IShare::TYPE_CIRCLE;
}
+ if ($this->shareManager->shareProviderExists(IShare::TYPE_SCIENCEMESH)) {
+ $shareTypes[] = IShare::TYPE_SCIENCEMESH;
+ }
+
if ($shareType !== null && is_array($shareType)) {
$shareTypes = array_intersect($shareTypes, $shareType);
} elseif (is_numeric($shareType)) {
diff --git a/apps/files_sharing/lib/MountProvider.php b/apps/files_sharing/lib/MountProvider.php
index a9705e94906..2ad7ede8e40 100644
--- a/apps/files_sharing/lib/MountProvider.php
+++ b/apps/files_sharing/lib/MountProvider.php
@@ -97,6 +97,7 @@ class MountProvider implements IMountProvider {
$shares = array_merge($shares, $this->shareManager->getSharedWith($user->getUID(), IShare::TYPE_CIRCLE, null, -1));
$shares = array_merge($shares, $this->shareManager->getSharedWith($user->getUID(), IShare::TYPE_ROOM, null, -1));
$shares = array_merge($shares, $this->shareManager->getSharedWith($user->getUID(), IShare::TYPE_DECK, null, -1));
+ $shares = array_merge($shares, $this->shareManager->getSharedWith($user->getUID(), IShare::TYPE_SCIENCEMESH, null, -1));
// filter out excluded shares and group shares that includes self
diff --git a/apps/files_sharing/src/components/SharingInput.vue b/apps/files_sharing/src/components/SharingInput.vue
index 8dadb4689ff..de6812c9569 100644
--- a/apps/files_sharing/src/components/SharingInput.vue
+++ b/apps/files_sharing/src/components/SharingInput.vue
@@ -194,6 +194,7 @@ export default {
this.SHARE_TYPES.SHARE_TYPE_ROOM,
this.SHARE_TYPES.SHARE_TYPE_GUEST,
this.SHARE_TYPES.SHARE_TYPE_DECK,
+ this.SHARE_TYPES.SHARE_TYPE_SCIENCEMESH,
]
if (OC.getCapabilities().files_sharing.public.enabled === true) {
@@ -420,6 +421,11 @@ export default {
icon: 'icon-deck',
iconTitle: t('files_sharing', 'Deck board'),
}
+ case this.SHARE_TYPES.SHARE_TYPE_SCIENCEMESH:
+ return {
+ icon: 'icon-sciencemesh',
+ iconTitle: t('files_sharing', 'Science Mesh'),
+ }
default:
return {}
}
diff --git a/apps/files_sharing/src/index.js b/apps/files_sharing/src/index.js
index 9f80c79270e..95ed017bbf9 100644
--- a/apps/files_sharing/src/index.js
+++ b/apps/files_sharing/src/index.js
@@ -34,5 +34,6 @@ Object.assign(OC, {
SHARE_TYPE_REMOTE_GROUP: 9,
SHARE_TYPE_ROOM: 10,
SHARE_TYPE_DECK: 12,
+ SHARE_TYPE_SCIENCEMESH: 15,
},
})
diff --git a/apps/files_sharing/src/share.js b/apps/files_sharing/src/share.js
index ca4dba7c888..06eea5807a1 100644
--- a/apps/files_sharing/src/share.js
+++ b/apps/files_sharing/src/share.js
@@ -201,6 +201,8 @@ import { getCapabilities } from '@nextcloud/capabilities'
hasShares = true
} else if (shareType === ShareTypes.SHARE_TYPE_DECK) {
hasShares = true
+ } else if (shareType === ShareTypes.SHARE_TYPE_SCIENCEMESH) {
+ hasShares = true
}
})
OCA.Sharing.Util._updateFileActionIcon($tr, hasShares, hasLink)
diff --git a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php
index 6405181d0dc..2a2a7d940be 100644
--- a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php
+++ b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php
@@ -218,10 +218,10 @@ class ShareAPIControllerTest extends TestCase {
$this->expectExceptionMessage('Wrong share ID, share does not exist');
$this->shareManager
- ->expects($this->exactly(6))
+ ->expects($this->exactly(7))
->method('getShareById')
->willReturnCallback(function ($id) {
- if ($id === 'ocinternal:42' || $id === 'ocRoomShare:42' || $id === 'ocFederatedSharing:42' || $id === 'ocCircleShare:42' || $id === 'ocMailShare:42' || $id === 'deck:42') {
+ if ($id === 'ocinternal:42' || $id === 'ocRoomShare:42' || $id === 'ocFederatedSharing:42' || $id === 'ocCircleShare:42' || $id === 'ocMailShare:42' || $id === 'deck:42' || $id === 'sciencemesh:42') {
throw new \OCP\Share\Exceptions\ShareNotFound();
} else {
throw new \Exception();
diff --git a/apps/files_sharing/tests/MountProviderTest.php b/apps/files_sharing/tests/MountProviderTest.php
index 37e7e3d9d03..f7cf5156ec5 100644
--- a/apps/files_sharing/tests/MountProviderTest.php
+++ b/apps/files_sharing/tests/MountProviderTest.php
@@ -163,12 +163,13 @@ class MountProviderTest extends \Test\TestCase {
$this->makeMockShare(12, 103, 'user2', '/share7', 31),
$this->makeMockShare(13, 103, 'user2', '/share7', 31),
];
- // tests regarding circles are made in the app itself.
+ // tests regarding circles and sciencemesh are made in the apps themselves.
$circleShares = [];
+ $sciencemeshShares = [];
$this->user->expects($this->any())
->method('getUID')
->willReturn('user1');
- $this->shareManager->expects($this->exactly(5))
+ $this->shareManager->expects($this->exactly(6))
->method('getSharedWith')
->withConsecutive(
['user1', IShare::TYPE_USER],
@@ -176,12 +177,14 @@ class MountProviderTest extends \Test\TestCase {
['user1', IShare::TYPE_CIRCLE, null, -1],
['user1', IShare::TYPE_ROOM, null, -1],
['user1', IShare::TYPE_DECK, null, -1],
+ ['user1', IShare::TYPE_SCIENCEMESH, null, -1],
)->willReturnOnConsecutiveCalls(
$userShares,
$groupShares,
$circleShares,
$roomShares,
$deckShares,
+ $sciencemeshShares
);
$this->shareManager->expects($this->any())
->method('newShare')
@@ -386,7 +389,8 @@ class MountProviderTest extends \Test\TestCase {
$circleShares = [];
$roomShares = [];
$deckShares = [];
- $this->shareManager->expects($this->exactly(5))
+ $sciencemeshShares = [];
+ $this->shareManager->expects($this->exactly(6))
->method('getSharedWith')
->withConsecutive(
['user1', IShare::TYPE_USER],
@@ -394,12 +398,14 @@ class MountProviderTest extends \Test\TestCase {
['user1', IShare::TYPE_CIRCLE, null, -1],
['user1', IShare::TYPE_ROOM, null, -1],
['user1', IShare::TYPE_DECK, null, -1],
+ ['user1', IShare::TYPE_SCIENCEMESH, null, -1],
)->willReturnOnConsecutiveCalls(
$userShares,
$groupShares,
$circleShares,
$roomShares,
$deckShares,
+ $sciencemeshShares
);
$this->shareManager->expects($this->any())
->method('newShare')