Merge pull request #48703 from nextcloud/backport/48673/stable30

[stable30] fix(share): Return empty string if no label is set
This commit is contained in:
Ferdinand Thiessen 2024-10-17 18:25:16 +02:00 committed by GitHub
commit 761f7e1f70
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 38 additions and 5 deletions

View file

@ -29,7 +29,7 @@ namespace OCA\Files_Sharing;
* item_size: float|int,
* item_source: int,
* item_type: 'file'|'folder',
* label: ?string,
* label: string,
* mail_send: 0|1,
* mimetype: string,
* mount-type: string,

View file

@ -583,8 +583,7 @@
]
},
"label": {
"type": "string",
"nullable": true
"type": "string"
},
"mail_send": {
"type": "integer",

View file

@ -988,7 +988,7 @@ class DefaultShareProvider implements IShareProviderWithNotification, IShareProv
$qb->expr()->eq('item_type', $qb->createNamedParameter('file')),
$qb->expr()->eq('item_type', $qb->createNamedParameter('folder'))
))
->execute();
->executeQuery();
$data = $cursor->fetch();
@ -1021,7 +1021,7 @@ class DefaultShareProvider implements IShareProviderWithNotification, IShareProv
->setNote((string)$data['note'])
->setMailSend((bool)$data['mail_send'])
->setStatus((int)$data['accepted'])
->setLabel($data['label']);
->setLabel($data['label'] ?? '');
$shareTime = new \DateTime();
$shareTime->setTimestamp((int)$data['stime']);

View file

@ -884,6 +884,7 @@ class DefaultShareProviderTest extends \Test\TestCase {
'file_target' => $qb->expr()->literal('myTarget'),
'permissions' => $qb->expr()->literal(13),
'token' => $qb->expr()->literal('secrettoken'),
'label' => $qb->expr()->literal('the label'),
]);
$qb->execute();
$id = $qb->getLastInsertId();
@ -899,10 +900,43 @@ class DefaultShareProviderTest extends \Test\TestCase {
$this->assertSame('sharedBy', $share->getSharedBy());
$this->assertSame('secrettoken', $share->getToken());
$this->assertSame('password', $share->getPassword());
$this->assertSame('the label', $share->getLabel());
$this->assertSame(true, $share->getSendPasswordByTalk());
$this->assertSame(null, $share->getSharedWith());
}
/**
* Assert that if no label is provided the label is correctly,
* as types on IShare, a string and not null
*/
public function testGetShareByTokenNullLabel(): void {
$qb = $this->dbConn->getQueryBuilder();
$qb->insert('share')
->values([
'share_type' => $qb->expr()->literal(IShare::TYPE_LINK),
'password' => $qb->expr()->literal('password'),
'password_by_talk' => $qb->expr()->literal(true),
'uid_owner' => $qb->expr()->literal('shareOwner'),
'uid_initiator' => $qb->expr()->literal('sharedBy'),
'item_type' => $qb->expr()->literal('file'),
'file_source' => $qb->expr()->literal(42),
'file_target' => $qb->expr()->literal('myTarget'),
'permissions' => $qb->expr()->literal(13),
'token' => $qb->expr()->literal('secrettoken'),
]);
$qb->executeStatement();
$id = $qb->getLastInsertId();
$file = $this->createMock(File::class);
$this->rootFolder->method('getUserFolder')->with('shareOwner')->willReturnSelf();
$this->rootFolder->method('getFirstNodeById')->with(42)->willReturn($file);
$share = $this->provider->getShareByToken('secrettoken');
$this->assertEquals($id, $share->getId());
$this->assertSame('', $share->getLabel());
}
public function testGetShareByTokenNotFound() {
$this->expectException(\OCP\Share\Exceptions\ShareNotFound::class);