Unit tests for federated share expiration date

Signed-off-by: Vincent Petry <vincent@nextcloud.com>
This commit is contained in:
Vincent Petry 2021-03-24 17:50:56 +01:00
parent b0aaafe259
commit 2650da70ca
No known key found for this signature in database
GPG Key ID: E055D6A4D513575C
3 changed files with 220 additions and 8 deletions

View File

@ -145,7 +145,17 @@ class FederatedShareProviderTest extends \Test\TestCase {
parent::tearDown();
}
public function testCreate() {
public function dataTestCreate() {
return [
[null, null],
[new \DateTime('2020-03-01T01:02:03'), '2020-03-01 01:02:03'],
];
}
/**
* @dataProvider dataTestCreate
*/
public function testCreate($expirationDate, $expectedDataDate) {
$share = $this->shareManager->newShare();
/** @var File|MockObject $node */
@ -158,6 +168,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
->setShareOwner('shareOwner')
->setPermissions(19)
->setShareType(IShare::TYPE_REMOTE)
->setExpirationDate($expirationDate)
->setNode($node);
$this->tokenHandler->method('generateToken')->willReturn('token');
@ -209,6 +220,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
'permissions' => 19,
'accepted' => 0,
'token' => 'token',
'expiration' => $expectedDataDate,
];
foreach (array_keys($expected) as $key) {
$this->assertEquals($expected[$key], $data[$key], "Assert that value for key '$key' is the same");
@ -223,6 +235,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
$this->assertEquals(42, $share->getNodeId());
$this->assertEquals(19, $share->getPermissions());
$this->assertEquals('token', $share->getToken());
$this->assertEquals($expirationDate, $share->getExpirationDate());
}
public function testCreateCouldNotFindServer() {
@ -442,10 +455,9 @@ class FederatedShareProviderTest extends \Test\TestCase {
}
/**
* @dataProvider datatTestUpdate
*
* @dataProvider dataTestUpdate
*/
public function testUpdate($owner, $sharedBy) {
public function testUpdate($owner, $sharedBy, $expirationDate) {
$this->provider = $this->getMockBuilder('OCA\FederatedFileSharing\FederatedShareProvider')
->setConstructorArgs(
[
@ -478,6 +490,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
->setShareOwner($owner)
->setPermissions(19)
->setShareType(IShare::TYPE_REMOTE)
->setExpirationDate(new \DateTime('2019-02-01T01:02:03'))
->setNode($node);
$this->tokenHandler->method('generateToken')->willReturn('token');
@ -512,17 +525,19 @@ class FederatedShareProviderTest extends \Test\TestCase {
$share = $this->provider->create($share);
$share->setPermissions(1);
$share->setExpirationDate($expirationDate);
$this->provider->update($share);
$share = $this->provider->getShareById($share->getId());
$this->assertEquals(1, $share->getPermissions());
$this->assertEquals($expirationDate, $share->getExpirationDate());
}
public function datatTestUpdate() {
public function dataTestUpdate() {
return [
['sharedBy', 'shareOwner'],
['shareOwner', 'shareOwner']
['sharedBy', 'shareOwner', new \DateTime('2020-03-01T01:02:03')],
['shareOwner', 'shareOwner', null],
];
}

View File

@ -285,4 +285,11 @@ class CapabilitiesTest extends \Test\TestCase {
$this->assertArrayHasKey('federation', $result);
$this->assertFalse($result['federation']['outgoing']);
}
public function testFederatedSharingExpirationDate() {
$result = $this->getResults([]);
$this->assertArrayHasKey('federation', $result);
$this->assertEquals(['enabled' => true], $result['federation']['expire_date']);
$this->assertEquals(['enabled' => true], $result['federation']['expire_date_supported']);
}
}

View File

@ -995,6 +995,7 @@ class ShareAPIControllerTest extends TestCase {
->setSharedBy('initiator')
->setShareOwner('currentUser')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setExpirationDate(new \DateTime('2000-01-01T01:02:03'))
->setNode($file1)
->setId(815);
@ -1009,6 +1010,7 @@ class ShareAPIControllerTest extends TestCase {
->setSharedBy('initiator')
->setShareOwner('currentUser')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setExpirationDate(new \DateTime('2000-01-02T01:02:03'))
->setNode($file1)
->setId(816);
@ -2173,6 +2175,146 @@ class ShareAPIControllerTest extends TestCase {
$ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, IShare::TYPE_LINK, null, 'false', '', null, 'a1b2d3');
}
public function testCreateShareRemote() {
$share = $this->newShare();
$this->shareManager->method('newShare')->willReturn($share);
/** @var \OCA\Files_Sharing\Controller\ShareAPIController $ocs */
$ocs = $this->getMockBuilder(ShareAPIController::class)
->setConstructorArgs([
$this->appName,
$this->request,
$this->shareManager,
$this->groupManager,
$this->userManager,
$this->rootFolder,
$this->urlGenerator,
$this->currentUser,
$this->l,
$this->config,
$this->appManager,
$this->serverContainer,
$this->userStatusManager,
$this->previewManager,
])->setMethods(['formatShare'])
->getMock();
$userFolder = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->once())
->method('getUserFolder')
->with('currentUser')
->willReturn($userFolder);
$path = $this->getMockBuilder(File::class)->getMock();
$storage = $this->createMock(Storage::class);
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
$path->method('getStorage')->willReturn($storage);
$userFolder->expects($this->once())
->method('get')
->with('valid-path')
->willReturn($path);
$this->userManager->method('userExists')->with('validUser')->willReturn(true);
$path->expects($this->once())
->method('lock')
->with(\OCP\Lock\ILockingProvider::LOCK_SHARED);
$this->shareManager->method('createShare')
->with($this->callback(function (\OCP\Share\IShare $share) use ($path) {
return $share->getNode() === $path &&
$share->getPermissions() === (
\OCP\Constants::PERMISSION_ALL &
~\OCP\Constants::PERMISSION_DELETE &
~\OCP\Constants::PERMISSION_CREATE
) &&
$share->getShareType() === IShare::TYPE_REMOTE &&
$share->getSharedWith() === 'user@example.org' &&
$share->getSharedBy() === 'currentUser';
}))
->willReturnArgument(0);
$this->shareManager->method('outgoingServer2ServerSharesAllowed')->willReturn(true);
$expected = new DataResponse([]);
$result = $ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, IShare::TYPE_REMOTE, 'user@example.org');
$this->assertInstanceOf(get_class($expected), $result);
$this->assertEquals($expected->getData(), $result->getData());
}
public function testCreateShareRemoteGroup() {
$share = $this->newShare();
$this->shareManager->method('newShare')->willReturn($share);
/** @var \OCA\Files_Sharing\Controller\ShareAPIController $ocs */
$ocs = $this->getMockBuilder(ShareAPIController::class)
->setConstructorArgs([
$this->appName,
$this->request,
$this->shareManager,
$this->groupManager,
$this->userManager,
$this->rootFolder,
$this->urlGenerator,
$this->currentUser,
$this->l,
$this->config,
$this->appManager,
$this->serverContainer,
$this->userStatusManager,
$this->previewManager,
])->setMethods(['formatShare'])
->getMock();
$userFolder = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->once())
->method('getUserFolder')
->with('currentUser')
->willReturn($userFolder);
$path = $this->getMockBuilder(File::class)->getMock();
$storage = $this->createMock(Storage::class);
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
$path->method('getStorage')->willReturn($storage);
$userFolder->expects($this->once())
->method('get')
->with('valid-path')
->willReturn($path);
$this->userManager->method('userExists')->with('validUser')->willReturn(true);
$path->expects($this->once())
->method('lock')
->with(\OCP\Lock\ILockingProvider::LOCK_SHARED);
$this->shareManager->method('createShare')
->with($this->callback(function (\OCP\Share\IShare $share) use ($path) {
return $share->getNode() === $path &&
$share->getPermissions() === (
\OCP\Constants::PERMISSION_ALL &
~\OCP\Constants::PERMISSION_DELETE &
~\OCP\Constants::PERMISSION_CREATE
) &&
$share->getShareType() === IShare::TYPE_REMOTE_GROUP &&
$share->getSharedWith() === 'group@example.org' &&
$share->getSharedBy() === 'currentUser';
}))
->willReturnArgument(0);
$this->shareManager->method('outgoingServer2ServerGroupSharesAllowed')->willReturn(true);
$expected = new DataResponse([]);
$result = $ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, IShare::TYPE_REMOTE_GROUP, 'group@example.org');
$this->assertInstanceOf(get_class($expected), $result);
$this->assertEquals($expected->getData(), $result->getData());
}
public function testCreateShareRoom() {
$ocs = $this->mockFormatShare();
@ -3841,6 +3983,7 @@ class ShareAPIControllerTest extends TestCase {
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setNode($folder)
->setShareTime(new \DateTime('2000-01-01T00:01:02'))
->setExpirationDate(new \DateTime('2001-02-03T04:05:06'))
->setTarget('myTarget')
->setNote('personal note')
->setId(42);
@ -3854,7 +3997,54 @@ class ShareAPIControllerTest extends TestCase {
'permissions' => 1,
'stime' => 946684862,
'parent' => null,
'expiration' => null,
'expiration' => '2001-02-03 00:00:00',
'token' => null,
'uid_file_owner' => 'owner',
'displayname_file_owner' => 'owner',
'note' => 'personal note',
'label' => null,
'path' => 'folder',
'item_type' => 'folder',
'storage_id' => 'storageId',
'storage' => 100,
'item_source' => 2,
'file_source' => 2,
'file_parent' => 1,
'file_target' => 'myTarget',
'share_with' => 'user@server.com',
'share_with_displayname' => 'foobar',
'mail_send' => 0,
'mimetype' => 'myFolderMimeType',
'has_preview' => false,
'hide_download' => 0,
'can_edit' => false,
'can_delete' => false,
], $share, [], false
];
$share = \OC::$server->getShareManager()->newShare();
$share->setShareType(IShare::TYPE_REMOTE_GROUP)
->setSharedBy('initiator')
->setSharedWith('user@server.com')
->setShareOwner('owner')
->setPermissions(\OCP\Constants::PERMISSION_READ)
->setNode($folder)
->setShareTime(new \DateTime('2000-01-01T00:01:02'))
->setExpirationDate(new \DateTime('2001-02-03T04:05:06'))
->setTarget('myTarget')
->setNote('personal note')
->setId(42);
$result[] = [
[
'id' => 42,
'share_type' => IShare::TYPE_REMOTE_GROUP,
'uid_owner' => 'initiator',
'displayname_owner' => 'initiator',
'permissions' => 1,
'stime' => 946684862,
'parent' => null,
'expiration' => '2001-02-03 00:00:00',
'token' => null,
'uid_file_owner' => 'owner',
'displayname_file_owner' => 'owner',