mirror of
https://github.com/nextcloud/server.git
synced 2025-03-13 07:53:51 +00:00
fix(share): Return empty string if no label is set
* Resolves: https://github.com/nextcloud/server/issues/48629 While the database supports NULL, the typing has always said it only returns *string*. So to not break any apps that might trust the typings we should return `''` if the database is set to `NULL`. Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
This commit is contained in:
parent
bc706ac24a
commit
788233c3d7
2 changed files with 36 additions and 2 deletions
|
@ -1048,7 +1048,7 @@ class DefaultShareProvider implements IShareProvider {
|
|||
$qb->expr()->eq('item_type', $qb->createNamedParameter('file')),
|
||||
$qb->expr()->eq('item_type', $qb->createNamedParameter('folder'))
|
||||
))
|
||||
->execute();
|
||||
->executeQuery();
|
||||
|
||||
$data = $cursor->fetch();
|
||||
|
||||
|
@ -1081,7 +1081,7 @@ class DefaultShareProvider implements IShareProvider {
|
|||
->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']);
|
||||
|
|
|
@ -891,6 +891,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();
|
||||
|
@ -906,10 +907,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('getById')->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);
|
||||
|
|
Loading…
Reference in a new issue