]> source.dussan.org Git - nextcloud-server.git/commitdiff
add tests for the share-by-mail provider
authorBjoern Schiessle <bjoern@schiessle.org>
Mon, 31 Oct 2016 13:19:34 +0000 (14:19 +0100)
committerBjoern Schiessle <bjoern@schiessle.org>
Tue, 1 Nov 2016 18:54:41 +0000 (19:54 +0100)
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
apps/sharebymail/lib/ShareByMailProvider.php
apps/sharebymail/tests/ShareByMailProviderTest.php [new file with mode: 0644]

index 46697910bbc9272656c3fb47d75a2a69b2f3dc88..6be46f747e63b3cb23cf83cc69242aa3701c5e9f 100644 (file)
@@ -142,7 +142,7 @@ class ShareByMailProvider implements IShareProvider {
         * @return int
         * @throws \Exception
         */
-       private function createMailShare(IShare $share) {
+       protected function createMailShare(IShare $share) {
                $share->setToken($this->generateToken());
                $shareId = $this->addShareToDB(
                        $share->getNodeId(),
@@ -176,7 +176,7 @@ class ShareByMailProvider implements IShareProvider {
 
        }
 
-       private function sendMailNotification($filename, $link, $owner, $initiator, $shareWith) {
+       protected function sendMailNotification($filename, $link, $owner, $initiator, $shareWith) {
                if ($owner === $initiator) {
                        $subject = (string)$this->l->t('%s shared »%s« with you', array($owner, $filename));
                } else {
@@ -227,7 +227,7 @@ class ShareByMailProvider implements IShareProvider {
         *
         * @return string
         */
-       public function generateToken() {
+       protected function generateToken() {
                $token = $this->secureRandom->generate(
                        15, ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_UPPER . ISecureRandom::CHAR_DIGITS);
                return $token;
@@ -270,7 +270,7 @@ class ShareByMailProvider implements IShareProvider {
         * @param string $token
         * @return int
         */
-       private function addShareToDB($itemSource, $itemType, $shareWith, $sharedBy, $uidOwner, $permissions, $token) {
+       protected function addShareToDB($itemSource, $itemType, $shareWith, $sharedBy, $uidOwner, $permissions, $token) {
                $qb = $this->dbConnection->getQueryBuilder();
                $qb->insert('share')
                        ->setValue('share_type', $qb->createNamedParameter(\OCP\Share::SHARE_TYPE_EMAIL))
@@ -528,7 +528,7 @@ class ShareByMailProvider implements IShareProvider {
         *
         * @param string $shareId
         */
-       private function removeShareFromTable($shareId) {
+       protected function removeShareFromTable($shareId) {
                $qb = $this->dbConnection->getQueryBuilder();
                $qb->delete('share')
                        ->where($qb->expr()->eq('id', $qb->createNamedParameter($shareId)));
@@ -543,7 +543,7 @@ class ShareByMailProvider implements IShareProvider {
         * @throws InvalidShare
         * @throws ShareNotFound
         */
-       private function createShareObject($data) {
+       protected function createShareObject($data) {
 
                $share = new Share($this->rootFolder, $this->userManager);
                $share->setId((int)$data['id'])
@@ -613,7 +613,7 @@ class ShareByMailProvider implements IShareProvider {
                $qb = $this->dbConnection->getQueryBuilder();
 
                $qb->delete('share')
-                       ->where($qb->expr()->eq('share_type', $qb->createNamedParameter(Share::SHARE_TYPE_REMOTE)))
+                       ->where($qb->expr()->eq('share_type', $qb->createNamedParameter(\OCP\Share::SHARE_TYPE_EMAIL)))
                        ->andWhere($qb->expr()->eq('uid_owner', $qb->createNamedParameter($uid)))
                        ->execute();
        }
@@ -644,7 +644,7 @@ class ShareByMailProvider implements IShareProvider {
         * @return array
         * @throws ShareNotFound
         */
-       private function getRawShare($id) {
+       protected function getRawShare($id) {
 
                // Now fetch the inserted share and create a complete share object
                $qb = $this->dbConnection->getQueryBuilder();
diff --git a/apps/sharebymail/tests/ShareByMailProviderTest.php b/apps/sharebymail/tests/ShareByMailProviderTest.php
new file mode 100644 (file)
index 0000000..7ed348d
--- /dev/null
@@ -0,0 +1,614 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCA\ShareByMail\Tests;
+
+
+use OC\HintException;
+use OCA\ShareByMail\ShareByMailProvider;
+use OCP\Files\IRootFolder;
+use OCP\IDBConnection;
+use OCP\IL10N;
+use OCP\ILogger;
+use OCP\IURLGenerator;
+use OCP\IUserManager;
+use OCP\Mail\IMailer;
+use OCP\Security\ISecureRandom;
+use OCP\Share\Exceptions\ShareNotFound;
+use OCP\Share\IManager;
+use OCP\Share\IShare;
+use Test\TestCase;
+
+/**
+ * Class ShareByMailProviderTest
+ *
+ * @package OCA\ShareByMail\Tests
+ * @group DB
+ */
+class ShareByMailProviderTest extends TestCase {
+
+       /** @var  IDBConnection */
+       private $connection;
+
+       /** @var  IManager */
+       private $shareManager;
+
+       /** @var  IL10N | \PHPUnit_Framework_MockObject_MockObject */
+       private $l;
+
+       /** @var  ILogger | \PHPUnit_Framework_MockObject_MockObject */
+       private $logger;
+
+       /** @var  IRootFolder | \PHPUnit_Framework_MockObject_MockObject */
+       private $rootFolder;
+
+       /** @var  IUserManager | \PHPUnit_Framework_MockObject_MockObject */
+       private $userManager;
+
+       /** @var  ISecureRandom | \PHPUnit_Framework_MockObject_MockObject */
+       private $secureRandom;
+
+       /** @var  IMailer | \PHPUnit_Framework_MockObject_MockObject */
+       private $mailer;
+
+       /** @var  IURLGenerator | \PHPUnit_Framework_MockObject_MockObject */
+       private $urlGenerator;
+
+       /** @var  IShare | \PHPUnit_Framework_MockObject_MockObject */
+       private $share;
+
+       public function setUp() {
+               parent::setUp();
+
+               $this->shareManager = \OC::$server->getShareManager();
+               $this->connection = \OC::$server->getDatabaseConnection();
+
+               $this->l = $this->getMockBuilder('OCP\IL10N')->getMock();
+               $this->l->method('t')
+                       ->will($this->returnCallback(function($text, $parameters = []) {
+                               return vsprintf($text, $parameters);
+                       }));
+               $this->logger = $this->getMockBuilder('OCP\ILogger')->getMock();
+               $this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder')->getMock();
+               $this->userManager = $this->getMockBuilder('OCP\IUserManager')->getMock();
+               $this->secureRandom = $this->getMockBuilder('\OCP\Security\ISecureRandom')->getMock();
+               $this->mailer = $this->getMockBuilder('\OCP\Mail\IMailer')->getMock();
+               $this->urlGenerator = $this->getMockBuilder('\OCP\IUrlGenerator')->getMock();
+               $this->share = $this->getMockBuilder('\OCP\Share\IShare')->getMock();
+
+               $this->userManager->expects($this->any())->method('userExists')->willReturn(true);
+       }
+
+       /**
+        * get instance of Mocked ShareByMailProvider
+        *
+        * @param array $mockedMethods internal methods which should be mocked
+        * @return \PHPUnit_Framework_MockObject_MockObject | ShareByMailProvider
+        */
+       private function getInstance(array $mockedMethods = []) {
+
+               $instance = $this->getMockBuilder('OCA\ShareByMail\ShareByMailProvider')
+                       ->setConstructorArgs(
+                               [
+                                       $this->connection,
+                                       $this->secureRandom,
+                                       $this->userManager,
+                                       $this->rootFolder,
+                                       $this->l,
+                                       $this->logger,
+                                       $this->mailer,
+                                       $this->urlGenerator
+                               ]
+                       );
+
+               if (!empty($mockedMethods)) {
+                       $instance->setMethods($mockedMethods);
+                       return $instance->getMock();
+               }
+
+               return new ShareByMailProvider(
+                       $this->connection,
+                       $this->secureRandom,
+                       $this->userManager,
+                       $this->rootFolder,
+                       $this->l,
+                       $this->logger,
+                       $this->mailer,
+                       $this->urlGenerator
+               );
+
+       }
+
+       public function tearDown() {
+               $this->connection->getQueryBuilder()->delete('share')->execute();
+
+               return parent::tearDown();
+       }
+
+       public function testCreate() {
+               $share = $this->getMockBuilder('\OCP\Share\IShare')->getMock();
+               $share->expects($this->once())->method('getSharedWith')->willReturn('user1');
+
+               $instance = $this->getInstance(['getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject']);
+
+               $instance->expects($this->once())->method('getSharedWith')->willReturn([]);
+               $instance->expects($this->once())->method('createMailShare')->with($share)->willReturn(42);
+               $instance->expects($this->once())->method('getRawShare')->with(42)->willReturn('rawShare');
+               $instance->expects($this->once())->method('createShareObject')->with('rawShare')->willReturn('shareObject');
+
+               $this->assertSame('shareObject',
+                       $instance->create($share)
+               );
+       }
+
+       /**
+        * @expectedException \Exception
+        */
+       public function testCreateFailed() {
+               $this->share->expects($this->once())->method('getSharedWith')->willReturn('user1');
+               $node = $this->getMockBuilder('OCP\Files\Node')->getMock();
+               $node->expects($this->any())->method('getName')->willReturn('fileName');
+               $this->share->expects($this->any())->method('getNode')->willReturn($node);
+
+               $instance = $this->getInstance(['getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject']);
+
+               $instance->expects($this->once())->method('getSharedWith')->willReturn(['found']);
+               $instance->expects($this->never())->method('createMailShare');
+               $instance->expects($this->never())->method('getRawShare');
+               $instance->expects($this->never())->method('createShareObject');
+
+               $this->assertSame('shareObject',
+                       $instance->create($this->share)
+               );
+       }
+
+       public function testCreateMailShare() {
+               $this->share->expects($this->any())->method('getToken')->willReturn('token');
+               $this->share->expects($this->once())->method('setToken')->with('token');
+               $node = $this->getMockBuilder('OCP\Files\Node')->getMock();
+               $node->expects($this->any())->method('getName')->willReturn('fileName');
+               $this->share->expects($this->any())->method('getNode')->willReturn($node);
+
+               $instance = $this->getInstance(['generateToken', 'addShareToDB', 'sendMailNotification']);
+
+               $instance->expects($this->once())->method('generateToken')->willReturn('token');
+               $instance->expects($this->once())->method('addShareToDB')->willReturn(42);
+               $instance->expects($this->once())->method('sendMailNotification');
+               $this->urlGenerator->expects($this->once())->method('linkToRouteAbsolute')
+                       ->with('files_sharing.sharecontroller.showShare', ['token' => 'token']);
+               $instance->expects($this->once())->method('sendMailNotification');
+
+               $this->assertSame(42,
+                       $this->invokePrivate($instance, 'createMailShare', [$this->share])
+               );
+
+       }
+
+       /**
+        * @expectedException \OC\HintException
+        */
+       public function testCreateMailShareFailed() {
+               $this->share->expects($this->any())->method('getToken')->willReturn('token');
+               $this->share->expects($this->once())->method('setToken')->with('token');
+               $node = $this->getMockBuilder('OCP\Files\Node')->getMock();
+               $node->expects($this->any())->method('getName')->willReturn('fileName');
+               $this->share->expects($this->any())->method('getNode')->willReturn($node);
+
+               $instance = $this->getInstance(['generateToken', 'addShareToDB', 'sendMailNotification']);
+
+               $instance->expects($this->once())->method('generateToken')->willReturn('token');
+               $instance->expects($this->once())->method('addShareToDB')->willReturn(42);
+               $instance->expects($this->once())->method('sendMailNotification');
+               $this->urlGenerator->expects($this->once())->method('linkToRouteAbsolute')
+                       ->with('files_sharing.sharecontroller.showShare', ['token' => 'token']);
+               $instance->expects($this->once())->method('sendMailNotification')
+                       ->willReturnCallback(
+                               function() {
+                                       throw new \Exception('should be converted to a hint exception');
+                               }
+                       );
+
+               $this->assertSame(42,
+                       $this->invokePrivate($instance, 'createMailShare', [$this->share])
+               );
+
+       }
+
+       public function testGenerateToken() {
+               $instance = $this->getInstance();
+
+               $this->secureRandom->expects($this->once())->method('generate')->willReturn('token');
+
+               $this->assertSame('token',
+                       $this->invokePrivate($instance, 'generateToken')
+               );
+       }
+
+       public function testAddShareToDB() {
+               $itemSource = 11;
+               $itemType = 'file';
+               $shareWith = 'user@server.com';
+               $sharedBy = 'user1';
+               $uidOwner = 'user2';
+               $permissions = 1;
+               $token = 'token';
+
+
+               $instance = $this->getInstance();
+               $id = $this->invokePrivate(
+                       $instance,
+                       'addShareToDB',
+                       [
+                               $itemSource,
+                               $itemType,
+                               $shareWith,
+                               $sharedBy,
+                               $uidOwner,
+                               $permissions,
+                               $token
+                       ]
+               );
+
+               $qb = $this->connection->getQueryBuilder();
+               $result = $qb->select('*')
+                       ->from('share')
+                       ->where($qb->expr()->eq('id', $qb->createNamedParameter($id)))
+                       ->execute()->fetchAll();
+
+               $this->assertSame(1, count($result));
+
+               $this->assertSame($itemSource, (int)$result[0]['item_source']);
+               $this->assertSame($itemType, $result[0]['item_type']);
+               $this->assertSame($shareWith, $result[0]['share_with']);
+               $this->assertSame($sharedBy, $result[0]['uid_initiator']);
+               $this->assertSame($uidOwner, $result[0]['uid_owner']);
+               $this->assertSame($permissions, (int)$result[0]['permissions']);
+               $this->assertSame($token, $result[0]['token']);
+
+       }
+
+       public function testUpdate() {
+
+               $itemSource = 11;
+               $itemType = 'file';
+               $shareWith = 'user@server.com';
+               $sharedBy = 'user1';
+               $uidOwner = 'user2';
+               $permissions = 1;
+               $token = 'token';
+
+
+               $instance = $this->getInstance();
+
+               $id = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token);
+
+               $this->share->expects($this->once())->method('getPermissions')->willReturn($permissions + 1);
+               $this->share->expects($this->once())->method('getShareOwner')->willReturn($uidOwner);
+               $this->share->expects($this->once())->method('getSharedBy')->willReturn($sharedBy);
+               $this->share->expects($this->once())->method('getId')->willReturn($id);
+
+               $this->assertSame($this->share,
+                       $instance->update($this->share)
+               );
+
+               $qb = $this->connection->getQueryBuilder();
+               $result = $qb->select('*')
+                       ->from('share')
+                       ->where($qb->expr()->eq('id', $qb->createNamedParameter($id)))
+                       ->execute()->fetchAll();
+
+               $this->assertSame(1, count($result));
+
+               $this->assertSame($itemSource, (int)$result[0]['item_source']);
+               $this->assertSame($itemType, $result[0]['item_type']);
+               $this->assertSame($shareWith, $result[0]['share_with']);
+               $this->assertSame($sharedBy, $result[0]['uid_initiator']);
+               $this->assertSame($uidOwner, $result[0]['uid_owner']);
+               $this->assertSame($permissions + 1, (int)$result[0]['permissions']);
+               $this->assertSame($token, $result[0]['token']);
+       }
+
+       public function testDelete() {
+               $instance = $this->getInstance(['removeShareFromTable']);
+               $this->share->expects($this->once())->method('getId')->willReturn(42);
+               $instance->expects($this->once())->method('removeShareFromTable')->with(42);
+               $instance->delete($this->share);
+       }
+
+       public function testGetShareById() {
+               $instance = $this->getInstance(['createShareObject']);
+
+               $itemSource = 11;
+               $itemType = 'file';
+               $shareWith = 'user@server.com';
+               $sharedBy = 'user1';
+               $uidOwner = 'user2';
+               $permissions = 1;
+               $token = 'token';
+
+               $this->createDummyShare($itemType, $itemSource, $shareWith, "user1wrong", "user2wrong", $permissions, $token);
+               $id2 = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token);
+
+               $instance->expects($this->once())->method('createShareObject')
+                       ->willReturnCallback(
+                               function ($data) use ($uidOwner, $sharedBy, $id2) {
+                                       $this->assertSame($uidOwner, $data['uid_owner']);
+                                       $this->assertSame($sharedBy, $data['uid_initiator']);
+                                       $this->assertSame($id2, (int)$data['id']);
+                                       return $this->share;
+                               }
+                       );
+
+               $result = $instance->getShareById($id2);
+
+               $this->assertInstanceOf('OCP\Share\IShare', $result);
+       }
+
+       /**
+        * @expectedException \OCP\Share\Exceptions\ShareNotFound
+        */
+       public function testGetShareByIdFailed() {
+               $instance = $this->getInstance(['createShareObject']);
+
+               $itemSource = 11;
+               $itemType = 'file';
+               $shareWith = 'user@server.com';
+               $sharedBy = 'user1';
+               $uidOwner = 'user2';
+               $permissions = 1;
+               $token = 'token';
+
+               $id = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token);
+
+               $instance->getShareById($id+1);
+       }
+
+       public function testGetShareByPath() {
+
+               $itemSource = 11;
+               $itemType = 'file';
+               $shareWith = 'user@server.com';
+               $sharedBy = 'user1';
+               $uidOwner = 'user2';
+               $permissions = 1;
+               $token = 'token';
+
+               $node = $this->getMockBuilder('OCP\Files\Node')->getMock();
+               $node->expects($this->once())->method('getId')->willReturn($itemSource);
+
+
+               $instance = $this->getInstance(['createShareObject']);
+
+               $this->createDummyShare($itemType, 111, $shareWith, $sharedBy, $uidOwner, $permissions, $token);
+               $id = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token);
+
+               $instance->expects($this->once())->method('createShareObject')
+                       ->willReturnCallback(
+                               function ($data) use ($uidOwner, $sharedBy, $id) {
+                                       $this->assertSame($uidOwner, $data['uid_owner']);
+                                       $this->assertSame($sharedBy, $data['uid_initiator']);
+                                       $this->assertSame($id, (int)$data['id']);
+                                       return $this->share;
+                               }
+                       );
+
+               $result = $instance->getSharesByPath($node);
+
+               $this->assertTrue(is_array($result));
+               $this->assertSame(1, count($result));
+               $this->assertInstanceOf('OCP\Share\IShare', $result[0]);
+       }
+
+       public function testGetShareByToken() {
+
+               $itemSource = 11;
+               $itemType = 'file';
+               $shareWith = 'user@server.com';
+               $sharedBy = 'user1';
+               $uidOwner = 'user2';
+               $permissions = 1;
+               $token = 'token';
+
+               $instance = $this->getInstance(['createShareObject']);
+
+               $idMail = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token);
+               $idPublic = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token, \OCP\Share::SHARE_TYPE_LINK);
+
+               $this->assertTrue($idMail !== $idPublic);
+
+               $instance->expects($this->once())->method('createShareObject')
+                       ->willReturnCallback(
+                               function ($data) use ($idMail) {
+                                       $this->assertSame($idMail, (int)$data['id']);
+                                       return $this->share;
+                               }
+                       );
+
+               $this->assertInstanceOf('OCP\Share\IShare',
+                       $instance->getShareByToken('token')
+               );
+       }
+
+       /**
+        * @expectedException \OCP\Share\Exceptions\ShareNotFound
+        */
+       public function testGetShareByTokenFailed() {
+
+               $itemSource = 11;
+               $itemType = 'file';
+               $shareWith = 'user@server.com';
+               $sharedBy = 'user1';
+               $uidOwner = 'user2';
+               $permissions = 1;
+               $token = 'token';
+
+               $instance = $this->getInstance(['createShareObject']);
+
+               $idMail = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token);
+               $idPublic = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, "token2", \OCP\Share::SHARE_TYPE_LINK);
+
+               $this->assertTrue($idMail !== $idPublic);
+
+               $this->assertInstanceOf('OCP\Share\IShare',
+                       $instance->getShareByToken('token2')
+               );
+       }
+
+       public function testRemoveShareFromTable() {
+               $itemSource = 11;
+               $itemType = 'file';
+               $shareWith = 'user@server.com';
+               $sharedBy = 'user1';
+               $uidOwner = 'user2';
+               $permissions = 1;
+               $token = 'token';
+
+               $instance = $this->getInstance();
+
+               $id = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token);
+
+               $query = $this->connection->getQueryBuilder();
+               $query->select('*')->from('share')
+                       ->where($query->expr()->eq('id', $query->createNamedParameter($id)));
+               $before = $query->execute()->fetchAll();
+
+               $this->assertTrue(is_array($before));
+               $this->assertSame(1, count($before));
+
+               $this->invokePrivate($instance, 'removeShareFromTable', [$id]);
+
+               $query = $this->connection->getQueryBuilder();
+               $query->select('*')->from('share')
+                       ->where($query->expr()->eq('id', $query->createNamedParameter($id)));
+               $after = $query->execute()->fetchAll();
+
+               $this->assertTrue(is_array($after));
+               $this->assertEmpty($after);
+       }
+
+       public function testUserDeleted() {
+
+               $itemSource = 11;
+               $itemType = 'file';
+               $shareWith = 'user@server.com';
+               $sharedBy = 'user1';
+               $uidOwner = 'user2';
+               $permissions = 1;
+               $token = 'token';
+
+               $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token);
+               $id = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, 'user2Wrong', $permissions, $token);
+
+               $query = $this->connection->getQueryBuilder();
+               $query->select('*')->from('share');
+               $before = $query->execute()->fetchAll();
+
+               $this->assertTrue(is_array($before));
+               $this->assertSame(2, count($before));
+
+
+               $instance = $this->getInstance();
+
+               $instance->userDeleted($uidOwner, \OCP\Share::SHARE_TYPE_EMAIL);
+
+               $query = $this->connection->getQueryBuilder();
+               $query->select('*')->from('share');
+               $after = $query->execute()->fetchAll();
+
+               $this->assertTrue(is_array($after));
+               $this->assertSame(1, count($after));
+               $this->assertSame($id, (int)$after[0]['id']);
+
+       }
+
+       public function testGetRawShare() {
+               $itemSource = 11;
+               $itemType = 'file';
+               $shareWith = 'user@server.com';
+               $sharedBy = 'user1';
+               $uidOwner = 'user2';
+               $permissions = 1;
+               $token = 'token';
+
+               $instance = $this->getInstance();
+
+               $id = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token);
+
+               $result = $this->invokePrivate($instance, 'getRawShare', [$id]);
+
+               $this->assertTrue(is_array($result));
+               $this->assertSame($itemSource, (int)$result['item_source']);
+               $this->assertSame($itemType, $result['item_type']);
+               $this->assertSame($shareWith, $result['share_with']);
+               $this->assertSame($sharedBy, $result['uid_initiator']);
+               $this->assertSame($uidOwner, $result['uid_owner']);
+               $this->assertSame($permissions, (int)$result['permissions']);
+               $this->assertSame($token, $result['token']);
+       }
+
+       /**
+        * @expectedException \OCP\Share\Exceptions\ShareNotFound
+        */
+       public function testGetRawShareFailed() {
+               $itemSource = 11;
+               $itemType = 'file';
+               $shareWith = 'user@server.com';
+               $sharedBy = 'user1';
+               $uidOwner = 'user2';
+               $permissions = 1;
+               $token = 'token';
+
+               $instance = $this->getInstance();
+
+               $id = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token);
+
+               $this->invokePrivate($instance, 'getRawShare', [$id+1]);
+       }
+
+       private function createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token, $shareType = \OCP\Share::SHARE_TYPE_EMAIL) {
+               $qb = $this->connection->getQueryBuilder();
+               $qb->insert('share')
+                       ->setValue('share_type', $qb->createNamedParameter($shareType))
+                       ->setValue('item_type', $qb->createNamedParameter($itemType))
+                       ->setValue('item_source', $qb->createNamedParameter($itemSource))
+                       ->setValue('file_source', $qb->createNamedParameter($itemSource))
+                       ->setValue('share_with', $qb->createNamedParameter($shareWith))
+                       ->setValue('uid_owner', $qb->createNamedParameter($uidOwner))
+                       ->setValue('uid_initiator', $qb->createNamedParameter($sharedBy))
+                       ->setValue('permissions', $qb->createNamedParameter($permissions))
+                       ->setValue('token', $qb->createNamedParameter($token))
+                       ->setValue('stime', $qb->createNamedParameter(time()));
+
+               /*
+                * Added to fix https://github.com/owncloud/core/issues/22215
+                * Can be removed once we get rid of ajax/share.php
+                */
+               $qb->setValue('file_target', $qb->createNamedParameter(''));
+
+               $qb->execute();
+               $id = $qb->getLastInsertId();
+
+               return (int)$id;
+       }
+
+
+}