Skip to content

Commit 1ed7129

Browse files
authored
Merge pull request #6326 from LibreSign/fix/support-nodeid-for-new-files
fix: support nodeid for new files
2 parents b58813c + 13c4a3b commit 1ed7129

4 files changed

Lines changed: 127 additions & 0 deletions

File tree

lib/Helper/ValidateHelper.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,17 @@ public function validateFile(array $data, int $type = self::TYPE_TO_SIGN, ?IUser
125125
}
126126
$this->validateIfNodeIdExists((int)$data['file']['fileId'], $data['userManager']->getUID(), $type);
127127
$this->validateMimeTypeAcceptedByNodeId((int)$data['file']['fileId'], $data['userManager']->getUID(), $type);
128+
} elseif (!empty($data['file']['nodeId'])) {
129+
if (!is_numeric($data['file']['nodeId'])) {
130+
throw new LibresignException($this->l10n->t('File type: %s. Invalid fileID.', [$this->getTypeOfFile($type)]));
131+
}
132+
if (!is_a($user, IUser::class)) {
133+
if (!isset($data['userManager']) || !is_a($data['userManager'], IUser::class)) {
134+
throw new LibresignException($this->l10n->t('User not found.'));
135+
}
136+
}
137+
$this->validateIfNodeIdExists((int)$data['file']['nodeId'], $data['userManager']->getUID(), $type);
138+
$this->validateMimeTypeAcceptedByNodeId((int)$data['file']['nodeId'], $data['userManager']->getUID(), $type);
128139
} elseif (!empty($data['file']['base64'])) {
129140
$this->validateBase64($data['file']['base64'], $type);
130141
} elseif (!empty($data['file']['path'])) {

lib/Service/FileService.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,9 @@ public function getNodeFromData(array $data): Node {
115115
if (isset($data['file']['path'])) {
116116
return $this->folderService->getFileByPath($data['file']['path']);
117117
}
118+
if (isset($data['file']['nodeId'])) {
119+
return $this->folderService->getFileByNodeId($data['file']['nodeId']);
120+
}
118121

119122
$content = $this->getFileRaw($data);
120123
$extension = $this->getExtension($content);

tests/php/Unit/Helper/ValidateHelperTest.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,47 @@ public function testValidateNewFileUsingFileIdWithSuccess():void {
135135
$this->assertNull($actual);
136136
}
137137

138+
public function testValidateNewFileUsingNodeIdWithSuccess():void {
139+
$file = $this->createMock(\OCP\Files\File::class);
140+
$file
141+
->method('getMimeType')
142+
->willReturn('application/pdf');
143+
$this->root
144+
->method('getUserFolder')
145+
->willReturn($this->root);
146+
$this->root
147+
->method('getFirstNodeById')
148+
->willReturn($file);
149+
150+
$user = $this->createMock(\OCP\IUser::class);
151+
$user->method('getUID')->willReturn('john.doe');
152+
$actual = $this->getValidateHelper()->validateNewFile([
153+
'file' => ['nodeId' => 35523],
154+
'name' => 'test',
155+
'userManager' => $user,
156+
]);
157+
$this->assertNull($actual);
158+
}
159+
160+
public function testValidateFileWithInvalidNodeId():void {
161+
$this->expectExceptionMessage('Invalid fileID');
162+
$user = $this->createMock(\OCP\IUser::class);
163+
$user->method('getUID')->willReturn('john.doe');
164+
$this->getValidateHelper()->validateFile([
165+
'file' => ['nodeId' => 'invalid'],
166+
'name' => 'test',
167+
'userManager' => $user,
168+
]);
169+
}
170+
171+
public function testValidateFileWithNodeIdWithoutUser():void {
172+
$this->expectExceptionMessage('User not found');
173+
$this->getValidateHelper()->validateFile([
174+
'file' => ['nodeId' => 35523],
175+
'name' => 'test',
176+
]);
177+
}
178+
138179
public function testValidateNotRequestedSignWhenAlreadyAskedToSignThisDocument():void {
139180
$this->signRequestMapper->method('getByNodeId')->willReturn('exists');
140181
$this->expectExceptionMessage('Already asked to sign this document');

tests/php/Unit/Service/FileServiceTest.php

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,76 @@ public function testSetFileByIdSetsFile(): void {
8888
$this->assertInstanceOf(FileService::class, $returned);
8989
$this->assertSame(1, $service->getStatus());
9090
}
91+
92+
public function testGetNodeFromDataWithNodeId(): void {
93+
$node = $this->createMock(\OCP\Files\File::class);
94+
$folderService = $this->createMock(\OCA\Libresign\Service\FolderService::class);
95+
$folderService->method('getUserId')->willReturn('testuser');
96+
$folderService->method('getFileByNodeId')->with(35523)->willReturn($node);
97+
98+
$userManager = $this->createMock(\OCP\IUser::class);
99+
$userManager->method('getUID')->willReturn('testuser');
100+
101+
$service = $this->createFileService([
102+
\OCA\Libresign\Service\FolderService::class => $folderService,
103+
]);
104+
105+
$data = [
106+
'file' => ['nodeId' => 35523],
107+
'userManager' => $userManager,
108+
];
109+
110+
$result = $service->getNodeFromData($data);
111+
$this->assertSame($node, $result);
112+
}
113+
114+
public function testGetNodeFromDataWithFileId(): void {
115+
$node = $this->createMock(\OCP\Files\File::class);
116+
$folderService = $this->createMock(\OCA\Libresign\Service\FolderService::class);
117+
$folderService->method('getUserId')->willReturn('testuser');
118+
$folderService->method('getFileByNodeId')->with(12345)->willReturn($node);
119+
120+
$userManager = $this->createMock(\OCP\IUser::class);
121+
$userManager->method('getUID')->willReturn('testuser');
122+
123+
$service = $this->createFileService([
124+
\OCA\Libresign\Service\FolderService::class => $folderService,
125+
]);
126+
127+
$data = [
128+
'file' => ['fileId' => 12345],
129+
'userManager' => $userManager,
130+
];
131+
132+
$result = $service->getNodeFromData($data);
133+
$this->assertSame($node, $result);
134+
}
135+
136+
public function testGetNodeFromDataPrefersFileIdOverNodeId(): void {
137+
$nodeFromFileId = $this->createMock(\OCP\Files\File::class);
138+
$folderService = $this->createMock(\OCA\Libresign\Service\FolderService::class);
139+
$folderService->method('getUserId')->willReturn('testuser');
140+
$folderService->expects($this->once())
141+
->method('getFileByNodeId')
142+
->with(12345)
143+
->willReturn($nodeFromFileId);
144+
145+
$userManager = $this->createMock(\OCP\IUser::class);
146+
$userManager->method('getUID')->willReturn('testuser');
147+
148+
$service = $this->createFileService([
149+
\OCA\Libresign\Service\FolderService::class => $folderService,
150+
]);
151+
152+
$data = [
153+
'file' => [
154+
'fileId' => 12345,
155+
'nodeId' => 35523, // This should be ignored
156+
],
157+
'userManager' => $userManager,
158+
];
159+
160+
$result = $service->getNodeFromData($data);
161+
$this->assertSame($nodeFromFileId, $result);
162+
}
91163
}

0 commit comments

Comments
 (0)