Skip to content

Commit fc0c629

Browse files
test: Add unit tests for nodeId validation support
Add comprehensive test coverage for: - ValidateHelper nodeId validation (success, invalid nodeId, missing user) - FileService nodeId-based node retrieval - Precedence of fileId over nodeId when both are provided These tests ensure the new nodeId functionality works correctly while maintaining backward compatibility with existing fileId behavior. Signed-off-by: Vitor Mattos <[email protected]>
1 parent 3ae5ece commit fc0c629

3 files changed

Lines changed: 114 additions & 1 deletion

File tree

lib/Helper/ValidateHelper.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public function validateFile(array $data, int $type = self::TYPE_TO_SIGN, ?IUser
130130
throw new LibresignException($this->l10n->t('File type: %s. Invalid fileID.', [$this->getTypeOfFile($type)]));
131131
}
132132
if (!is_a($user, IUser::class)) {
133-
if (!is_a($data['userManager'], IUser::class)) {
133+
if (!isset($data['userManager']) || !is_a($data['userManager'], IUser::class)) {
134134
throw new LibresignException($this->l10n->t('User not found.'));
135135
}
136136
}

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)