Merge pull request #18805 from nextcloud/bugfix/direct-edit-create

Check if file already exists during file creation
This commit is contained in:
Roeland Jago Douma 2020-01-14 08:34:39 +01:00 committed by GitHub
commit e7b308cf0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 7 deletions

View File

@ -124,6 +124,10 @@ class Manager implements IManager {
public function create(string $path, string $editorId, string $creatorId, $templateId = null): string { public function create(string $path, string $editorId, string $creatorId, $templateId = null): string {
$userFolder = $this->rootFolder->getUserFolder($this->userId); $userFolder = $this->rootFolder->getUserFolder($this->userId);
try {
$file = $userFolder->get($path);
throw new \RuntimeException('File already exists');
} catch (\OCP\Files\NotFoundException $e) {
$file = $userFolder->newFile($path); $file = $userFolder->newFile($path);
$editor = $this->getEditor($editorId); $editor = $this->getEditor($editorId);
$creators = $editor->getCreators(); $creators = $editor->getCreators();
@ -133,6 +137,8 @@ class Manager implements IManager {
return $this->createToken($editorId, $file, $path); return $this->createToken($editorId, $file, $path);
} }
} }
}
throw new \RuntimeException('No creator found'); throw new \RuntimeException('No creator found');
} }

View File

@ -12,6 +12,7 @@ use OCP\DirectEditing\IEditor;
use OCP\DirectEditing\IToken; use OCP\DirectEditing\IToken;
use OCP\Files\Folder; use OCP\Files\Folder;
use OCP\Files\IRootFolder; use OCP\Files\IRootFolder;
use OCP\Files\NotFoundException;
use OCP\IDBConnection; use OCP\IDBConnection;
use OCP\IL10N; use OCP\IL10N;
use OCP\IUserSession; use OCP\IUserSession;
@ -151,6 +152,10 @@ class ManagerTest extends TestCase {
$this->random->expects($this->once()) $this->random->expects($this->once())
->method('generate') ->method('generate')
->willReturn($expectedToken); ->willReturn($expectedToken);
$this->userFolder
->method('get')
->with('/File.txt')
->willThrowException(new NotFoundException());
$this->userFolder->expects($this->once()) $this->userFolder->expects($this->once())
->method('newFile') ->method('newFile')
->willReturn($file); ->willReturn($file);
@ -167,6 +172,10 @@ class ManagerTest extends TestCase {
$this->random->expects($this->once()) $this->random->expects($this->once())
->method('generate') ->method('generate')
->willReturn($expectedToken); ->willReturn($expectedToken);
$this->userFolder
->method('get')
->with('/File.txt')
->willThrowException(new NotFoundException());
$this->userFolder->expects($this->once()) $this->userFolder->expects($this->once())
->method('newFile') ->method('newFile')
->willReturn($file); ->willReturn($file);
@ -177,4 +186,10 @@ class ManagerTest extends TestCase {
$this->assertInstanceOf(NotFoundResponse::class, $secondResult); $this->assertInstanceOf(NotFoundResponse::class, $secondResult);
} }
public function testCreateFileAlreadyExists() {
$this->expectException(\RuntimeException::class);
$this->manager->create('/File.txt', 'testeditor', 'createEmpty');
}
} }