13 namespace Fossology\UI\Api\Controllers
23 $b[3] =
"root-child1";
24 $b[4] =
"root-child2";
26 $b[$a] =
"singlefolder";
35 return "$folderId-folder";
43 $folderList = array();
44 $folderList[] = [
"folder_pk" => 2,
"folder_name" =>
FolderGetName(2)];
45 $folderList[] = [
"folder_pk" => 3,
"folder_name" =>
FolderGetName(3)];
66 use Psr\Container\ContainerInterface;
67 use Slim\Psr7\Factory\StreamFactory;
68 use Slim\Psr7\Headers;
69 use Slim\Psr7\Request;
76 class FolderControllerTest
extends \PHPUnit\Framework\TestCase
98 private $folderController;
108 private $folderPlugin;
113 private $deletePlugin;
118 private $folderPropertiesPlugin;
123 private $folderContentPlugin;
129 private $assertCountBefore;
136 private $streamFactory;
140 private $folderContents;
147 protected function setUp() : void
151 $container = M::mock(
'ContainerBuilder');
152 $this->dbHelper = M::mock(DbHelper::class);
153 $this->restHelper = M::mock(RestHelper::class);
154 $this->folderDao = M::mock(FolderDao::class);
155 $this->folderPlugin = M::mock(
'folder_create');
156 $this->deletePlugin = M::mock(
'admin_folder_delete');
157 $this->folderPropertiesPlugin = M::mock(
'folder_properties');
158 $this->folderContentPlugin = M::mock(
'content_move');
159 $this->folderContents = M::mock(
'foldercontents');
160 $this->container = M::mock(ContainerInterface::class);
162 $this->restHelper->shouldReceive(
'getDbHelper')->andReturn($this->dbHelper);
163 $this->restHelper->shouldReceive(
'getFolderDao')->andReturn($this->folderDao);
164 $this->restHelper->shouldReceive(
'getUserId')->andReturn($this->userId);
165 $this->restHelper->shouldReceive(
'getPlugin')
166 ->withArgs(array(
'folder_create'))->andReturn($this->folderPlugin);
167 $this->restHelper->shouldReceive(
'getPlugin')
168 ->withArgs(array(
'admin_folder_delete'))->andReturn($this->deletePlugin);
169 $this->restHelper->shouldReceive(
'getPlugin')
170 ->withArgs(array(
'folder_properties'))
171 ->andReturn($this->folderPropertiesPlugin);
172 $this->restHelper->shouldReceive(
"getPlugin")
173 ->withArgs(array(
"foldercontents"))
174 ->andReturn($this->folderContentPlugin);
175 $this->restHelper->shouldReceive(
'getPlugin')
176 ->withArgs(array(
'content_move'))
177 ->andReturn($this->folderContentPlugin);
179 $container->shouldReceive(
'get')->withArgs(array(
180 'helper.restHelper'))->andReturn($this->restHelper);
181 $this->folderController =
new FolderController($container);
182 $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
183 $this->streamFactory =
new StreamFactory();
190 protected function tearDown() : void
192 $this->addToAssertionCount(
193 \Hamcrest\MatcherAssert::getCount() - $this->assertCountBefore);
203 public function getFolder($id)
207 case 2: $name =
"root";
break;
208 case 3: $name =
"root-child1";
break;
209 case 4: $name =
"root-child2";
break;
210 case -1:
return null;
211 default: $name =
"singlefolder";
213 return new Folder($id, $name,
"", 1);
222 public function getFolderParent($id)
225 if ($id == 3 || $id == 4) {
239 private function getResponseJson($response)
241 $response->getBody()->seek(0);
242 return json_decode($response->getBody()->getContents(),
true);
251 public function testGetAllFolders()
253 $rootFolder =
new Folder(2,
"root",
"", 2);
254 $this->folderDao->shouldReceive(
'getRootFolder')->withArgs(array(2))
255 ->andReturn($rootFolder);
256 $this->folderDao->shouldReceive(
'getFolder')
257 ->andReturnUsing([$this,
'getFolder']);
258 $this->folderDao->shouldReceive(
'getFolderParentId')
259 ->andReturnUsing([$this,
'getFolderParent']);
260 $expectedFoldersList = [];
261 for ($i = 2; $i <= 4; $i ++) {
262 $folder = $this->getFolder($i);
263 $parentId = $this->getFolderParent($i);
264 $folderModel = new \Fossology\UI\Api\Models\Folder($folder->getId(),
265 $folder->getName(), $folder->getDescription(), $parentId);
266 $expectedFoldersList[] = $folderModel->getArray();
268 $actualResponse = $this->folderController->getFolders(
null,
269 new ResponseHelper(), []);
270 $this->assertEquals(200, $actualResponse->getStatusCode());
271 $this->assertEquals($expectedFoldersList,
272 $this->getResponseJson($actualResponse));
280 public function testGetAllFoldersNotFound()
283 $rootFolder =
new Folder(2,
"root",
"", 2);
284 $this->folderDao->shouldReceive(
'getRootFolder')->withArgs(array(2))
285 ->andReturn($rootFolder);
286 $this->folderDao->shouldReceive(
'getFolder')
287 ->andReturnUsing([$this,
'getFolder']);
288 $this->folderDao->shouldReceive(
'isFolderAccessible')->withArgs([$folderId, $this->userId])->andReturn(
false);
289 $this->folderDao->shouldReceive(
'getFolderParentId')
290 ->andReturnUsing([$this,
'getFolderParent']);
291 $this->expectException(HttpForbiddenException::class);
292 $this->folderController->getFolders(
null,
293 new ResponseHelper(), [
"id"=>1]);
303 public function testGetSpecificFolders()
306 $this->folderDao->shouldReceive(
'isFolderAccessible')
307 ->withArgs(array($folderId, $this->userId))->andReturn(
true);
308 $this->folderDao->shouldReceive(
'getFolder')
309 ->andReturnUsing([$this,
'getFolder']);
310 $this->folderDao->shouldReceive(
'getFolderParentId')
311 ->andReturnUsing([$this,
'getFolderParent']);
312 $folder = $this->getFolder($folderId);
313 $parentId = $this->getFolderParent($folderId);
314 $folderModel = new \Fossology\UI\Api\Models\Folder($folder->getId(),
315 $folder->getName(), $folder->getDescription(), $parentId);
316 $expectedFoldersList = $folderModel->getArray();
317 $actualResponse = $this->folderController->getFolders(
null,
318 new ResponseHelper(), [
'id' => $folderId]);
319 $this->assertEquals(200, $actualResponse->getStatusCode());
320 $this->assertEquals($expectedFoldersList,
321 $this->getResponseJson($actualResponse));
331 public function testGetInvalidFolder()
334 $this->folderDao->shouldReceive(
'isFolderAccessible')
335 ->withArgs(array($folderId, $this->userId))->andReturn(
false);
336 $this->folderDao->shouldReceive(
'getFolder')
337 ->andReturnUsing([$this,
'getFolder']);
338 $this->expectException(HttpForbiddenException::class);
340 $this->folderController->getFolders(
null,
new ResponseHelper(),
341 [
'id' => $folderId]);
350 public function testGetInAccessibleFolder()
353 $this->folderDao->shouldReceive(
'isFolderAccessible')
354 ->withArgs(array($folderId, $this->userId))->andReturn(
false);
355 $this->folderDao->shouldReceive(
'getFolder')
356 ->andReturnUsing([$this,
'getFolder']);
357 $this->expectException(HttpForbiddenException::class);
359 $this->folderController->getFolders(
null,
new ResponseHelper(),
360 [
'id' => $folderId]);
368 public function testCreateFolderV1()
370 $this->testCreateFolder(ApiVersion::V1);
377 public function testCreateFolderV2()
379 $this->testCreateFolder();
386 private function testCreateFolder($version = ApiVersion::V2)
389 $folderName =
"root-child1";
390 $folderDescription =
"Description";
392 $this->folderDao->shouldReceive(
'isFolderAccessible')
393 ->withArgs(array($parentFolder, $this->userId))->andReturn(
true);
394 $this->folderPlugin->shouldReceive(
'create')
395 ->withArgs(array($parentFolder, $folderName, $folderDescription))
397 $this->folderDao->shouldReceive(
'getFolderId')
398 ->withArgs(array($folderName, $parentFolder))->andReturn($folderId);
399 $requestHeaders =
new Headers();
400 $body = $this->streamFactory->createStream();
401 $request =
new Request(
"POST",
new Uri(
"HTTP",
"localhost"),
402 $requestHeaders, [], [], $body);
403 if ($version == ApiVersion::V2) {
404 $request = $request->withQueryParams([
'parentFolder'=>$parentFolder,
'folderName'=>$folderName,
'folderDescription'=>$folderDescription]);
406 $request = $request->withHeader(
'parentFolder', $parentFolder)
407 ->withHeader(
'folderName', $folderName)
408 ->withHeader(
'folderDescription', $folderDescription);
410 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME, $version);
411 $response =
new ResponseHelper();
412 $actualResponse = $this->folderController->createFolder($request,
414 $expectedResponse =
new Info(201, $folderId, InfoType::INFO);
415 $this->assertEquals($expectedResponse->getCode(),
416 $actualResponse->getStatusCode());
417 $this->assertEquals($expectedResponse->getArray(),
418 $this->getResponseJson($actualResponse));
419 $this->assertEquals($expectedResponse->getArray(),$this->getResponseJson($actualResponse));
427 public function testCreateFolderInvalidBody()
429 $requestHeaders =
new Headers();
430 $body = $this->streamFactory->createStream(
"invalid_json");
431 $request =
new Request(
"POST",
new Uri(
"HTTP",
"localhost"),
432 $requestHeaders, [], [], $body);
433 $response =
new ResponseHelper();
435 $this->expectException(HttpBadRequestException::class);
437 $this->folderController->createFolder($request, $response, []);
445 public function testCreateFolderParentNotAccessibleV1()
447 $this->testCreateFolderParentNotAccessible(ApiVersion::V1);
454 public function testCreateFolderParentNotAccessibleV2()
456 $this->testCreateFolderParentNotAccessible();
463 private function testCreateFolderParentNotAccessible($version = ApiVersion::V2)
466 $folderName =
"root-child1";
467 $folderDescription =
"Description";
468 $this->folderDao->shouldReceive(
'isFolderAccessible')
469 ->withArgs(array($parentFolder, $this->userId))->andReturn(
false);
470 $requestHeaders =
new Headers();
471 $body = $this->streamFactory->createStream();
472 $request =
new Request(
"POST",
new Uri(
"HTTP",
"localhost"),
473 $requestHeaders, [], [], $body);
474 if ($version == ApiVersion::V2) {
475 $request = $request->withQueryParams([
'parentFolder'=>$parentFolder,
'folderName'=>$folderName,
'folderDescription'=>$folderDescription]);
477 $request = $request->withHeader(
'parentFolder', $parentFolder)
478 ->withHeader(
'folderName', $folderName)
479 ->withHeader(
'folderDescription', $folderDescription);
481 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME, $version);
482 $response =
new ResponseHelper();
483 $this->expectException(HttpForbiddenException::class);
484 $this->folderController->createFolder($request, $response, []);
493 public function testCreateFolderDuplicateNamesV1()
495 $this->testCreateFolderDuplicateNames(ApiVersion::V1);
503 public function testCreateFolderDuplicateNamesV2()
505 $this->testCreateFolderDuplicateNames();
511 private function testCreateFolderDuplicateNames($version = ApiVersion::V2)
514 $folderName =
"root-child1";
515 $folderDescription =
"Description";
516 $this->folderDao->shouldReceive(
'isFolderAccessible')
517 ->withArgs(array($parentFolder, $this->userId))->andReturn(
true);
518 $this->folderPlugin->shouldReceive(
'create')
519 ->withArgs(array($parentFolder, $folderName, $folderDescription))
521 $requestHeaders =
new Headers();
522 $requestHeaders->setHeader(
'parentFolder', $parentFolder);
523 $requestHeaders->setHeader(
'folderName', $folderName);
524 $requestHeaders->setHeader(
'folderDescription', $folderDescription);
525 $body = $this->streamFactory->createStream();
526 $request =
new Request(
"POST",
new Uri(
"HTTP",
"localhost"),
527 $requestHeaders, [], [], $body);
528 if ($version == ApiVersion::V2) {
529 $request = $request->withQueryParams([
'parentFolder'=>$parentFolder,
'folderName'=>$folderName,
'folderDescription'=>$folderDescription]);
531 $request = $request->withHeader(
'parentFolder', $parentFolder)
532 ->withHeader(
'folderName', $folderName)
533 ->withHeader(
'folderDescription', $folderDescription);
535 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME, $version);
536 $response =
new ResponseHelper();
537 $actualResponse = $this->folderController->createFolder($request,
539 $expectedResponse =
new Info(200,
"Folder $folderName already exists!",
541 $this->assertEquals($expectedResponse->getCode(),
542 $actualResponse->getStatusCode());
543 $this->assertEquals($expectedResponse->getArray(),
544 $this->getResponseJson($actualResponse));
552 public function testDeleteFolder()
556 $this->folderDao->shouldReceive(
'getFolder')
557 ->withArgs(array($folderId))->andReturn($this->getFolder($folderId));
558 $this->folderDao->shouldReceive(
'getRootFolder')
559 ->withArgs(array($this->userId))->andReturn($this->getFolder(2));
560 $this->deletePlugin->shouldReceive(
'Delete')
561 ->withArgs(array(
"2 $folderId", $this->userId))->andReturnNull();
562 $actualResponse = $this->folderController->deleteFolder(
null,
563 new ResponseHelper(), [
"id" => $folderId]);
564 $expectedResponse =
new Info(202,
"Folder, \"$folderName\" deleted.",
566 $this->assertEquals($expectedResponse->getCode(),
567 $actualResponse->getStatusCode());
568 $this->assertEquals($expectedResponse->getArray(),
569 $this->getResponseJson($actualResponse));
577 public function testDeleteFolderInvalidFolder()
580 $this->folderDao->shouldReceive(
'getFolder')
581 ->withArgs(array($folderId))->andReturnNull();
582 $this->expectException(HttpNotFoundException::class);
584 $this->folderController->deleteFolder(
null,
new ResponseHelper(),
585 [
"id" => $folderId]);
593 public function testDeleteFolderNoAccess()
597 $errorText =
"No access to delete this folder";
598 $this->folderDao->shouldReceive(
'getFolder')
599 ->withArgs(array($folderId))->andReturn($this->getFolder($folderId));
600 $this->folderDao->shouldReceive(
'getRootFolder')
601 ->withArgs(array($this->userId))->andReturn($this->getFolder(2));
602 $this->deletePlugin->shouldReceive(
'Delete')
603 ->withArgs(array(
"2 $folderId", $this->userId))
604 ->andReturn($errorText);
605 $this->expectException(HttpForbiddenException::class);
607 $this->folderController->deleteFolder(
null,
new ResponseHelper(),
608 [
"id" => $folderId]);
616 public function testDeleteFolderRootFolder()
619 $this->folderDao->shouldReceive(
'getFolder')
620 ->withArgs(array($folderId))->andReturn($this->getFolder($folderId));
621 $this->folderDao->shouldReceive(
'getRootFolder')
622 ->withArgs(array($this->userId))->andReturn($this->getFolder($folderId));
623 $this->deletePlugin->shouldNotReceive(
'Delete');
624 $this->expectException(HttpForbiddenException::class);
626 $this->folderController->deleteFolder(
null,
new ResponseHelper(),
627 [
"id" => $folderId]);
635 public function testEditFolderV1()
637 $this->testEditFolder(APiVersion::V1);
644 public function testEditFolderV2()
646 $this->testEditFolder();
653 private function testEditFolder($version = ApiVersion::V2)
656 $folderName =
"new name";
657 $folderDescription =
"new description";
658 $this->folderDao->shouldReceive(
'getFolder')
659 ->andReturnUsing([$this,
'getFolder']);
660 $this->folderDao->shouldReceive(
'isFolderAccessible')
661 ->withArgs(array($folderId, $this->userId))->andReturn(
true);
662 $this->folderPropertiesPlugin->shouldReceive(
'Edit')
663 ->withArgs(array($folderId, $folderName, $folderDescription));
664 $requestHeaders =
new Headers();
665 $body = $this->streamFactory->createStream();
666 $request =
new Request(
"PATCH",
new Uri(
"HTTP",
"localhost"),
667 $requestHeaders, [], [], $body);
668 if ($version == ApiVersion::V2) {
669 $request = $request->withQueryParams([
'name'=> $folderName,
'description'=>$folderDescription]);
671 $request = $request->withHeader(
'name', $folderName)
672 ->withHeader(
'description', $folderDescription);
674 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME, $version);
675 $response =
new ResponseHelper();
676 $actualResponse = $this->folderController->editFolder($request,
677 $response, [
"id" => $folderId]);
678 $expectedResponse =
new Info(200,
'Folder "' . \Fossology\UI\Api\Controllers\
FolderGetName($folderId) .
679 '" updated.', InfoType::INFO);
680 $this->assertEquals($expectedResponse->getCode(),
681 $actualResponse->getStatusCode());
682 $this->assertEquals($expectedResponse->getArray(),
683 $this->getResponseJson($actualResponse));
691 public function testEditFolderNotExistsV1()
693 $this->testEditFolderNotExists(ApiVersion::V1);
700 public function testEditFolderNotExistsV2()
702 $this->testEditFolderNotExists();
704 private function testEditFolderNotExists($version = ApiVersion::V2)
707 $folderName =
"new name";
708 $folderDescription =
"new description";
709 $this->folderDao->shouldReceive(
'getFolder')->andReturnNull();
710 $requestHeaders =
new Headers();
711 $requestHeaders->setHeader(
'name', $folderName);
712 $requestHeaders->setHeader(
'description', $folderDescription);
713 $body = $this->streamFactory->createStream();
714 $request =
new Request(
"PATCH",
new Uri(
"HTTP",
"localhost"),
715 $requestHeaders, [], [], $body);
716 if ($version == ApiVersion::V2) {
717 $request = $request->withQueryParams([
'name'=> $folderName,
'description'=>$folderDescription]);
719 $request = $request->withHeader(
'name', $folderName)
720 ->withHeader(
'description', $folderDescription);
722 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME, $version);
723 $response =
new ResponseHelper();
724 $this->expectException(HttpNotFoundException::class);
726 $this->folderController->editFolder($request, $response,
727 [
"id" => $folderId]);
734 public function testEditFolderNotAccessibleV1()
736 $this->testEditFolderNotAccessible(APIVersion::V2);
743 public function testEditFolderNotAccessibleV2()
745 $this->testEditFolderNotAccessible();
751 private function testEditFolderNotAccessible($version = ApiVersion::V2)
754 $folderName =
"new name";
755 $folderDescription =
"new description";
756 $this->folderDao->shouldReceive(
'getFolder')
757 ->andReturnUsing([$this,
'getFolder']);
758 $this->folderDao->shouldReceive(
'isFolderAccessible')
759 ->withArgs(array($folderId, $this->userId))->andReturn(
false);
760 $requestHeaders =
new Headers();
761 $requestHeaders->setHeader(
'name', $folderName);
762 $requestHeaders->setHeader(
'description', $folderDescription);
763 $body = $this->streamFactory->createStream();
764 $request =
new Request(
"PATCH",
new Uri(
"HTTP",
"localhost"),
765 $requestHeaders, [], [], $body);
766 if ($version == ApiVersion::V2) {
767 $request = $request->withQueryParams([
'name'=> $folderName,
'description'=>$folderDescription]);
769 $request = $request->withHeader(
'name', $folderName)
770 ->withHeader(
'description', $folderDescription);
772 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME, $version);
773 $response =
new ResponseHelper();
774 $this->expectException(HttpForbiddenException::class);
776 $this->folderController->editFolder($request, $response,
777 [
"id" => $folderId]);
785 public function testCopyFolderV1()
787 $this->testCopyFolder(APiVersion::V1);
794 public function testCopyFolderV2()
796 $this->testCopyFolder();
802 private function testCopyFolder($version = ApiVersion::V2)
806 $folderContentPk = 5;
810 $this->folderDao->shouldReceive(
'getFolder')
811 ->andReturnUsing([$this,
'getFolder']);
812 $this->folderDao->shouldReceive(
'isFolderAccessible')
813 ->withArgs(array(M::anyOf($folderId,
"$parentId"),
814 $this->userId))->andReturn(
true);
815 $this->folderDao->shouldReceive(
'isFolderAccessible')
816 ->withArgs([$parentId,
817 $this->userId])->andReturn(
true);
818 $this->folderDao->shouldReceive(
'getFolderContentsId')
819 ->withArgs(array($folderId, 1))->andReturn($folderContentPk);
820 $this->folderContentPlugin->shouldReceive(
'copyContent')
821 ->withArgs(array([$folderContentPk], $parentId,
true))->andReturn(
"");
823 $requestHeaders =
new Headers();
824 $body = $this->streamFactory->createStream();
825 $request =
new Request(
"PUT",
new Uri(
"HTTP",
"localhost"),
826 $requestHeaders, [], [], $body);
827 if ($version == ApiVersion::V2) {
828 $request = $request->withQueryParams([
'parent'=> $parentId,
'action'=>
"copy"]);
830 $request = $request->withHeader(
'parent', $parentId)
831 ->withHeader(
'action',
"copy");
833 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME, $version);
834 $response =
new ResponseHelper();
836 $actualResponse = $this->folderController->copyFolder($request,
837 $response, [
"id" => $folderId]);
838 $expectedResponse =
new Info(202,
839 "Folder \"$folderName\" copy(ed) under \"$parentFolderName\".",
841 $this->assertEquals($expectedResponse->getCode(),
842 $actualResponse->getStatusCode());
843 $this->assertEquals($expectedResponse->getArray(),
844 $this->getResponseJson($actualResponse));
852 public function testMoveFolderV1()
854 $this->testMoveFolder(ApiVersion::V1);
861 public function testMoveFolderV2()
863 $this->testMoveFolder();
870 private function testMoveFolder($version = ApiVersion::V2)
874 $folderContentPk = 5;
878 $this->folderDao->shouldReceive(
'getFolder')
879 ->andReturnUsing([$this,
'getFolder']);
880 $this->folderDao->shouldReceive(
'isFolderAccessible')
881 ->withArgs(array(M::anyOf($folderId,
"$parentId"),
882 $this->userId))->andReturn(
true);
883 $this->folderDao->shouldReceive(
'isFolderAccessible')
884 ->withArgs([$parentId, $this->userId])->andReturn(
true);
885 $this->folderDao->shouldReceive(
'getFolderContentsId')
886 ->withArgs(array($folderId, 1))->andReturn($folderContentPk);
887 $this->folderContentPlugin->shouldReceive(
'copyContent')
888 ->withArgs(array([$folderContentPk], $parentId,
false))->andReturn(
"");
889 $requestHeaders =
new Headers();
890 $body = $this->streamFactory->createStream();
891 $request =
new Request(
"PUT",
new Uri(
"HTTP",
"localhost"),
892 $requestHeaders, [], [], $body);
893 $response =
new ResponseHelper();
894 if ($version == ApiVersion::V2) {
895 $request = $request->withQueryParams([
'parent'=>$parentId,
'action'=>
'move']);
897 $request = $request->withHeader(
'parent', $parentId)
898 ->withHeader(
'action',
"move");
900 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,$version);
901 $actualResponse = $this->folderController->copyFolder($request,
902 $response, [
"id" => $folderId]);
903 $expectedResponse =
new Info(202,
904 "Folder \"$folderName\" move(ed) under \"$parentFolderName\".",
906 $this->assertEquals($expectedResponse->getCode(),
907 $actualResponse->getStatusCode());
908 $this->assertEquals($expectedResponse->getArray(),
909 $this->getResponseJson($actualResponse));
917 public function testCopyFolderNotFoundV1()
919 $this->testCopyFolderNotFound(APiVersion::V2);
926 public function testCopyFolderNotFoundV2()
928 $this->testCopyFolderNotFound();
930 private function testCopyFolderNotFound($version = ApiVersion::V2)
935 $this->folderDao->shouldReceive(
'getFolder')->withArgs(array($folderId))
937 $requestHeaders =
new Headers();
938 $body = $this->streamFactory->createStream();
939 $request =
new Request(
"PUT",
new Uri(
"HTTP",
"localhost"),
940 $requestHeaders, [], [], $body);
941 if ($version == ApiVersion::V2) {
942 $request = $request->withQueryParams([
'parent'=>$parentId,
'action'=>
'copy']);
944 $request = $request->withHeader(
'parent', $parentId)
945 ->withHeader(
'action',
"copy");
947 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,$version);
948 $response =
new ResponseHelper();
949 $this->expectException(HttpNotFoundException::class);
951 $this->folderController->copyFolder($request, $response,
952 [
"id" => $folderId]);
960 public function testCopyParentFolderNotFoundV1()
962 $this->testCopyParentFolderNotFound(APiVersion::V1);
969 public function testCopyParentFolderNotFoundV2()
971 $this->testCopyParentFolderNotFound();
973 private function testCopyParentFolderNotFound($version = ApiVersion::V2)
978 $this->folderDao->shouldReceive(
'getFolder')->withArgs(array($folderId))
979 ->andReturn($this->getFolder($folderId));
980 $this->folderDao->shouldReceive(
'getFolder')->withArgs(array($parentId))
982 $requestHeaders =
new Headers();
983 $requestHeaders->setHeader(
'parent', $parentId);
984 $requestHeaders->setHeader(
'action',
"copy");
985 $body = $this->streamFactory->createStream();
986 $request =
new Request(
"PUT",
new Uri(
"HTTP",
"localhost"),
987 $requestHeaders, [], [], $body);
988 if ($version == ApiVersion::V2) {
989 $request = $request->withQueryParams([
'parent'=>$parentId,
'action'=>
'copy']);
991 $request = $request->withHeader(
'parent', $parentId)
992 ->withHeader(
'action',
"copy");
994 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,$version);
995 $response =
new ResponseHelper();
996 $this->expectException(HttpNotFoundException::class);
998 $this->folderController->copyFolder($request, $response,
999 [
"id" => $folderId]);
1007 public function testCopyFolderNotAccessibleV1()
1009 $this->testCopyFolderNotAccessible(ApiVersion::V1);
1016 public function testCopyFolderNotAccessibleV2()
1018 $this->testCopyFolderNotAccessible();
1025 private function testCopyFolderNotAccessible($version = ApiVersion::V2)
1030 $this->folderDao->shouldReceive(
'getFolder')
1031 ->andReturnUsing([$this,
'getFolder']);
1032 $this->folderDao->shouldReceive(
'isFolderAccessible')
1033 ->withArgs(array($folderId, $this->userId))->andReturn(
false);
1034 $requestHeaders =
new Headers();
1035 $body = $this->streamFactory->createStream();
1036 $request =
new Request(
"PUT",
new Uri(
"HTTP",
"localhost"),
1037 $requestHeaders, [], [], $body);
1038 if ($version == ApiVersion::V2) {
1039 $request = $request->withQueryParams([
'parent'=>$parentId,
'action'=>
'copy']);
1041 $request = $request->withHeader(
'parent', $parentId)
1042 ->withHeader(
'action',
"copy");
1044 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,$version);
1045 $response =
new ResponseHelper();
1046 $this->expectException(HttpForbiddenException::class);
1048 $this->folderController->copyFolder($request, $response,
1049 [
"id" => $folderId]);
1057 public function testCopyParentFolderNotAccessibleV1()
1059 $this->testCopyParentFolderNotAccessible(ApiVersion::V1);
1066 public function testCopyParentFolderNotAccessibleV2()
1068 $this->testCopyParentFolderNotAccessible();
1070 private function testCopyParentFolderNotAccessible($version = ApiVersion::V2)
1075 $this->folderDao->shouldReceive(
'getFolder')
1076 ->andReturnUsing([$this,
'getFolder']);
1077 $this->folderDao->shouldReceive(
'isFolderAccessible')
1078 ->withArgs(array($folderId, $this->userId))->andReturn(
true);
1079 $this->folderDao->shouldReceive(
'isFolderAccessible')
1080 ->withArgs(array(
"$parentId", $this->userId))->andReturn(
false);
1081 $requestHeaders =
new Headers();
1082 $body = $this->streamFactory->createStream();
1083 $request =
new Request(
"PUT",
new Uri(
"HTTP",
"localhost"),
1084 $requestHeaders, [], [], $body);
1085 if ($version == ApiVersion::V2) {
1086 $request = $request->withQueryParams([
'parent'=>$parentId,
'action'=>
'copy']);
1088 $request = $request->withHeader(
'parent', $parentId)
1089 ->withHeader(
'action',
"copy");
1091 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,$version);
1092 $response =
new ResponseHelper();
1093 $this->expectException(HttpForbiddenException::class);
1095 $this->folderController->copyFolder($request, $response,
1096 [
"id" => $folderId]);
1104 public function testCopyFolderInvalidActionV1()
1106 $this->testCopyFolderInvalidAction(ApiVersion::V1);
1113 public function testCopyFolderInvalidActionV2()
1115 $this->testCopyFolderInvalidAction();
1123 private function testCopyFolderInvalidAction($version = ApiVersion::V2)
1128 $this->folderDao->shouldReceive(
'removeContent')->withArgs(array($contentId))->andReturn(
false);
1130 $this->folderDao->shouldReceive(
'getFolder')
1131 ->andReturnUsing([$this,
'getFolder']);
1132 $this->folderDao->shouldReceive(
'isFolderAccessible')
1133 ->withArgs(array(M::anyOf($folderId,
"$parentId"),
1134 $this->userId))->andReturn(
true);
1135 $this->folderDao->shouldReceive(
'isFolderAccessible')
1136 ->withArgs([$parentId,$this->userId])->andReturn(
true);
1137 $requestHeaders =
new Headers();
1138 $body = $this->streamFactory->createStream();
1139 $request =
new Request(
"PUT",
new Uri(
"HTTP",
"localhost"),
1140 $requestHeaders, [], [], $body);
1141 if ($version == ApiVersion::V2) {
1142 $request = $request->withQueryParams([
'parent'=>$parentId,
'action'=>
'somethingrandom']);
1144 $request = $request->withHeader(
'parent', $parentId)
1145 ->withHeader(
'action',
"somethingrandom");
1147 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,$version);
1148 $response =
new ResponseHelper();
1149 $this->expectException(HttpBadRequestException::class);
1151 $this->folderController->copyFolder($request, $response,
1152 [
"id" => $folderId]);
1161 public function testUnlinkFolderFolderNotFound()
1164 $this->dbHelper->shouldReceive(
"doesIdExist")->withArgs(array(
"foldercontents",
"foldercontents_pk", $contentId))->andReturn(
false);
1166 $requestHeaders =
new Headers();
1167 $body = $this->streamFactory->createStream();
1168 $request =
new Request(
"PUT",
new Uri(
"HTTP",
"localhost"),$requestHeaders, [],[],$body);
1169 $this->expectException(HttpNotFoundException::class);
1170 $this->folderController->unlinkFolder($request,
new ResponseHelper(),[
'contentId' => $contentId]);
1179 public function testUnlinkUnExistingFolder()
1182 $this->dbHelper->shouldReceive(
"doesIdExist")->withArgs(array(
"foldercontents",
"foldercontents_pk", $contentId))->andReturn(
false);
1184 $requestHeaders =
new Headers();
1185 $body = $this->streamFactory->createStream();
1186 $request =
new Request(
"PUT",
new Uri(
"HTTP",
"localhost"),$requestHeaders, [],[],$body);
1187 $this->expectException(HttpNotFoundException::class);
1188 $this->folderController->unlinkFolder(
null,
new ResponseHelper(),[
'contentId' => $contentId]);
1197 public function testUnlinkFolder()
1200 $parentFolderId = 2;
1201 $this->dbHelper->shouldReceive(
"doesIdExist")
1202 ->withArgs(array(
"foldercontents",
"foldercontents_pk", $contentId))
1204 $this->folderDao->shouldReceive(
'getContent')
1205 ->withArgs(array($contentId))
1206 ->andReturn([
"foldercontents_pk" => $contentId,
"parent_fk" => $parentFolderId]);
1207 $this->folderDao->shouldReceive(
'isFolderAccessible')
1208 ->withArgs(array($parentFolderId, $this->userId))->andReturn(
true);
1209 $this->folderDao->shouldReceive(
'removeContent')
1210 ->withArgs(array($contentId))->andReturn(
true);
1212 $requestHeaders =
new Headers();
1213 $body = $this->streamFactory->createStream();
1214 $request =
new Request(
"PUT",
new Uri(
"HTTP",
"localhost"),
1215 $requestHeaders, [], [], $body);
1216 $actualResponse = $this->folderController->unlinkFolder($request,
1217 new ResponseHelper(), [
'contentId' => $contentId]);
1218 $expectedResponse =
new Info(200,
"Folder unlinked successfully.",
1220 $this->assertEquals($expectedResponse->getCode(),
1221 $actualResponse->getStatusCode());
1222 $this->assertEquals($expectedResponse->getArray(),
1223 $this->getResponseJson($actualResponse));
1233 public function testUnlinkFolderNotAccessible()
1236 $parentFolderId = 3;
1237 $this->dbHelper->shouldReceive(
"doesIdExist")
1238 ->withArgs(array(
"foldercontents",
"foldercontents_pk", $contentId))
1240 $this->folderDao->shouldReceive(
'getContent')
1241 ->withArgs(array($contentId))
1242 ->andReturn([
"foldercontents_pk" => $contentId,
"parent_fk" => $parentFolderId]);
1243 $this->folderDao->shouldReceive(
'isFolderAccessible')
1244 ->withArgs(array($parentFolderId, $this->userId))->andReturn(
false);
1245 $this->folderDao->shouldNotReceive(
'removeContent');
1247 $requestHeaders =
new Headers();
1248 $body = $this->streamFactory->createStream();
1249 $request =
new Request(
"PUT",
new Uri(
"HTTP",
"localhost"),
1250 $requestHeaders, [], [], $body);
1251 $this->expectException(HttpForbiddenException::class);
1252 $this->folderController->unlinkFolder($request,
new ResponseHelper(),
1253 [
'contentId' => $contentId]);
1262 public function testUnlinkFolderNotRemovable()
1265 $parentFolderId = 2;
1266 $this->dbHelper->shouldReceive(
"doesIdExist")
1267 ->withArgs(array(
"foldercontents",
"foldercontents_pk", $contentId))
1269 $this->folderDao->shouldReceive(
'getContent')
1270 ->withArgs(array($contentId))
1271 ->andReturn([
"foldercontents_pk" => $contentId,
"parent_fk" => $parentFolderId]);
1272 $this->folderDao->shouldReceive(
'isFolderAccessible')
1273 ->withArgs(array($parentFolderId, $this->userId))->andReturn(
true);
1274 $this->folderDao->shouldReceive(
'removeContent')
1275 ->withArgs(array($contentId))->andReturn(
false);
1277 $requestHeaders =
new Headers();
1278 $body = $this->streamFactory->createStream();
1279 $request =
new Request(
"PUT",
new Uri(
"HTTP",
"localhost"),
1280 $requestHeaders, [], [], $body);
1281 $this->expectException(HttpBadRequestException::class);
1282 $this->folderController->unlinkFolder($request,
new ResponseHelper(),
1283 [
'contentId' => $contentId]);
1291 public function testGetAllFolderContents()
1294 $folder =
new Folder($folderId,
"Data",
"Folding for testing",1);
1295 $this->restHelper->shouldReceive(
'getUserId')->andReturn($this->userId);
1296 $this->folderDao->shouldReceive(
'isFolderAccessible')->andReturn(
true);
1297 $this->folderDao->shouldReceive(
'getFolder')->andReturn($folder);
1298 $this->folderContentPlugin->shouldReceive(
'handle')->andReturn([]);
1299 $this->folderDao->shouldReceive(
'getRemovableContents')->withArgs(array($folderId))->andReturn([]);
1301 $actualResponse = $this->folderController->getAllFolderContents(
null,
new ResponseHelper(),[
'id' => $folderId]);
1302 $this->assertEquals(200, $actualResponse->getStatusCode());
1310 public function testGetAllFolderContentsNotFound()
1313 $this->folderDao->shouldReceive(
'getFolder')->andReturn(
null);
1315 $this->expectException(HttpNotFoundException::class);
1316 $this->folderController->getAllFolderContents(
null,
new ResponseHelper(),[
'id' => $folderId]);
1324 public function testGetAllInAccessibleFolderContents()
1328 $folder =
new Folder($folderId,
"Data",
"Folding for testing",1);
1329 $this->folderDao->shouldReceive(
'isFolderAccessible')->andReturn(
false);
1330 $this->folderDao->shouldReceive(
'getFolder')->andReturn($folder);
1332 $this->expectException(HttpForbiddenException::class);
1333 $this->folderController->getAllFolderContents(
null,
new ResponseHelper(),[
'id' => $folderId]);
1341 public function testGetUnlinkableFolderContents()
1346 $folder =
new Folder($folderId,
"Data",
"Folding for testing",1);
1347 $this->folderDao->shouldReceive(
'getFolder')->withArgs(array($folderId))->andReturn($folder);
1348 $this->restHelper->shouldReceive(
"getUserId")->andReturn($userId);
1349 $this->folderDao->shouldReceive(
'isFolderAccessible')->withArgs(array($folderId, $this->restHelper->getUserId()))->andReturn(
true);
1350 $this->restHelper->shouldReceive(
'getFolderDao')->andReturn($this->folderDao);
1351 $this->folderContentPlugin->shouldReceive(
'handle');
1353 $actualResponse = $this->folderController->getUnlinkableFolderContents(
null,
new ResponseHelper(),[
"id" => $id]);
1354 var_dump($actualResponse);
1355 $this->assertEquals(200,$actualResponse->getStatusCode());
1363 public function testGetUnlinkableInaccessibleFolderContents()
1367 $folder =
new Folder($folderId,
"Data",
"Folding for testing",1);
1368 $this->folderDao->shouldReceive(
'getFolder')->withArgs(array($folderId))->andReturn($folder);
1369 $this->folderDao->shouldReceive(
'isFolderAccessible')->withArgs(array($folderId, $this->restHelper->getUserId()))->andReturn(
false);
1370 $this->restHelper->shouldReceive(
'getFolderDao')->andReturn($this->folderDao);
1371 $this->folderContentPlugin->shouldReceive(
'handle');
1373 $this->expectException(HttpForbiddenException::class);
1374 $this->folderController->getUnlinkableFolderContents(
null,
new ResponseHelper(),[
"id" => $id]);
1382 public function testGetUnlinkableFolderContentsBadRequest()
1386 $this->folderDao->shouldReceive(
'getFolder')->withArgs(array($folderId))->andReturn(
null);
1387 $this->folderDao->shouldReceive(
'isFolderAccessible')->withArgs(array($folderId, $this->restHelper->getUserId()))->andReturn(
false);
1388 $this->restHelper->shouldReceive(
'getFolderDao')->andReturn($this->folderDao);
1390 $this->expectException(HttpNotFoundException::class);
1391 $this->folderController->getUnlinkableFolderContents(
null,
new ResponseHelper(),[
"id" => $id]);
Controller for Folder model.
Provides helper methods to access database for REST api.
Override Slim response for withJson function.
Provides various DAO helper functions for REST api.
Different type of infos provided by REST.
Info model to contain general error and return values.
FolderGetName($FolderPk, $Top=-1)
Given a folder_pk, return the full path to this folder.
GetFolderArray($RootFolder, &$FolderArray)
Get an array of all the folders from a $RootFolder on down.
Folder2Path($folder_pk)
Return an array of folder_pk, folder_name from the users.root_folder_fk to $folder_pk.