FOSSology  4.7.1
Open Source License Compliance by Open Source Software
UploadControllerTest.php
Go to the documentation of this file.
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2020 Siemens AG
4  Author: Gaurav Mishra <mishra.gaurav@siemens.com>
5  SPDX-FileCopyrightText: © 2022 Samuel Dushimimana <dushsam100@gmail.com>
6  SPDX-FileContributor: Kaushlendra Pratap <kaushlendra-pratap.singh@siemens.com>
7 
8  SPDX-License-Identifier: GPL-2.0-only
9 */
16 
47 use Mockery as M;
48 use Slim\Psr7\Factory\StreamFactory;
49 use Slim\Psr7\Headers;
50 use Slim\Psr7\Request;
51 use Slim\Psr7\Uri;
52 
53 function TryToDelete($uploadpk, $user_pk, $group_pk, $uploadDao)
54 {
55  return UploadControllerTest::$functions->TryToDelete($uploadpk, $user_pk,
56  $group_pk, $uploadDao);
57 }
58 
63 class UploadControllerTest extends \PHPUnit\Framework\TestCase
64 {
69  public static $functions;
70 
76 
81  private $userId;
82 
87  private $groupId;
88 
93  private $dbHelper;
94 
99  private $dbManager;
100 
105  private $restHelper;
106 
112 
117  private $uploadDao;
118 
124 
129  private $folderDao;
130 
135  private $agentDao;
136 
141  private $clearingDao;
142 
147  private $licenseDao;
148 
154 
159  private $streamFactory;
160 
164  private $copyrightPlugin;
165 
169  private $downloadPlugin;
170 
175  protected function setUp() : void
176  {
177  global $container;
178  $this->userId = 2;
179  $this->groupId = 2;
180  $container = M::mock('ContainerBuilder');
181  self::$functions = M::mock();
182  $this->dbHelper = M::mock(DbHelper::class);
183  $this->dbManager = M::mock(DbManager::class);
184  $this->restHelper = M::mock(RestHelper::class);
185  $this->uploadDao = M::mock(UploadDao::class);
186  $this->folderDao = M::mock(FolderDao::class);
187  $this->agentDao = M::mock(AgentDao::class);
188  $this->userDao = M::mock(UserDao::class);
189  $this->clearingDao = M::mock(ClearingDao::class);
190  $this->licenseDao = M::mock(LicenseDao::class);
191  $this->reuseReportProcess = M::mock(ReuseReportProcessor::class);
192  $this->uploadPermissionDao = M::mock(UploadPermissionDao::class);
193  $this->downloadPlugin = M::mock("download");
194 
195  $this->dbManager->shouldReceive('getSingleRow')
196  ->withArgs([M::any(), [$this->groupId, UploadStatus::OPEN,
197  Auth::PERM_READ]]);
198  $this->dbHelper->shouldReceive('getDbManager')->andReturn($this->dbManager);
199 
200  $this->restHelper->shouldReceive('getDbHelper')->andReturn($this->dbHelper);
201  $this->restHelper->shouldReceive('getGroupId')->andReturn($this->groupId);
202  $this->restHelper->shouldReceive('getUserId')->andReturn($this->userId);
203  $this->restHelper->shouldReceive('getPlugin')->withArgs(array("download"))->andReturn($this->downloadPlugin);
204  $this->restHelper->shouldReceive('getUploadDao')
205  ->andReturn($this->uploadDao);
206  $this->restHelper->shouldReceive('getFolderDao')
207  ->andReturn($this->folderDao);
208  $this->restHelper->shouldReceive('getUserDao')
209  ->andReturn($this->userDao);
210  $container->shouldReceive('get')->withArgs(['dao.license'])->andReturn(
211  $this->licenseDao);
212  $container->shouldReceive('get')->withArgs(array(
213  'dao.clearing'))->andReturn($this->clearingDao);
214  $container->shouldReceive('get')->withArgs(array(
215  'helper.restHelper'))->andReturn($this->restHelper);
216  $container->shouldReceive('get')->withArgs(array(
217  'dao.agent'))->andReturn($this->agentDao);
218  $container->shouldReceive('get')->withArgs(array(
219  'dao.upload'))->andReturn($this->uploadDao);
220  $container->shouldReceive('get')->withArgs(
221  ['db.manager'])->andReturn($this->dbManager);
222  $container->shouldReceive('get')->withArgs(array('dao.license'))->andReturn($this->licenseDao);
223  $container->shouldReceive('get')->withArgs(array(
224  'businessrules.reusereportprocessor'))->andReturn($this->reuseReportProcess);
225  $this->uploadController = new UploadController($container);
226  $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
227  $this->streamFactory = new StreamFactory();
228  }
229 
234  protected function tearDown() : void
235  {
236  $this->addToAssertionCount(
237  \Hamcrest\MatcherAssert::getCount() - $this->assertCountBefore);
238  M::close();
239  }
240 
247  private function getResponseJson($response)
248  {
249  $response->getBody()->seek(0);
250  return json_decode($response->getBody()->getContents(), true);
251  }
252 
258  private function getUploadBounds($id)
259  {
260  if ($id > 4) {
261  return false;
262  }
263  $itemId = ($id * 100) + 1;
264  $left = ($id * 100) + 2;
265  $right = ($id * 100) + 50;
266  return new ItemTreeBounds($itemId, 'uploadtree_a', $id, $left, $right);
267  }
268 
274  private function getUpload($id)
275  {
276  $uploadName = "";
277  $description = "";
278  $uploadDate = "";
279  $folderId = 2;
280  $folderName = "SR";
281  $fileSize = 0;
282  switch ($id) {
283  case 2:
284  $uploadName = "top$id";
285  $uploadDate = "01-01-2020";
286  $fileSize = 123;
287  break;
288  case 3:
289  $uploadName = "child$id";
290  $uploadDate = "02-01-2020";
291  $fileSize = 133;
292  break;
293  case 4:
294  $uploadName = "child$id";
295  $uploadDate = "03-01-2020";
296  $fileSize = 153;
297  break;
298  default:
299  return null;
300  }
301  $hash = new Hash('sha1checksum', 'md5checksum', 'sha256checksum', $fileSize);
302  return new Upload($folderId, $folderName, $id, $description,
303  $uploadName, $uploadDate, null, $hash);
304  }
305 
311  public function testGetSingleUploadV1()
312  {
313  $this->testGetSingleUpload(ApiVersion::V1);
314  }
320  public function testGetSingleUploadV2()
321  {
322  $this->testGetSingleUpload(ApiVersion::V2);
323  }
324 
330  private function testGetSingleUpload($version)
331  {
332  $uploadId = 3;
333  $options = [
334  "folderId" => null,
335  "name" => null,
336  "status" => null,
337  "assignee" => null,
338  "since" => null
339  ];
340  $upload = $this->getUpload($uploadId);
341  $requestHeaders = new Headers();
342  $body = $this->streamFactory->createStream();
343  $request = new Request("GET", new Uri("HTTP", "localhost", 80,
344  "/uploads/$uploadId"), $requestHeaders, [], [], $body);
345  if ($version == ApiVersion::V2) {
346  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,
347  ApiVersion::V2);
348  }
349  $this->dbHelper->shouldReceive('doesIdExist')
350  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
351  $this->uploadDao->shouldReceive('isAccessible')
352  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
353  $this->uploadDao->shouldReceive('getParentItemBounds')
354  ->withArgs([$uploadId])->andReturn($this->getUploadBounds($uploadId));
355  $this->dbHelper->shouldReceive('getUploads')
356  ->withArgs([$this->userId, $this->groupId, 100, 1, $uploadId, $options,
357  true, $version])->andReturn([1, [$upload->getArray()]]);
358  $expectedResponse = (new ResponseHelper())->withJson($upload->getArray(), 200);
359  $actualResponse = $this->uploadController->getUploads($request,
360  new ResponseHelper(), ['id' => $uploadId]);
361  $this->assertEquals($expectedResponse->getStatusCode(),
362  $actualResponse->getStatusCode());
363  $this->assertEquals($this->getResponseJson($expectedResponse),
364  $this->getResponseJson($actualResponse));
365  }
366 
373  {
374  $uploadId = 3;
375  $requestHeaders = new Headers();
376  $body = $this->streamFactory->createStream();
377  $request = new Request("GET", new Uri("HTTP", "localhost", 80,
378  "/uploads/$uploadId"), $requestHeaders, [], [], $body);
379  $this->dbHelper->shouldReceive('doesIdExist')
380  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
381  $this->uploadDao->shouldReceive('isAccessible')
382  ->withArgs([$uploadId, $this->groupId])->andReturn(false);
383  $this->expectException(HttpForbiddenException::class);
384 
385  $this->uploadController->getUploads($request, new ResponseHelper(),
386  ['id' => $uploadId]);
387  }
388 
396  public function testGetUploadWithFiltersV1()
397  {
398  $this->testGetUploadWithFilters(ApiVersion::V1);
399  }
407  public function testGetUploadWithFiltersV2()
408  {
409  $this->testGetUploadWithFilters(ApiVersion::V2);
410  }
411 
412  private function testGetUploadWithFilters($version)
413  {
414  $options = [
415  "folderId" => null,
416  "name" => null,
417  "status" => null,
418  "assignee" => null,
419  "since" => null
420  ];
421 
422  // Test for folder filter
423  $folderId = 2;
424  $folderOptions = $options;
425  $folderOptions["folderId"] = $folderId;
426  $requestHeaders = new Headers();
427  $body = $this->streamFactory->createStream();
428  $request = new Request("GET", new Uri("HTTP", "localhost", 80,
429  "/uploads", UploadController::FOLDER_PARAM . "=$folderId"),
430  $requestHeaders, [], [], $body);
431  if ($version == ApiVersion::V2) {
432  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,
433  ApiVersion::V2);
434  }
435  $this->folderDao->shouldReceive('isFolderAccessible')
436  ->withArgs([$folderId, $this->userId])->andReturn(true)->once();
437  $this->dbHelper->shouldReceive('getUploads')
438  ->withArgs([$this->userId, $this->groupId, 100, 1, null, $folderOptions,
439  true, $version])->andReturn([1, []])->once();
440  $this->uploadController->getUploads($request, new ResponseHelper(), []);
441 
442  // Test for name filter
443  $name = "foss";
444  $nameOptions = $options;
445  $nameOptions["name"] = $name;
446  $requestHeaders = new Headers();
447  $body = $this->streamFactory->createStream();
448  $request = new Request("GET", new Uri("HTTP", "localhost", 80,
449  "/uploads", UploadController::FILTER_NAME . "=$name"), $requestHeaders,
450  [], [], $body);
451  if ($version == ApiVersion::V2) {
452  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,
453  ApiVersion::V2);
454  }
455  $this->dbHelper->shouldReceive('getUploads')
456  ->withArgs([$this->userId, $this->groupId, 100, 1, null, $nameOptions,
457  true, $version])->andReturn([1, []])->once();
458  $this->uploadController->getUploads($request, new ResponseHelper(), []);
459 
460  // Test for status filter
461  $statusString = "InProgress";
462  $status = UploadStatus::IN_PROGRESS;
463  $statusOptions = $options;
464  $statusOptions["status"] = $status;
465  $requestHeaders = new Headers();
466  $body = $this->streamFactory->createStream();
467  $request = new Request("GET", new Uri("HTTP", "localhost", 80,
468  "/uploads", UploadController::FILTER_STATUS . "=$statusString"),
469  $requestHeaders, [], [], $body);
470  if ($version == ApiVersion::V2) {
471  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,
472  ApiVersion::V2);
473  }
474  $this->dbHelper->shouldReceive('getUploads')
475  ->withArgs([$this->userId, $this->groupId, 100, 1, null, $statusOptions,
476  true, $version])->andReturn([1, []])->once();
477  $this->uploadController->getUploads($request, new ResponseHelper(), []);
478 
479  // Test for assignee filter
480  $assignee = "-me-";
481  $assigneeOptions = $options;
482  $assigneeOptions["assignee"] = $this->userId;
483  $requestHeaders = new Headers();
484  $body = $this->streamFactory->createStream();
485  $request = new Request("GET", new Uri("HTTP", "localhost", 80,
486  "/uploads", UploadController::FILTER_ASSIGNEE . "=$assignee"),
487  $requestHeaders, [], [], $body);
488  if ($version == ApiVersion::V2) {
489  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,
490  ApiVersion::V2);
491  }
492  $this->dbHelper->shouldReceive('getUploads')
493  ->withArgs([$this->userId, $this->groupId, 100, 1, null, $assigneeOptions,
494  true, $version])->andReturn([1, []])->once();
495  $this->uploadController->getUploads($request, new ResponseHelper(), []);
496 
497  // Test for since filter
498  $since = "2021-02-28";
499  $sinceOptions = $options;
500  $sinceOptions["since"] = strtotime($since);
501  $requestHeaders = new Headers();
502  $body = $this->streamFactory->createStream();
503  $request = new Request("GET", new Uri("HTTP", "localhost", 80,
504  "/uploads", UploadController::FILTER_DATE . "=$since"),
505  $requestHeaders, [], [], $body);
506  if ($version == ApiVersion::V2) {
507  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,
508  ApiVersion::V2);
509  }
510  $this->dbHelper->shouldReceive('getUploads')
511  ->withArgs([$this->userId, $this->groupId, 100, 1, null, $sinceOptions,
512  true, $version])->andReturn([1, []])->once();
513  $this->uploadController->getUploads($request, new ResponseHelper(), []);
514 
515  // Test for status and since filter
516  $statusString = "Open";
517  $status = UploadStatus::OPEN;
518  $since = "2021-02-28";
519  $combOptions = $options;
520  $combOptions["since"] = strtotime($since);
521  $combOptions["status"] = $status;
522  $requestHeaders = new Headers();
523  $body = $this->streamFactory->createStream();
524  $request = new Request("GET", new Uri("HTTP", "localhost", 80,
525  "/uploads", UploadController::FILTER_DATE . "=$since&" .
526  UploadController::FILTER_STATUS . "=$statusString"),
527  $requestHeaders, [], [], $body);
528  if ($version == ApiVersion::V2) {
529  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,
530  ApiVersion::V2);
531  }
532  $this->dbHelper->shouldReceive('getUploads')
533  ->withArgs([$this->userId, $this->groupId, 100, 1, null, $combOptions,
534  true, $version])->andReturn([1, []])->once();
535  $this->uploadController->getUploads($request, new ResponseHelper(), []);
536  }
537 
543  public function testGetUploadsV1(){
544  $this->testGetUploads(ApiVersion::V1);
545  }
551  public function testGetUploadsV2(){
552  $this->testGetUploads(ApiVersion::V2);
553  }
554  private function testGetUploads($version)
555  {
556  $uploads = [
557  $this->getUpload(2)->getArray(),
558  $this->getUpload(3)->getArray(),
559  $this->getUpload(4)->getArray()
560  ];
561  $options = [
562  "folderId" => null,
563  "name" => null,
564  "status" => null,
565  "assignee" => null,
566  "since" => null
567  ];
568  $requestHeaders = new Headers();
569  $body = $this->streamFactory->createStream();
570  $request = new Request("GET", new Uri("HTTP", "localhost", 80,
571  "/uploads/"), $requestHeaders, [], [], $body);
572  if ($version == ApiVersion::V2) {
573  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,
574  ApiVersion::V2);
575  }
576  $this->dbHelper->shouldReceive('getUploads')
577  ->withArgs([$this->userId, $this->groupId, 100, 1, null, $options, true, $version])
578  ->andReturn([1, $uploads]);
579  $expectedResponse = (new ResponseHelper())->withJson($uploads, 200);
580  $actualResponse = $this->uploadController->getUploads($request,
581  new ResponseHelper(), []);
582  $this->assertEquals($expectedResponse->getStatusCode(),
583  $actualResponse->getStatusCode());
584  $this->assertEquals($this->getResponseJson($expectedResponse),
585  $this->getResponseJson($actualResponse));
586  }
587 
595  {
596  $uploadId = 3;
597  $requestHeaders = new Headers();
598  $body = $this->streamFactory->createStream();
599  $request = new Request("GET", new Uri("HTTP", "localhost", 80,
600  "/uploads/"), $requestHeaders, [], [], $body);
601  $this->dbHelper->shouldReceive('doesIdExist')
602  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
603  $this->uploadDao->shouldReceive('isAccessible')
604  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
605  $this->uploadDao->shouldReceive('getParentItemBounds')
606  ->withArgs([$uploadId])->andReturn(false);
607  $this->expectException(HttpServiceUnavailableException::class);
608 
609  $this->uploadController->getUploads($request, new ResponseHelper(),
610  ['id' => $uploadId]);
611  }
612 
618  public function testCopyUploadV1()
619  {
620  $this->testCopyUpload(ApiVersion::V1);
621  }
627  public function testCopyUploadV2()
628  {
629  $this->testCopyUpload(ApiVersion::V2);
630  }
636  private function testCopyUpload($version)
637  {
638  $uploadId = 3;
639  $folderId = 5;
640  $info = new Info(202, "Upload $uploadId will be copied to folder $folderId",
641  InfoType::INFO);
642 
643  $this->restHelper->shouldReceive('copyUpload')
644  ->withArgs([$uploadId, $folderId, true])->andReturn($info);
645  $expectedResponse = (new ResponseHelper())->withJson($info->getArray(),
646  $info->getCode());
647 
648  $requestHeaders = new Headers();
649  $body = $this->streamFactory->createStream();
650 
651  if($version==ApiVersion::V1){
652  $requestHeaders->setHeader('folderId', $folderId);
653  $requestHeaders->setHeader('action', 'copy');
654  $request = new Request("PUT", new Uri("HTTP", "localhost"),
655  $requestHeaders, [], [], $body);
656  $actualResponse = $this->uploadController->moveUpload($request,
657  new ResponseHelper(), ['id' => $uploadId]);
658  }
659  else{
660  $request = new Request("PUT", new Uri("HTTP", "localhost"),
661  $requestHeaders, [], [], $body);
662  if ($version == ApiVersion::V2) {
663  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,
664  ApiVersion::V2);
665  }
666  $actualResponse = $this->uploadController->moveUpload($request->withUri($request->getUri()->withQuery("folderId=$folderId&action=copy")),
667  new ResponseHelper(), ['id' => $uploadId]);
668  }
669  $this->assertEquals($expectedResponse->getStatusCode(),
670  $actualResponse->getStatusCode());
671  $this->assertEquals($this->getResponseJson($expectedResponse),
672  $this->getResponseJson($actualResponse));
673  }
684  {
685  $this->testMoveUploadInvalidFolder(ApiVersion::V1);
686  }
693  {
695  }
700  private function testMoveUploadInvalidFolder($version = ApiVersion::V2)
701  {
702  $uploadId = 3;
703 
704  $requestHeaders = new Headers();
705  $requestHeaders->setHeader('folderId', 'alpha');
706  $requestHeaders->setHeader('action', 'move');
707  $body = $this->streamFactory->createStream();
708  $request = new Request("PATCH", new Uri("HTTP", "localhost"),
709  $requestHeaders, [], [], $body);
710  if ($version==ApiVersion::V2) {
711  $request = $request->withQueryParams(['folderId' => 'alpha', 'action' => 'move']);
712  } else {
713  $request = $request->withHeader("folderId", "alpha")
714  ->withHeader("action", "move");
715  }
716  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,$version);
717  $this->expectException(HttpBadRequestException::class);
718 
719  $this->uploadController->moveUpload($request, new ResponseHelper(),
720  ['id' => $uploadId]);
721  }
722 
730  public function testPostUploadV1()
731  {
732  $this->testPostUpload(ApiVersion::V1);
733  }
734 
742  public function testPostUploadV2()
743  {
744  $this->testPostUpload(ApiVersion::V2);
745  }
746 
751  private function testPostUpload(int $version)
752  {
753  $folderId = 2;
754  $uploadId = 20;
755  $uploadDescription = "Test Upload";
756 
757  $requestHeaders = new Headers();
758  $requestHeaders->setHeader('Content-Type', 'application/json');
759  if ($version == ApiVersion::V2) {
760  $reqBody = [
761  "location" => "data",
762  "folderId" => $folderId,
763  "uploadDescription" => $uploadDescription,
764  "ignoreScm" => "true",
765  "scanOptions" => "scanOptions",
766  "uploadType" => "vcs",
767  "excludeFolder" => "false"
768  ];
769  } else {
770  $reqBody = [
771  "location" => "data",
772  "scanOptions" => "scanOptions"
773  ];
774  $requestHeaders->setHeader('folderId', $folderId);
775  $requestHeaders->setHeader('uploadDescription', $uploadDescription);
776  $requestHeaders->setHeader('ignoreScm', 'true');
777  $requestHeaders->setHeader('Content-Type', 'application/json');
778  $requestHeaders->setHeader('uploadType', 'vcs');
779  }
780 
781  $body = $this->streamFactory->createStream(json_encode(
782  $reqBody
783  ));
784  $request = new Request("POST", new Uri("HTTP", "localhost"),
785  $requestHeaders, [], [], $body);
786  if ($version == ApiVersion::V2) {
787  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,
788  ApiVersion::V2);
789  }
790  $uploadHelper = M::mock('overload:Fossology\UI\Api\Helper\UploadHelper');
791  if ($version == ApiVersion::V2) {
792  $uploadHelper->shouldReceive('createNewUpload')
793  ->withArgs([$reqBody["location"], $folderId, $uploadDescription, 'protected', 'true',
794  'vcs', false, false])
795  ->andReturn([true, '', '', $uploadId]);
796  } else {
797  $uploadHelper->shouldReceive('createNewUpload')
798  ->withArgs([$reqBody["location"], $folderId, $uploadDescription, 'protected', 'true',
799  'vcs', false])
800  ->andReturn([true, '', '', $uploadId]);
801  }
802 
803  $info = new Info(201, intval(20), InfoType::INFO);
804 
805  $uploadHelper->shouldReceive('handleScheduleAnalysis')->withArgs([$uploadId,$folderId,$reqBody["scanOptions"],false])
806  ->andReturn($info);
807 
808  $this->folderDao->shouldReceive('getAllFolderIds')->andReturn([2,3,4]);
809  $this->folderDao->shouldReceive('isFolderAccessible')
810  ->withArgs([$folderId, $this->userId])->andReturn(true);
811 
812  $expectedResponse = (new ResponseHelper())->withJson($info->getArray(),
813  $info->getCode());
814  $actualResponse = $this->uploadController->postUpload($request,
815  new ResponseHelper(), []);
816  $this->assertEquals($expectedResponse->getStatusCode(),
817  $actualResponse->getStatusCode());
818  $this->assertEquals($this->getResponseJson($expectedResponse),
819  $this->getResponseJson($actualResponse));
820  }
829  {
830  $folderId = -1;
831  $requestHeaders = new Headers();
832  $requestHeaders->setHeader('Content-Type', 'application/json');
833 
834  $body = $this->streamFactory->createStream(json_encode([
835  "location" => "vcsData",
836  "folderId" => $folderId,
837  "uploadDescription" => "Test Upload",
838  "ignoreScm" => "true",
839  "scanOptions" => "scanOptions",
840  "uploadType" => "vcs"
841  ]));
842 
843  $request = new Request(
844  "POST",
845  new Uri("HTTP", "localhost"),
846  $requestHeaders,
847  [],
848  [],
849  $body
850  );
851 
852  $request = $request->withAttribute(
853  ApiVersion::ATTRIBUTE_NAME,
854  ApiVersion::V2
855  );
856 
857  M::mock('overload:Fossology\UI\Api\Helper\UploadHelper');
858 
859  $this->expectException(HttpBadRequestException::class);
860 
861  $this->uploadController->postUpload($request, new ResponseHelper(), []);
862  }
871  {
872  $this->testPostUploadFolderNotAccessible(ApiVersion::V1);
873  }
874 
883  {
884  $this->testPostUploadFolderNotAccessible(ApiVersion::V2);
885  }
886 
891  private function testPostUploadFolderNotAccessible(int $version)
892  {
893  $folderId = 2;
894  $uploadDescription = "Test Upload";
895 
896  $requestHeaders = new Headers();
897  $requestHeaders->setHeader('Content-type', 'application/json');
898  if ($version == ApiVersion::V2) {
899  $body = $this->streamFactory->createStream(json_encode([
900  "location" => "data",
901  "folderId" => $folderId,
902  "uploadDescription" => $uploadDescription,
903  "ignoreScm" => "true",
904  "scanOptions" => "scanOptions",
905  "uploadType" => "vcs"
906  ]));
907  } else {
908  $body = $this->streamFactory->createStream(json_encode([
909  "location" => "data",
910  "scanOptions" => "scanOptions"
911  ]));
912  $requestHeaders->setHeader('folderId', $folderId);
913  $requestHeaders->setHeader('uploadDescription', $uploadDescription);
914  $requestHeaders->setHeader('ignoreScm', 'true');
915  $requestHeaders->setHeader('Content-Type', 'application/json');
916  $requestHeaders->setHeader('uploadType', 'vcs');
917  }
918  $request = new Request("POST", new Uri("HTTP", "localhost"),
919  $requestHeaders, [], [], $body);
920  if ($version == ApiVersion::V2) {
921  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,
922  ApiVersion::V2);
923  }
924 
925  $uploadHelper = M::mock('overload:Fossology\UI\Api\Helper\UploadHelper');
926 
927  $this->folderDao->shouldReceive('getAllFolderIds')->andReturn([2,3,4]);
928  $this->folderDao->shouldReceive('isFolderAccessible')
929  ->withArgs([$folderId, $this->userId])->andReturn(false);
930  $this->expectException(HttpForbiddenException::class);
931 
932  $this->uploadController->postUpload($request, new ResponseHelper(),
933  []);
934  }
935 
944  {
945  $this->testPostUploadFolderNotFound(ApiVersion::V1);
946  }
947 
956  {
957  $this->testPostUploadFolderNotFound(ApiVersion::V2);
958  }
959 
964  private function testPostUploadFolderNotFound(int $version)
965  {
966  $folderId = 8;
967  $uploadDescription = "Test Upload";
968 
969  $requestHeaders = new Headers();
970  $requestHeaders->setHeader('Content-type', 'application/json');
971  if ($version == ApiVersion::V2) {
972  $body = $this->streamFactory->createStream(json_encode([
973  "location" => "vcsData",
974  "folderId" => $folderId,
975  "uploadDescription" => $uploadDescription,
976  "ignoreScm" => "true",
977  "scanOptions" => "scanOptions",
978  "uploadType" => "vcs"
979  ]));
980  } else {
981  $body = $this->streamFactory->createStream(json_encode([
982  "location" => "vcsData",
983  "scanOptions" => "scanOptions"
984  ]));
985  $requestHeaders->setHeader('folderId', $folderId);
986  $requestHeaders->setHeader('uploadDescription', $uploadDescription);
987  $requestHeaders->setHeader('ignoreScm', 'true');
988  $requestHeaders->setHeader('Content-Type', 'application/json');
989  $requestHeaders->setHeader('uploadType', 'vcs');
990  }
991  $request = new Request("POST", new Uri("HTTP", "localhost"),
992  $requestHeaders, [], [], $body);
993  if ($version == ApiVersion::V2) {
994  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,
995  ApiVersion::V2);
996  }
997 
998  $uploadHelper = M::mock('overload:Fossology\UI\Api\Helper\UploadHelper');
999 
1000  $this->folderDao->shouldReceive('getAllFolderIds')->andReturn([2,3,4]);
1001  $this->expectException(HttpNotFoundException::class);
1002 
1003  $this->uploadController->postUpload($request, new ResponseHelper(),
1004  []);
1005  }
1006 
1015  {
1016  $this->testPostUploadInternalError(ApiVersion::V1);
1017  }
1018 
1027  {
1028  $this->testPostUploadInternalError(ApiVersion::V2);
1029  }
1030 
1035  private function testPostUploadInternalError(int $version)
1036  {
1037  $folderId = 3;
1038  $uploadDescription = "Test Upload";
1039  $errorMessage = "Failed to insert upload record";
1040  $errorDesc = "";
1041 
1042  $requestHeaders = new Headers();
1043  $requestHeaders->setHeader('Content-type', 'application/json');
1044  if ($version == ApiVersion::V2) {
1045  $body = $this->streamFactory->createStream(json_encode([
1046  "location" => "vcsData",
1047  "folderId" => $folderId,
1048  "uploadDescription" => $uploadDescription,
1049  "ignoreScm" => "true",
1050  "scanOptions" => "scanOptions",
1051  "uploadType" => "vcs",
1052  "excludeFolder" => "false"
1053  ]));
1054  } else {
1055  $body = $this->streamFactory->createStream(json_encode([
1056  "location" => "vcsData",
1057  "scanOptions" => "scanOptions"
1058  ]));
1059  $requestHeaders->setHeader('folderId', $folderId);
1060  $requestHeaders->setHeader('uploadDescription', $uploadDescription);
1061  $requestHeaders->setHeader('ignoreScm', 'true');
1062  $requestHeaders->setHeader('Content-Type', 'application/json');
1063  $requestHeaders->setHeader('uploadType', 'vcs');
1064  }
1065 
1066  $request = new Request("POST", new Uri("HTTP", "localhost"),
1067  $requestHeaders, [], [], $body);
1068  if ($version == ApiVersion::V2) {
1069  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,
1070  ApiVersion::V2);
1071  }
1072 
1073  $uploadHelper = M::mock('overload:Fossology\UI\Api\Helper\UploadHelper');
1074  if ($version == ApiVersion::V2) {
1075  $uploadHelper->shouldReceive('createNewUpload')
1076  ->withArgs(['vcsData', $folderId, $uploadDescription, 'protected', 'true',
1077  'vcs', false, false])
1078  ->andReturn([false, $errorMessage, $errorDesc, [-1]]);
1079  } else {
1080  $uploadHelper->shouldReceive('createNewUpload')
1081  ->withArgs(['vcsData', $folderId, $uploadDescription, 'protected', 'true',
1082  'vcs', false])
1083  ->andReturn([false, $errorMessage, $errorDesc, [-1]]);
1084  }
1085 
1086  $this->folderDao->shouldReceive('getAllFolderIds')->andReturn([2,3,4]);
1087  $this->folderDao->shouldReceive('isFolderAccessible')
1088  ->withArgs([$folderId, $this->userId])->andReturn(true);
1089  $this->expectException(HttpInternalServerErrorException::class);
1090 
1091  $this->uploadController->postUpload($request, new ResponseHelper(), []);
1092  }
1093 
1101  public function testGetUploadLicensesV1()
1102  {
1103  $this->testGetUploadLicenses(ApiVersion::V1);
1104  }
1112  public function testGetUploadLicensesV2()
1113  {
1114  $this->testGetUploadLicenses(ApiVersion::V2);
1115  }
1116  private function testGetUploadLicenses($version)
1117  {
1118  $uploadId = 3;
1119  $agentsRun = [
1120  ['agentName' => 'nomos', 'currentAgentId' => 2, 'isAgentRunning' => false],
1121  ['agentName' => 'monk', 'currentAgentId' => 3, 'isAgentRunning' => false]
1122  ];
1123  $licenseResponse = [
1124  ['filePath' => 'filea', 'agentFindings' => 'MIT', 'conclusions' => 'MIT'],
1125  ['filePath' => 'fileb', 'agentFindings' => 'MIT',
1126  'conclusions' => 'No_license_found']
1127  ];
1128 
1129  $requestHeaders = new Headers();
1130  $body = $this->streamFactory->createStream();
1131  $request = new Request("POST", new Uri("HTTP", "localhost", 80,
1132  "/uploads/$uploadId/licenses", UploadController::AGENT_PARAM .
1133  "=nomos,monk&containers=false"),
1134  $requestHeaders, [], [], $body);
1135  if ($version == ApiVersion::V2) {
1136  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,
1137  ApiVersion::V2);
1138  }
1139  $this->dbHelper->shouldReceive('doesIdExist')
1140  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1141  $this->uploadDao->shouldReceive('isAccessible')
1142  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1143  $this->uploadDao->shouldReceive('getParentItemBounds')
1144  ->withArgs([$uploadId])->andReturn($this->getUploadBounds($uploadId));
1145  $this->agentDao->shouldReceive('arsTableExists')
1146  ->withArgs([M::anyOf('nomos', 'monk')])->andReturn(true);
1147 
1148  $scanJobProxy = M::mock('overload:Fossology\Lib\Proxy\ScanJobProxy');
1149  $scanJobProxy->shouldReceive('createAgentStatus')
1150  ->withArgs([['nomos', 'monk']])
1151  ->andReturn($agentsRun);
1152 
1153  $uploadHelper = M::mock('overload:Fossology\UI\Api\Helper\UploadHelper');
1154  $uploadHelper->shouldReceive('getUploadLicenseList')
1155  ->withArgs([$uploadId, ['nomos', 'monk'], false, true, false, 0, 50, $version])
1156  ->andReturn(([[$licenseResponse], 1]));
1157 
1158  $expectedResponse = (new ResponseHelper())->withJson($licenseResponse, 200);
1159 
1160  $actualResponse = $this->uploadController->getUploadLicenses($request,
1161  new ResponseHelper(), ['id' => $uploadId]);
1162  $this->assertEquals($expectedResponse->getStatusCode(),
1163  $actualResponse->getStatusCode());
1164  $this->assertEquals($this->getResponseJson($expectedResponse),
1165  $this->getResponseJson($actualResponse)[0]);
1166  $this->assertEquals('1',
1167  $actualResponse->getHeaderLine('X-Total-Pages'));
1168  }
1169 
1179  {
1180  $this->testGetUploadLicensesPendingScan(ApiVersion::V1);
1181  }
1191  {
1193  }
1198  private function testGetUploadLicensesPendingScan($version = ApiVersion::V2)
1199  {
1200  $uploadId = 3;
1201  $agentsRun = [
1202  ['agentName' => 'nomos', 'currentAgentId' => 2, 'isAgentRunning' => true],
1203  ['agentName' => 'monk', 'currentAgentId' => 3, 'isAgentRunning' => false]
1204  ];
1205 
1206  $requestHeaders = new Headers();
1207  $body = $this->streamFactory->createStream();
1208  $request = new Request("POST", new Uri("HTTP", "localhost", 80,
1209  "/uploads/$uploadId/licenses", UploadController::AGENT_PARAM .
1210  "=nomos,monk&containers=false"),
1211  $requestHeaders, [], [], $body);
1212  if ($version == ApiVersion::V2) {
1213  $request = $request->withQueryParams(['page' => 1, 'limit' => 2, "agent" =>"nomos,monk" ]);
1214  } else {
1215  $request = $request->withHeader("limit",2)
1216  ->withHeader("page",1);
1217  }
1218  $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,$version);
1219 
1220  $this->agentDao->shouldReceive("arsTableExists")->withAnyArgs()->andReturn(true);
1221  $this->agentDao->shouldReceive("getRunningAgentIds")->withAnyArgs()->andReturn([$agentsRun]);
1222  $this->agentDao->shouldReceive("getSuccessfulAgentEntries")->withAnyArgs()->andReturn([]);
1223  $scanJobProxy = M::mock('overload:Fossology\Lib\Proxy\ScanJobProxy');
1224  $this->dbHelper->shouldReceive('doesIdExist')
1225  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1226  $this->uploadDao->shouldReceive('isAccessible')
1227  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1228  $this->uploadDao->shouldReceive('getParentItemBounds')
1229  ->withArgs([$uploadId])->andReturn($this->getUploadBounds($uploadId));
1230  $this->agentDao->shouldReceive('arsTableExists')
1231  ->withArgs([M::anyOf('nomos', 'monk')])->andReturn(true);
1232 
1233  $scanJobProxy->shouldReceive('createAgentStatus')
1234  ->withArgs([['nomos', 'monk']])
1235  ->andReturn($agentsRun);
1236  $this->expectException(HttpServiceUnavailableException::class);
1237 
1238  $this->uploadController->getUploadLicenses($request, new ResponseHelper(),
1239  ['id' => $uploadId]);
1240  }
1241 
1247  public function testUpdateUpload()
1248  {
1249  $upload = 2;
1250  $assignee = 4;
1251  $status = UploadStatus::REJECTED;
1252  $comment = "Not helpful";
1253 
1254  $resource = fopen('data://text/plain;base64,' .
1255  base64_encode($comment), 'r+');
1256  $body = $this->streamFactory->createStreamFromResource($resource);
1257  $request = new Request("POST", new Uri("HTTP", "localhost", 80,
1258  "/uploads/$upload", UploadController::FILTER_STATUS . "=Rejected&" .
1259  UploadController::FILTER_ASSIGNEE . "=$assignee"),
1260  new Headers(), [], [], $body);
1261 
1262  $this->userDao->shouldReceive('isAdvisorOrAdmin')
1263  ->withArgs([$this->userId, $this->groupId])
1264  ->andReturn(true);
1265  $this->userDao->shouldReceive('getUserChoices')
1266  ->withArgs([$this->groupId])
1267  ->andReturn([$this->userId => "fossy", $assignee => "friendly-fossy"]);
1268  $this->dbManager->shouldReceive('getSingleRow')
1269  ->withArgs([M::any(), [$assignee, $this->groupId, $upload], M::any()]);
1270  $this->dbManager->shouldReceive('getSingleRow')
1271  ->withArgs([M::any(), [$status, $comment, $this->groupId, $upload],
1272  M::any()]);
1273  $this->dbManager->shouldReceive('getSingleRow')
1274  ->withArgs([M::any(), [$upload], M::any()])
1275  ->andReturn(["exists" => ""]);
1276 
1277  $info = new Info(202, "Upload updated successfully.", InfoType::INFO);
1278  $expectedResponse = (new ResponseHelper())->withJson($info->getArray(),
1279  $info->getCode());
1280  $actualResponse = $this->uploadController->updateUpload($request,
1281  new ResponseHelper(), ['id' => $upload]);
1282  $this->assertEquals($expectedResponse->getStatusCode(),
1283  $actualResponse->getStatusCode());
1284  $this->assertEquals($this->getResponseJson($expectedResponse),
1285  $this->getResponseJson($actualResponse));
1286  }
1287 
1293  public function testUpdateUploadNoPerm()
1294  {
1295  $upload = 2;
1296  $assignee = 4;
1297  $comment = "Not helpful";
1298 
1299  $resource = fopen('data://text/plain;base64,' .
1300  base64_encode($comment), 'r+');
1301  $body = $this->streamFactory->createStreamFromResource($resource);
1302  $request = new Request("POST", new Uri("HTTP", "localhost", 80,
1303  "/uploads/$upload", UploadController::FILTER_STATUS . "=Rejected&" .
1304  UploadController::FILTER_ASSIGNEE . "=$assignee"),
1305  new Headers(), [], [], $body);
1306 
1307  $this->userDao->shouldReceive('isAdvisorOrAdmin')
1308  ->withArgs([$this->userId, $this->groupId])
1309  ->andReturn(false);
1310  $this->expectException(HttpForbiddenException::class);
1311 
1312  $this->uploadController->updateUpload($request, new ResponseHelper(),
1313  ['id' => $upload]);
1314  }
1315 
1321  public function testGetMainLicenses()
1322  {
1323  $uploadId = 1;
1324  $licenseIds = array();
1325  $licenseId = 123;
1326  $licenseIds[$licenseId] = $licenseId;
1327  $license = new License($licenseId, "MIT", "MIT License", "risk", "texts", [],
1328  'type', false);
1329 
1330  $this->uploadDao->shouldReceive('isAccessible')
1331  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1332  $this->dbHelper->shouldReceive('doesIdExist')
1333  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1334  $this->clearingDao->shouldReceive('getMainLicenseIds')->withArgs([$uploadId, $this->groupId])->andReturn($licenseIds);
1335  $this->licenseDao->shouldReceive('getLicenseObligations')->withArgs([[$licenseId], false])->andReturn([]);
1336  $this->licenseDao->shouldReceive('getLicenseObligations')->withArgs([[$licenseId], true])->andReturn([]);
1337  $this->licenseDao->shouldReceive('getLicenseById')->withArgs([$licenseId, $this->groupId])->andReturn($license);
1338 
1339  $licenses[] = $license->getArray();
1340  $expectedResponse = (new ResponseHelper())->withJson($licenses, 200);
1341  $actualResponse = $this->uploadController->getMainLicenses(null, new ResponseHelper(), ['id' => $uploadId]);
1342  $this->assertEquals($expectedResponse->getStatusCode(), $actualResponse->getStatusCode());
1343  $this->assertEquals($this->getResponseJson($expectedResponse), $this->getResponseJson($actualResponse));
1344  }
1345 
1346 
1352  public function testSetMainLicense()
1353  {
1354  $uploadId = 2;
1355  $shortName = "MIT";
1356  $licenseId = 1;
1357  $rq = [
1358  "shortName" => $shortName,
1359  ];
1360  $license = new License(2, $shortName, "MIT License", "risk", "texts", [],
1361  'type', 1);
1362  $licenseIds[$licenseId] = $licenseId;
1363  $this->uploadDao->shouldReceive('isAccessible')
1364  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1365  $this->uploadDao->shouldReceive('isEditable')
1366  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1367  $this->dbHelper->shouldReceive('doesIdExist')
1368  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1369  $this->licenseDao->shouldReceive('getLicenseByShortName')
1370  ->withArgs([$shortName, $this->groupId])->andReturn($license);
1371  $this->clearingDao->shouldReceive('getMainLicenseIds')->withArgs([$uploadId, $this->groupId])->andReturn($licenseIds);
1372  $this->clearingDao->shouldReceive('makeMainLicense')
1373  ->withArgs([$uploadId, $this->groupId, $license->getId()])->andReturn(null);
1374 
1375  $info = new Info(200, "Successfully added new main license", InfoType::INFO);
1376 
1377  $expectedResponse = (new ResponseHelper())->withJson($info->getArray(), $info->getCode());
1378  $reqBody = $this->streamFactory->createStream(json_encode(
1379  $rq
1380  ));
1381  $requestHeaders = new Headers();
1382  $requestHeaders->setHeader('Content-Type', 'application/json');
1383  $request = new Request("POST", new Uri("HTTP", "localhost"),
1384  $requestHeaders, [], [], $reqBody);
1385 
1386  $actualResponse = $this->uploadController->setMainLicense($request, new ResponseHelper(), ['id' => $uploadId]);
1387 
1388  $this->assertEquals($expectedResponse->getStatusCode(),
1389  $actualResponse->getStatusCode());
1390  $this->assertEquals($this->getResponseJson($expectedResponse),
1391  $this->getResponseJson($actualResponse));
1392  }
1393 
1399  public function testSetMainLicense_exists()
1400  {
1401  $uploadId = 2;
1402  $shortName = "MIT";
1403  $licenseId = 1;
1404  $rq = [
1405  "shortName" => $shortName,
1406  ];
1407  $license = new License($licenseId, $shortName, "MIT License", "risk", "texts", [],
1408  'type', 1);
1409  $licenseIds[$licenseId] = $licenseId;
1410  $this->uploadDao->shouldReceive('isAccessible')
1411  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1412  $this->uploadDao->shouldReceive('isEditable')
1413  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1414  $this->dbHelper->shouldReceive('doesIdExist')
1415  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1416  $this->licenseDao->shouldReceive('getLicenseByShortName')
1417  ->withArgs([$shortName, $this->groupId])->andReturn($license);
1418  $this->clearingDao->shouldReceive('getMainLicenseIds')->withArgs([$uploadId, $this->groupId])->andReturn($licenseIds);
1419  $this->clearingDao->shouldReceive('makeMainLicense')
1420  ->withArgs([$uploadId, $this->groupId, $license->getId()])->andReturn(null);
1421 
1422  $reqBody = $this->streamFactory->createStream(json_encode(
1423  $rq
1424  ));
1425  $requestHeaders = new Headers();
1426  $requestHeaders->setHeader('Content-Type', 'application/json');
1427  $request = new Request("POST", new Uri("HTTP", "localhost"),
1428  $requestHeaders, [], [], $reqBody);
1429  $this->expectException(HttpBadRequestException::class);
1430 
1431  $this->uploadController->setMainLicense($request, new ResponseHelper(), ['id' => $uploadId]);
1432  }
1433 
1440  {
1441  $uploadId = 2;
1442  $rq = [
1443  "shortName" => "MIT",
1444  ];
1445  $this->uploadDao->shouldReceive('isAccessible')
1446  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1447  $this->uploadDao->shouldReceive('isEditable')
1448  ->withArgs([$uploadId, $this->groupId])->andReturn(false);
1449  $this->dbHelper->shouldReceive('doesIdExist')
1450  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1451 
1452  $reqBody = $this->streamFactory->createStream(json_encode($rq));
1453  $requestHeaders = new Headers();
1454  $requestHeaders->setHeader('Content-Type', 'application/json');
1455  $request = new Request("POST", new Uri("HTTP", "localhost"),
1456  $requestHeaders, [], [], $reqBody);
1457 
1458  $this->expectException(HttpForbiddenException::class);
1459  $this->expectExceptionMessage(
1460  "You do not have write permission on this upload.");
1461  $this->uploadController->setMainLicense($request, new ResponseHelper(), ['id' => $uploadId]);
1462  }
1463 
1469  public function testRemoveMainLicense()
1470  {
1471  $uploadId = 3;
1472  $licenseId = 1;
1473  $shortName = "MIT";
1474  $license = new License($licenseId, $shortName, "MIT License", "risk", "texts", [],
1475  'type', 1);
1476  $licenseIds[$licenseId] = $licenseId;
1477 
1478  $this->uploadDao->shouldReceive('isAccessible')
1479  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1480  $this->uploadDao->shouldReceive('isEditable')
1481  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1482  $this->dbHelper->shouldReceive('doesIdExist')
1483  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1484  $this->dbHelper->shouldReceive('doesIdExist')
1485  ->withArgs(["license_ref", "rf_pk", $licenseId])->andReturn(true);
1486  $this->clearingDao->shouldReceive('getMainLicenseIds')->withArgs([$uploadId, $this->groupId])->andReturn($licenseIds);
1487 
1488  $this->clearingDao->shouldReceive('removeMainLicense')->withArgs([$uploadId, $this->groupId, $licenseId])->andReturn(null);
1489  $this->licenseDao->shouldReceive('getLicenseByShortName')
1490  ->withArgs([$shortName, $this->groupId])->andReturn($license);
1491 
1492  $info = new Info(200, "Main license removed successfully.", InfoType::INFO);
1493  $expectedResponse = (new ResponseHelper())->withJson($info->getArray(),
1494  $info->getCode());
1495  $actualResponse = $this->uploadController->removeMainLicense(null,
1496  new ResponseHelper(), ['id' => $uploadId, 'shortName' => $shortName]);
1497  $this->assertEquals($expectedResponse->getStatusCode(),
1498  $actualResponse->getStatusCode());
1499  $this->assertEquals($this->getResponseJson($expectedResponse),
1500  $this->getResponseJson($actualResponse));
1501  }
1502 
1509  {
1510  $uploadId = 3;
1511  $shortName = "MIT";
1512  $this->uploadDao->shouldReceive('isAccessible')
1513  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1514  $this->uploadDao->shouldReceive('isEditable')
1515  ->withArgs([$uploadId, $this->groupId])->andReturn(false);
1516  $this->dbHelper->shouldReceive('doesIdExist')
1517  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1518 
1519  $this->expectException(HttpForbiddenException::class);
1520  $this->expectExceptionMessage(
1521  "You do not have write permission on this upload.");
1522  $this->uploadController->removeMainLicense(null, new ResponseHelper(),
1523  ['id' => $uploadId, 'shortName' => $shortName]);
1524  }
1525 
1532  {
1533  $uploadId = 3;
1534  $this->uploadDao->shouldReceive('isAccessible')
1535  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1536  $this->dbHelper->shouldReceive('doesIdExist')
1537  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1538  $this->uploadDao->shouldReceive("getUploadtreeTableName")->withArgs([$uploadId])->andReturn("uploadtree");
1539  $this->uploadDao->shouldReceive("getGlobalDecisionSettingsFromInfo")->andReturn(false);
1540  $this->agentDao->shouldReceive("arsTableExists")->andReturn(true);
1541  $this->agentDao->shouldReceive("getSuccessfulAgentEntries")->andReturn([['agent_id' => 1, 'agent_rev' => 1]]);
1542  $this->agentDao->shouldReceive("getCurrentAgentRef")->andReturn(new AgentRef(1, "agent", 1));
1543  $this->dbManager->shouldReceive("getSingleRow")
1544  ->withArgs([M::any(), [], 'no_license_uploadtree' . $uploadId])
1545  ->andReturn(['count' => 1]);
1546  $this->dbManager->shouldReceive("getSingleRow")
1547  ->withArgs([M::any(), [], 'already_cleared_uploadtree' . $uploadId])
1548  ->andReturn(['count' => 0]);
1549  $this->licenseDao->shouldReceive('getLicenseByShortName')
1550  ->withArgs(['No_license_found'])->andReturn(null);
1551  $this->licenseDao->shouldReceive('getLicenseByShortName')
1552  ->withArgs(['Void'])->andReturn(null);
1553  $res = [
1554  "totalFilesOfInterest" => 1,
1555  "totalFilesCleared" => 1,
1556  ];
1557  $expectedResponse = (new ResponseHelper())->withJson($res, 200);
1558  $actualResponse = $this->uploadController->getClearingProgressInfo(null,
1559  new ResponseHelper(), ['id' => $uploadId]);
1560  $this->assertEquals($expectedResponse->getStatusCode(),
1561  $actualResponse->getStatusCode());
1562  $this->assertEquals($this->getResponseJson($expectedResponse),
1563  $this->getResponseJson($actualResponse));
1564  }
1570  public function testGetReuseReportSummary()
1571  {
1572  $uploadId = 2;
1573  $reuseReportSummary = [
1574  'declearedLicense' => "",
1575  'clearedLicense' => "MIT, BSD-3-Clause",
1576  'usedLicense' => "",
1577  'unusedLicense' => "",
1578  'missingLicense' => "MIT, BSD-3-Clause",
1579  ];
1580  $this->uploadDao->shouldReceive('isAccessible')
1581  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1582  $this->dbHelper->shouldReceive('doesIdExist')
1583  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1584  $this->reuseReportProcess->shouldReceive('getReuseSummary')
1585  ->withArgs([$uploadId])->andReturn($reuseReportSummary);
1586 
1587  $expectedResponse = (new ResponseHelper())->withJson($reuseReportSummary,
1588  200);
1589  $actualResponse = $this->uploadController->getReuseReportSummary(
1590  null, new ResponseHelper(), ['id' => $uploadId]);
1591  $this->assertEquals($expectedResponse->getStatusCode(),
1592  $actualResponse->getStatusCode());
1593  $this->assertEquals($this->getResponseJson($expectedResponse),
1594  $this->getResponseJson($actualResponse));
1595  }
1596 
1597 
1606  {
1607  $publicPerm = 0;
1608  $uploadId = 2;
1609 
1610  $this->uploadDao->shouldReceive('isAccessible')
1611  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1612  $this->dbHelper->shouldReceive('doesIdExist')
1613  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1614 
1615  $this->restHelper->shouldReceive('getUploadPermissionDao')->andReturn($this->uploadPermissionDao);
1616  $this->uploadPermissionDao->shouldReceive("getPublicPermission")->withAnyArgs()->andReturn($publicPerm);
1617  $this->uploadPermissionDao->shouldReceive("getPermissionGroups")->withAnyArgs()->andReturn([]);
1618  $this->restHelper->shouldReceive("getGroupId")->andReturn($this->groupId);
1619  $this->restHelper->shouldReceive("getUserId")->andReturn($this->userId);
1620  $this->restHelper->shouldReceive("getUploadDao")->andReturn($this->uploadDao);
1621 
1622  $body = $this->streamFactory->createStream();
1623  $requestHeaders = new Headers();
1624  $request = new Request("PATCH", new Uri("HTTP", "localhost"),
1625  $requestHeaders, [], [], $body);
1626  $response = new ResponseHelper();
1627  $actualResponse = $this->uploadController->getGroupsWithPermissions($request,$response,["id"=>$this->groupId]);
1628  $this->assertEquals(200,$actualResponse->getStatusCode());
1629 
1630  }
1631 
1639  {
1640  $uploadId = 2;
1641  $this->dbHelper->shouldReceive('doesIdExist')->withAnyArgs()->andReturn(false);
1642 
1643  $this->dbHelper->shouldReceive('doesIdExist')
1644  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(false);
1645  $body = $this->streamFactory->createStream();
1646  $requestHeaders = new Headers();
1647  $request = new Request("PATCH", new Uri("HTTP", "localhost"),
1648  $requestHeaders, [], [], $body);
1649  $response = new ResponseHelper();
1650  $this->expectException(HttpNotFoundException::class);
1651  $this->uploadController->getGroupsWithPermissions($request,$response,["id"=>$this->groupId]);
1652 
1653  }
1654 
1662  {
1663  $this->dbHelper->shouldReceive('doesIdExist')->withAnyArgs()->andReturn(true);
1664  $this->uploadDao->shouldReceive('isAccessible')->withAnyArgs()->andReturn(false);
1665 
1666  $body = $this->streamFactory->createStream();
1667  $requestHeaders = new Headers();
1668  $request = new Request("PATCH", new Uri("HTTP", "localhost"),
1669  $requestHeaders, [], [], $body);
1670  $response = new ResponseHelper();
1671  $this->expectException(HttpForbiddenException::class);
1672  $this->uploadController->getGroupsWithPermissions($request,$response,["id"=>$this->groupId]);
1673 
1674  }
1675 
1680  public function testGetAllAgents()
1681  {
1682  $groupId = 2;
1683  $uploadId = 3;
1684  $agentsRun = [
1685  ["uploadId" => $uploadId, 'agentName' => 'nomos', 'successfulAgents'=> [], 'currentAgentId' => 2, 'isAgentRunning' => false],
1686  ["uploadId" => $uploadId,'agentName' => 'monk', "successfulAgents" => [], 'currentAgentId' => 3, 'isAgentRunning' => false]
1687  ];
1688 
1689  $this->restHelper->shouldReceive("getGroupId")->andReturn($groupId);
1690  $this->agentDao->shouldReceive("getCurrentAgentRef")->withAnyArgs()->andReturn(new AgentRef($uploadId,"momoa",45));
1691 
1692  $this->uploadDao->shouldReceive("isAccessible")->withAnyArgs()->andReturn(true);
1693  $this->dbHelper->shouldReceive('doesIdExist')->withAnyArgs()->andReturn(true);
1694  $scanJobProxy = M::mock('overload:Fossology\Lib\Proxy\ScanJobProxy');
1695  $scanJobProxy->shouldReceive('createAgentStatus')
1696  ->withAnyArgs()
1697  ->andReturn($agentsRun);
1698  $this->agentDao->shouldReceive("arsTableExists")->withAnyArgs()->andReturn(true);
1699  $this->agentDao->shouldReceive("getRunningAgentIds")->withAnyArgs()->andReturn([$agentsRun]);
1700  $this->agentDao->shouldReceive("getSuccessfulAgentEntries")->withAnyArgs()->andReturn([]);
1701 
1702  $body = $this->streamFactory->createStream();
1703  $requestHeaders = new Headers();
1704  $request = new Request("POST", new Uri("HTTP", "localhost"),
1705  $requestHeaders, [], [], $body);
1706 
1707  $actualResponse = $this->uploadController->getAllAgents($request, new ResponseHelper(),["id"=>$uploadId]);
1708  $this->assertEquals(200,$actualResponse->getStatusCode());
1709 
1710  }
1718  {
1719  $uploadId = 3;
1720  $this->dbHelper->shouldReceive('doesIdExist')->withAnyArgs()->andReturn(false);
1721  $this->dbHelper->shouldReceive('doesIdExist')
1722  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(false);
1723 
1724  $this->expectException(HttpNotFoundException::class);
1725  $this->uploadController->getAllAgents(null, new ResponseHelper(),["id"=>$uploadId]);
1726 
1727  }
1735  {
1736  $uploadId = 3;
1737 
1738  $this->uploadDao->shouldReceive('isAccessible')
1739  ->withArgs([$uploadId, $this->groupId])->andReturn(false);
1740  $this->dbHelper->shouldReceive('doesIdExist')
1741  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1742 
1743  $this->expectException(HttpForbiddenException::class);
1744  $this->uploadController->getAllAgents(null, new ResponseHelper(),["id"=>$uploadId]);
1745 
1746  }
1747 
1754  public function testGetEditedLicenses()
1755  {
1756  $groupId = 2;
1757  $uploadId = 3;
1758  $uploadName = "Testing name";
1759  $this->uploadDao->shouldReceive('getParentItemBounds')
1760  ->withAnyArgs()->andReturn($this->getUploadBounds($uploadId));
1761  $this->uploadDao->shouldReceive("isAccessible")->withAnyArgs()->andReturn(true);
1762  $this->dbHelper->shouldReceive('doesIdExist')->withAnyArgs()->andReturn(true);
1763  $this->restHelper->shouldReceive('getUploadDao')->andReturn($this->uploadDao);
1764  $this->uploadDao->shouldReceive("getUploadtreeTableName")->withArgs([$uploadId])->andReturn($uploadName);
1765  $this->clearingDao->shouldReceive("getClearedLicenseIdAndMultiplicities")->withAnyArgs()->andReturn([]);
1766 
1767  $actualResponse = $this->uploadController->getEditedLicenses(null,new ResponseHelper(),["id"=>$uploadId]);
1768  $this->assertEquals(200,$actualResponse->getStatusCode());
1769  }
1770 
1778  {
1779  $groupId = 2;
1780  $uploadId = 3;
1781  $this->uploadDao->shouldReceive('getParentItemBounds')
1782  ->withAnyArgs()->andReturn($this->getUploadBounds($uploadId));
1783  $this->uploadDao->shouldReceive("isAccessible")->withAnyArgs()->andReturn(true);
1784  $this->dbHelper->shouldReceive('doesIdExist')->withAnyArgs()->andReturn(false);
1785 
1786  $this->expectException(HttpNotFoundException::class);
1787  $this->uploadController->getEditedLicenses(null,new ResponseHelper(),["id"=>$groupId]);
1788  }
1789 
1797  {
1798  $groupId = 2;
1799  $uploadId = 3;
1800  $this->uploadDao->shouldReceive('getParentItemBounds')
1801  ->withAnyArgs()->andReturn($this->getUploadBounds($uploadId));
1802  $this->uploadDao->shouldReceive("isAccessible")->withAnyArgs()->andReturn(false);
1803  $this->dbHelper->shouldReceive('doesIdExist')->withAnyArgs()->andReturn(true);
1804 
1805  $this->expectException(HttpForbiddenException::class);
1806  $this->uploadController->getEditedLicenses(null,new ResponseHelper(),["id"=>$groupId]);
1807  }
1808 
1816  public function testGetScannedLicenses()
1817  {
1818  $uploadId = 3;
1819  $agentsRun = [];
1820 
1821  $this->uploadDao->shouldReceive('isAccessible')
1822  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1823  $this->dbHelper->shouldReceive('doesIdExist')
1824  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1825  $this->restHelper->shouldReceive('getUploadDao')->andReturn($this->uploadDao);
1826  $this->uploadDao->shouldReceive("getUploadtreeTableName")
1827  ->withArgs([$uploadId])->andReturn("uploadtree");
1828  $this->uploadDao->shouldReceive('getParentItemBounds')
1829  ->withAnyArgs()->andReturn($this->getUploadBounds($uploadId));
1830 
1831  $scanJobProxy = M::mock('overload:Fossology\Lib\Proxy\ScanJobProxy');
1832  $scanJobProxy->shouldReceive('createAgentStatus')->withAnyArgs()->andReturn($agentsRun);
1833  $scanJobProxy->shouldReceive('getLatestSuccessfulAgentIds')->andReturn([2]);
1834 
1835  $histogram = [
1836  'GPL-2.0-only' => [
1837  'rf_pk' => 2,
1838  'count' => 10,
1839  'unique' => 5,
1840  'spdx_id' => 'GPL-2.0-only',
1841  ],
1842  ];
1843  $this->licenseDao->shouldReceive('getLicenseHistogram')
1844  ->withAnyArgs()->andReturn($histogram);
1845 
1846  $body = $this->streamFactory->createStream();
1847  $request = new Request("GET", new Uri("HTTP", "localhost"),
1848  new Headers(), [], [], $body);
1849 
1850  $actualResponse = $this->uploadController->getScannedLicenses(
1851  $request, new ResponseHelper(), ["id" => $uploadId]);
1852 
1853  $this->assertEquals(200, $actualResponse->getStatusCode());
1854  $responseBody = $this->getResponseJson($actualResponse);
1855  $this->assertCount(1, $responseBody);
1856  $this->assertEquals(2, $responseBody[0]['id']);
1857  $this->assertEquals('GPL-2.0-only', $responseBody[0]['shortname']);
1858  $this->assertEquals(10, $responseBody[0]['occurence']);
1859  $this->assertEquals(5, $responseBody[0]['unique']);
1860  }
1861 
1871  {
1872  $uploadId = 3;
1873  $agentsRun = [];
1874 
1875  $this->uploadDao->shouldReceive('isAccessible')
1876  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1877  $this->dbHelper->shouldReceive('doesIdExist')
1878  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1879  $this->restHelper->shouldReceive('getUploadDao')->andReturn($this->uploadDao);
1880  $this->uploadDao->shouldReceive("getUploadtreeTableName")
1881  ->withArgs([$uploadId])->andReturn("uploadtree");
1882  $this->uploadDao->shouldReceive('getParentItemBounds')
1883  ->withAnyArgs()->andReturn($this->getUploadBounds($uploadId));
1884 
1885  $scanJobProxy = M::mock('overload:Fossology\Lib\Proxy\ScanJobProxy');
1886  $scanJobProxy->shouldReceive('createAgentStatus')->withAnyArgs()->andReturn($agentsRun);
1887  $scanJobProxy->shouldReceive('getLatestSuccessfulAgentIds')->andReturn([2]);
1888 
1889  $histogram = [
1890  'MIT' => [
1891  'rf_pk' => 5,
1892  'count' => 3,
1893  'unique' => 2,
1894  'spdx_id' => 'MIT',
1895  ],
1896  LicenseDao::NO_LICENSE_FOUND => [
1897  'rf_pk' => 0,
1898  'count' => 7,
1899  'unique' => 4,
1900  'spdx_id' => LicenseDao::NO_LICENSE_FOUND,
1901  ],
1902  ];
1903  $this->licenseDao->shouldReceive('getLicenseHistogram')
1904  ->withAnyArgs()->andReturn($histogram);
1905 
1906  $body = $this->streamFactory->createStream();
1907  $request = new Request("GET", new Uri("HTTP", "localhost"),
1908  new Headers(), [], [], $body);
1909 
1910  $actualResponse = $this->uploadController->getScannedLicenses(
1911  $request, new ResponseHelper(), ["id" => $uploadId]);
1912 
1913  $this->assertEquals(200, $actualResponse->getStatusCode());
1914  $responseBody = $this->getResponseJson($actualResponse);
1915  $this->assertCount(2, $responseBody);
1916 
1917  $noLicenseEntry = array_values(array_filter($responseBody, function ($e) {
1918  return $e['shortname'] === LicenseDao::NO_LICENSE_FOUND;
1919  }))[0];
1920  $this->assertEquals(0, $noLicenseEntry['id']);
1921  $this->assertEquals(7, $noLicenseEntry['occurence']);
1922  }
1923 
1931  {
1932  $uploadId = 3;
1933  $this->uploadDao->shouldReceive('isAccessible')
1934  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1935  $this->dbHelper->shouldReceive('doesIdExist')
1936  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(false);
1937 
1938  $body = $this->streamFactory->createStream();
1939  $requestHeaders = new Headers();
1940  $request = new Request("GET", new Uri("HTTP", "localhost"),
1941  $requestHeaders, [], [], $body);
1942 
1943  $this->expectException(HttpNotFoundException::class);
1944  $this->uploadController->getScannedLicenses($request,new ResponseHelper(),["id"=>$uploadId]);
1945  }
1946 
1954  public function testAgentsRevision()
1955  {
1956  $uploadId = 3;
1957  $agentsRun = [
1958  ["uploadId" => $uploadId, 'agentName' => 'nomos', 'successfulAgents'=> [], 'currentAgentId' => 2, 'isAgentRunning' => false],
1959  ["uploadId" => $uploadId,'agentName' => 'monk', "successfulAgents" => [], 'currentAgentId' => 3, 'isAgentRunning' => false]
1960  ];
1961  $agent = new Agent([],$uploadId,"MOMO agent",45,"4.4.0.37.072417",false,"");
1962 
1963  $this->uploadDao->shouldReceive('isAccessible')
1964  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
1965  $this->dbHelper->shouldReceive('doesIdExist')
1966  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
1967  $scanJobProxy = M::mock('overload:Fossology\Lib\Proxy\ScanJobProxy');
1968 
1969  $scanJobProxy->shouldReceive('createAgentStatus')
1970  ->withAnyArgs()
1971  ->andReturn($agentsRun);
1972  $scanJobProxy->shouldReceive("getSuccessfulAgents")->andReturn($agent);
1973  $this->agentDao->shouldReceive("arsTableExists")->withAnyArgs()->andReturn(true);
1974  $this->agentDao->shouldReceive("getSuccessfulAgentEntries")->withAnyArgs()->andReturn([]);
1975  $this->agentDao->shouldReceive("getRunningAgentIds")->withAnyArgs()->andReturn([$agent]);
1976 
1977  $actualResponse = $this->uploadController->getAgentsRevision(null,new ResponseHelper(),["id"=>$uploadId]);
1978  $this->assertEquals(200,$actualResponse->getStatusCode());
1979  }
1980 
1987  public function testAgentsRevisionNotFound()
1988  {
1989  $uploadId = 3;
1990 
1991  $this->dbHelper->shouldReceive('doesIdExist')
1992  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(false);
1993 
1994  $this->expectException(HttpNotFoundException::class);
1995  $this->uploadController->getAgentsRevision(null,new ResponseHelper(),["id"=>$uploadId]);
1996  }
1997 
2005  {
2006  $uploadId = 3;
2007 
2008  $this->uploadDao->shouldReceive('isAccessible')
2009  ->withArgs([$uploadId, $this->groupId])->andReturn(false);
2010  $this->dbHelper->shouldReceive('doesIdExist')
2011  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
2012 
2013  $this->expectException(HttpForbiddenException::class);
2014  $this->uploadController->getAgentsRevision(null,new ResponseHelper(),["id"=>$uploadId]);
2015  }
2016 
2023  public function testGetTopItem()
2024  {
2025  $uploadId = 2;
2026 
2027  $this->dbHelper->shouldReceive('doesIdExist')
2028  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
2029  $this->uploadDao->shouldReceive('getParentItemBounds')
2030  ->withAnyArgs()->andReturn($this->getUploadBounds($uploadId));
2031  $this->uploadDao->shouldReceive("getUploadtreeTableName")->withArgs([$uploadId])->andReturn("uploadtree");
2032 
2033  $actualResponse = $this->uploadController->getTopItem(null,new ResponseHelper(),["id"=>$uploadId]);
2034  $itemTreeBounds = $this->getUploadBounds($uploadId);
2035  $info = new Info(200, $itemTreeBounds->getItemId(), InfoType::INFO);
2036  $expectedResponse = (new ResponseHelper())->withJson($info->getArray(), $info->getCode());
2037 
2038  $this->assertEquals($expectedResponse->getStatusCode(),$actualResponse->getStatusCode());
2039 
2040  }
2041 
2049  {
2050  $uploadId = 2;
2051 
2052  $this->dbHelper->shouldReceive('doesIdExist')
2053  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(false);
2054 
2055  $actualResponse = $this->uploadController->getTopItem(null,new ResponseHelper(),["id"=>$uploadId]);
2056  $info = new Info(404, "Upload does not exist", InfoType::ERROR);
2057  $expectedResponse = (new ResponseHelper())->withJson($info->getArray(), $info->getCode());
2058  $this->assertEquals($expectedResponse->getStatusCode(), $actualResponse->getStatusCode());
2059 
2060  }
2061 
2062 
2071  {
2072  $uploadId = 12;
2073 
2074  $this->dbHelper->shouldReceive('doesIdExist')
2075  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
2076  $this->uploadDao->shouldReceive('getParentItemBounds')
2077  ->withAnyArgs()->andReturn($this->getUploadBounds($uploadId));
2078  $this->uploadDao->shouldReceive("getUploadtreeTableName")->withArgs([$uploadId])->andReturn("uploadtree");
2079 
2080  $actualResponse = $this->uploadController->getTopItem(null,new ResponseHelper(),["id"=>$uploadId]);
2081 
2082 
2083  $this->assertEquals(500,$actualResponse->getStatusCode());
2084 
2085  }
2086 
2093  {
2094  $uploadId = 5;
2095  $this->dbHelper->shouldReceive('doesIdExist')
2096  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
2097  $this->uploadDao->shouldReceive('isAccessible')
2098  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
2099  $this->uploadDao->shouldReceive('getParentItemBounds')
2100  ->withArgs([$uploadId])->andReturn(false);
2101  $this->expectException(HttpServiceUnavailableException::class);
2102 
2103  $this->uploadController->uploadDownload(null, new ResponseHelper(),
2104  ['id' => $uploadId]);
2105  }
2106 
2115  {
2116  $uploadId = 2;
2117  $uploadTreeTableName = "uploadtree";
2118  $itemTreeBounds = $this->getUploadBounds($uploadId);
2119  $this->dbHelper->shouldReceive('doesIdExist')
2120  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
2121  $this->uploadDao->shouldReceive('isAccessible')
2122  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
2123  $this->uploadDao->shouldReceive('getParentItemBounds')
2124  ->withAnyArgs()->andReturn($itemTreeBounds);
2125  $this->uploadDao->shouldReceive('getUploadtreeTableName')
2126  ->withArgs([$uploadId])->andReturn($uploadTreeTableName);
2127  $this->dbManager->shouldReceive('getSingleRow')
2128  ->withArgs([M::on(function ($sql) use ($uploadTreeTableName) {
2129  return strpos($sql, "FROM $uploadTreeTableName WHERE") !== false;
2130  }), [$itemTreeBounds->getItemId()], M::any()])
2131  ->once()->andReturn(false);
2132  $this->expectException(HttpNotFoundException::class);
2133 
2134  $this->uploadController->uploadDownload(null, new ResponseHelper(),
2135  ['id' => $uploadId]);
2136  }
2137 }
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
Provides helper methods to access database for REST api.
Definition: DbHelper.php:38
Override Slim response for withJson function.
Provides various DAO helper functions for REST api.
Definition: RestHelper.php:32
Hash model holding information about file like checksums and size.
Definition: Hash.php:18
Different type of infos provided by REST.
Definition: InfoType.php:16
Info model to contain general error and return values.
Definition: Info.php:19
Model class to hold Upload info.
Definition: Upload.php:17
fo_dbManager * dbManager
fo_dbManager object
Definition: process.c:16