FOSSology  4.4.0
Open Source License Compliance by Open Source Software
UploadTreeControllerTest.php
Go to the documentation of this file.
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2023 Samuel Dushimimana <dushsam100@gmail.com>
4 
5  SPDX-License-Identifier: GPL-2.0-only
6 */
7 
13 namespace {
14  if (!function_exists('RepPathItem')) {
15  function RepPathItem($Item, $Repo = "files")
16  {
17  return dirname(__DIR__) . "/tests.xml";
18  }
19  }
20 }
21 
23 
24  use AjaxClearingView;
26  use ClearingView;
58  use Mockery as M;
59  use Psr\Http\Message\ServerRequestInterface;
60  use Slim\Psr7\Factory\StreamFactory;
61  use Slim\Psr7\Headers;
62  use Slim\Psr7\Request;
63  use Slim\Psr7\Response;
64  use Slim\Psr7\Uri;
65  use Symfony\Component\HttpFoundation\JsonResponse;
66 
71  class UploadTreeControllerTest extends \PHPUnit\Framework\TestCase
72  {
77  private $dbHelper;
78 
83  private $dbManager;
84 
89  private $restHelper;
90 
96 
101  private $uploadDao;
102 
107  private $licenseDao;
108 
114 
119  private $highlightDao;
120 
126 
131  private $streamFactory;
132 
138 
144 
150 
156 
161  private $decisionTypes;
162 
168 
173 
178  protected function setUp(): void
179  {
180  global $container;
181  $this->userId = 2;
182  $this->groupId = 2;
183  $container = M::mock('ContainerBuilder');
184  $this->dbHelper = M::mock(DbHelper::class);
185  $this->dbManager = M::mock(DbManager::class);
186  $this->restHelper = M::mock(RestHelper::class);
187  $this->uploadDao = M::mock(UploadDao::class);
188  $this->decisionTypes = M::mock(DecisionTypes::class);
189  $this->licenseDao = M::mock(LicenseDao::class);
190  $this->clearingDecisionEventProcessor = M::mock(ClearingDecisionProcessor::class);
191  $this->viewFilePlugin = M::mock('ui_view');
192  $this->viewLicensePlugin = M::mock(ClearingView::class);
193  $this->clearingDao = M::mock(ClearingDao::class);
194  $this->decisionScopes = M::mock(DecisionScopes::class);
195  $this->highlightDao = M::mock(HighlightDao::class);
196  $this->clearingEventTypes = M::mock(ClearingEventTypes::class);
197  $this->itemTreeBoundsMock = M::mock(ItemTreeBounds::class);
198  $this->concludeLicensePlugin = M::mock(AjaxClearingView::class);
199  $this->licenseDao = M::mock(LicenseDao::class);
200  $this->changeLicenseBulk = M::mock(ChangeLicenseBulk::class);
201  $this->licenseDao = M::mock(LicenseDao::class);
202 
203  $this->restHelper->shouldReceive('getPlugin')
204  ->withArgs(array('view'))->andReturn($this->viewFilePlugin);
205  $this->restHelper->shouldReceive('getPlugin')
206  ->withArgs(array('view-license'))->andReturn($this->viewLicensePlugin);
207  $this->restHelper->shouldReceive('getPlugin')
208  ->withArgs(array('conclude-license'))->andReturn($this->concludeLicensePlugin);
209  $this->restHelper->shouldReceive('getPlugin')
210  ->withArgs(array('change-license-bulk'))->andReturn($this->changeLicenseBulk);
211 
212  $this->dbManager->shouldReceive('getSingleRow')
213  ->withArgs([M::any(), [$this->groupId, UploadStatus::OPEN,
214  Auth::PERM_READ]]);
215  $this->dbHelper->shouldReceive('getDbManager')->andReturn($this->dbManager);
216  $this->restHelper->shouldReceive('getDbHelper')->andReturn($this->dbHelper);
217  $this->restHelper->shouldReceive('getGroupId')->andReturn($this->groupId);
218  $this->restHelper->shouldReceive('getUserId')->andReturn($this->userId);
219  $this->restHelper->shouldReceive('getUploadDao')
220  ->andReturn($this->uploadDao);
221  $container->shouldReceive('get')->withArgs(array(
222  'helper.restHelper'))->andReturn($this->restHelper);
223  $container->shouldReceive('get')->withArgs(['decision.types'])->andReturn($this->decisionTypes);
224  $container->shouldReceive('get')->withArgs(['dao.clearing'])->andReturn($this->clearingDao);
225  $container->shouldReceive('get')->withArgs(['dao.license'])->andReturn($this->licenseDao);
226 
227  $container->shouldReceive('get')->withArgs(['businessrules.clearing_decision_processor'])->andReturn($this->clearingDecisionEventProcessor);
228  $container->shouldReceive('get')->withArgs(['dao.highlight'])->andReturn($this->highlightDao);
229  $container->shouldReceive('get')->withArgs(['dao.license'])->andReturn($this->licenseDao);
230  $this->uploadTreeController = new UploadTreeController($container);
231  $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
232  $this->streamFactory = new StreamFactory();
233  }
234 
241  private function getResponseJson($response)
242  {
243  $response->getBody()->seek(0);
244  return json_decode($response->getBody()->getContents(), true);
245  }
246 
252  public function testViewLicenseFile()
253  {
254  $upload_pk = 1;
255  $item_pk = 200;
256  $expectedContent = file_get_contents(dirname(__DIR__) . "/tests.xml");
257 
258  $this->uploadDao->shouldReceive('isAccessible')
259  ->withArgs([$upload_pk, $this->groupId])->andReturn(true);
260  $this->dbHelper->shouldReceive('doesIdExist')
261  ->withArgs(["upload", "upload_pk", $upload_pk])->andReturn(true);
262  $this->uploadDao->shouldReceive("getUploadtreeTableName")->withArgs([$upload_pk])->andReturn("uploadtree");
263  $this->dbHelper->shouldReceive('doesIdExist')
264  ->withArgs(["uploadtree", "uploadtree_pk", $item_pk])->andReturn(true);
265 
266  $this->viewFilePlugin->shouldReceive('getText')->withArgs([M::any(), 0, 0, -1, null, false, true])->andReturn($expectedContent);
267 
268  $expectedResponse = new ResponseHelper();
269  $expectedResponse->getBody()->write($expectedContent);
270  $actualResponse = $this->uploadTreeController->viewLicenseFile(null, new ResponseHelper(), ['id' => $upload_pk, 'itemId' => $item_pk]);
271  $this->assertEquals($expectedResponse->getStatusCode(), $actualResponse->getStatusCode());
272  $this->assertEquals($expectedResponse->getBody()->getContents(), $actualResponse->getBody()->getContents());
273  }
274 
275 
282  {
283  $upload_pk = 1;
284  $item_pk = 200;
285  $rq = [
286  "decisionType" => 3,
287  "globalDecision" => false,
288  ];
289  $dummyDecisionTypes = array_map(function ($i) {
290  return $i;
291  }, range(1, 7));
292 
293  $this->decisionTypes->shouldReceive('getMap')
294  ->andReturn($dummyDecisionTypes);
295  $this->uploadDao->shouldReceive("getUploadtreeTableName")->withArgs([$upload_pk])->andReturn("uploadtree");
296  $this->uploadDao->shouldReceive('isAccessible')
297  ->withArgs([$upload_pk, $this->groupId])->andReturn(true);
298  $this->dbHelper->shouldReceive('doesIdExist')
299  ->withArgs(["upload", "upload_pk", $upload_pk])->andReturn(true);
300  $this->dbHelper->shouldReceive('doesIdExist')
301  ->withArgs(["uploadtree", "uploadtree_pk", $item_pk])->andReturn(true);
302 
303 
304  $this->viewLicensePlugin->shouldReceive('updateLastItem')->withArgs([2, 2, $item_pk, $item_pk]);
305 
306  $info = new Info(200, "Successfully set decision", InfoType::INFO);
307 
308  $expectedResponse = (new ResponseHelper())->withJson($info->getArray(), $info->getCode());
309  $reqBody = $this->streamFactory->createStream(json_encode(
310  $rq
311  ));
312  $requestHeaders = new Headers();
313  $requestHeaders->setHeader('Content-Type', 'application/json');
314  $request = new Request("PUT", new Uri("HTTP", "localhost"),
315  $requestHeaders, [], [], $reqBody);
316  $actualResponse = $this->uploadTreeController->setClearingDecision($request, new ResponseHelper(), ['id' => $upload_pk, 'itemId' => $item_pk]);
317 
318  $this->assertEquals($expectedResponse->getStatusCode(),
319  $actualResponse->getStatusCode());
320  $this->assertEquals($this->getResponseJson($expectedResponse),
321  $this->getResponseJson($actualResponse));
322  }
323 
330  {
331  $upload_pk = 1;
332  $item_pk = 200;
333  $rq = [
334  "decisionType" => 40,
335  "globalDecision" => false,
336  ];
337  $dummyDecisionTypes = array_map(function ($i) {
338  return $i;
339  }, range(1, 7));
340 
341  $this->decisionTypes->shouldReceive('getMap')
342  ->andReturn($dummyDecisionTypes);
343  $this->uploadDao->shouldReceive("getUploadtreeTableName")->withArgs([$upload_pk])->andReturn("uploadtree");
344  $this->uploadDao->shouldReceive('isAccessible')
345  ->withArgs([$upload_pk, $this->groupId])->andReturn(true);
346  $this->dbHelper->shouldReceive('doesIdExist')
347  ->withArgs(["upload", "upload_pk", $upload_pk])->andReturn(true);
348  $this->dbHelper->shouldReceive('doesIdExist')
349  ->withArgs(["uploadtree", "uploadtree_pk", $item_pk])->andReturn(true);
350 
351  $this->viewLicensePlugin->shouldReceive('updateLastItem')->withArgs([2, 2, $item_pk, $item_pk]);
352 
353  $reqBody = $this->streamFactory->createStream(json_encode(
354  $rq
355  ));
356  $requestHeaders = new Headers();
357  $requestHeaders->setHeader('Content-Type', 'application/json');
358  $request = new Request("PUT", new Uri("HTTP", "localhost"),
359  $requestHeaders, [], [], $reqBody);
360  $this->expectException(HttpBadRequestException::class);
361 
362  $this->uploadTreeController->setClearingDecision($request,
363  new ResponseHelper(), ['id' => $upload_pk, 'itemId' => $item_pk]);
364  }
370  public function testGetNextPreviousItem()
371  {
372  $itemId = 200;
373  $uploadId = 1;
374  $nextItemId = 915;
375  $prevItemId = 109;
376  $itemTreeBounds1 = new ItemTreeBounds($nextItemId, 'uploadtree_a', $uploadId, 1, 2);
377  $itemTreeBounds2 = new ItemTreeBounds($prevItemId, 'uploadtree_a', $uploadId, 1, 2);
378 
379  $item1 = new Item($itemTreeBounds1, 1, 1, 1, "fileName");
380  $item2 = new Item($itemTreeBounds2, 1, 1, 1, "fileName");
381 
382  $result = array(
383  "prevItemId" => $prevItemId,
384  "nextItemId" => $nextItemId
385  );
386  $options = array('skipThese' => "", 'groupId' => $this->groupId);
387 
388  $this->uploadDao->shouldReceive('isAccessible')
389  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
390  $this->dbHelper->shouldReceive('doesIdExist')
391  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
392  $this->uploadDao->shouldReceive('getUploadtreeTableName')->withArgs([$uploadId])->andReturn("uploadtree");
393  $this->dbHelper->shouldReceive('doesIdExist')
394  ->withArgs(["uploadtree", "uploadtree_pk", $itemId])->andReturn(true);
395 
396  $this->uploadDao->shouldReceive('getNextItem')->withArgs([$uploadId, $itemId, $options])->andReturn($item1);
397  $this->uploadDao->shouldReceive('getPreviousItem')->withArgs([$uploadId, $itemId, $options])->andReturn($item2);
398  $expectedResponse = (new ResponseHelper())->withJson($result, 200);
399  $queryParams = ['selection' => null];
400  $request = $this->getMockBuilder(ServerRequestInterface::class)
401  ->getMock();
402  $request->expects($this->any())
403  ->method('getQueryParams')
404  ->willReturn($queryParams);
405 
406  $actualResponse = $this->uploadTreeController->getNextPreviousItem($request, new ResponseHelper(), ['id' => $uploadId, 'itemId' => $itemId]);
407  $this->assertEquals($expectedResponse->getStatusCode(), $actualResponse->getStatusCode());
408  $this->assertEquals($this->getResponseJson($expectedResponse), $this->getResponseJson($actualResponse));
409  }
410 
417  {
418  $itemId = 200;
419  $uploadId = 1;
420  $nextItemId = 915;
421  $prevItemId = 109;
422  $itemTreeBounds1 = new ItemTreeBounds($nextItemId, 'uploadtree_a', $uploadId, 1, 2);
423  $itemTreeBounds2 = new ItemTreeBounds($prevItemId, 'uploadtree_a', $uploadId, 1, 2);
424 
425  $item1 = new Item($itemTreeBounds1, 1, 1, 1, "fileName");
426  $item2 = new Item($itemTreeBounds2, 1, 1, 1, "fileName");
427 
428  $options = array('skipThese' => "", 'groupId' => $this->groupId);
429 
430  $this->uploadDao->shouldReceive('isAccessible')
431  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
432  $this->dbHelper->shouldReceive('doesIdExist')
433  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
434  $this->uploadDao->shouldReceive('getUploadtreeTableName')->withArgs([$uploadId])->andReturn("uploadtree");
435  $this->dbHelper->shouldReceive('doesIdExist')
436  ->withArgs(["uploadtree", "uploadtree_pk", $itemId])->andReturn(true);
437 
438  $this->uploadDao->shouldReceive('getNextItem')->withArgs([$uploadId, $itemId, $options])->andReturn($item1);
439  $this->uploadDao->shouldReceive('getPreviousItem')->withArgs([$uploadId, $itemId, $options])->andReturn($item2);
440 
441  $queryParams = ['selection' => "invalidSelection"];
442  $request = $this->getMockBuilder(ServerRequestInterface::class)
443  ->getMock();
444  $request->expects($this->any())
445  ->method('getQueryParams')
446  ->willReturn($queryParams);
447  $this->expectException(HttpBadRequestException::class);
448 
449  $this->uploadTreeController->getNextPreviousItem($request,
450  new ResponseHelper(), ['id' => $uploadId, 'itemId' => $itemId]);
451  }
452 
458  public function testGetBulkHistory()
459  {
460  $itemId = 200;
461  $uploadId = 1;
462  $itemTreeBounds = new ItemTreeBounds($itemId, 'uploadtree', $uploadId, 1, 2);
463 
464  $res[] = array(
465  "bulkId" => 1,
466  "id" => 1,
467  "text" => "test",
468  "matched" => true,
469  "tried" => true,
470  "addedLicenses" => [],
471  "removedLicenses" => [],
472  );
473 
474  $obj = new BulkHistory(1, 1, "test", true, true, [], []);
475  $updatedRes[] = $obj->getArray();
476 
477  $this->uploadDao->shouldReceive('isAccessible')
478  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
479  $this->dbHelper->shouldReceive('doesIdExist')
480  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
481 
482  $this->uploadDao->shouldReceive('getUploadtreeTableName')->withArgs([$uploadId])->andReturn("uploadtree");
483  $this->dbHelper->shouldReceive('doesIdExist')
484  ->withArgs(["uploadtree", "uploadtree_pk", $itemId])->andReturn(true);
485 
486  $this->uploadDao->shouldReceive("getItemTreeBounds")
487  ->withArgs([$itemId, "uploadtree"])->andReturn($itemTreeBounds);
488 
489  $this->clearingDao->shouldReceive("getBulkHistory")
490  ->withArgs([$itemTreeBounds, $this->groupId])->andReturn($res);
491  $expectedResponse = (new ResponseHelper())->withJson($updatedRes, 200);
492  $actualResponse = $this->uploadTreeController->getBulkHistory(null, new ResponseHelper(), ['id' => $uploadId, 'itemId' => $itemId]);
493  $this->assertEquals($expectedResponse->getStatusCode(), $actualResponse->getStatusCode());
494  $this->assertEquals($this->getResponseJson($expectedResponse), $this->getResponseJson($actualResponse));
495  }
496 
502  public function testGetClearingHistory()
503  {
504  $itemId = 200;
505  $uploadId = 1;
506  $itemTreeBounds = new ItemTreeBounds($itemId, 'uploadtree_a', $uploadId, 1, 2);
507  $fileClearings[] = new ClearingDecision(1, 1, $itemId, 1, 1, 1, 3, 1, 1, [], 1, 1, 1);
508  $obj = new ClearingHistory(
509  date('Y-m-d', 1),
510  1,
511  "global",
512  "TO_BE_DISCUSSED",
513  [],
514  [],
515  );
516  $result[] = $obj->getArray();
517 
518  $this->uploadDao->shouldReceive('isAccessible')
519  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
520  $this->dbHelper->shouldReceive('doesIdExist')
521  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
522 
523  $this->uploadDao->shouldReceive('getUploadtreeTableName')->withArgs([$uploadId])->andReturn("uploadtree");
524  $this->dbHelper->shouldReceive('doesIdExist')
525  ->withArgs(["uploadtree", "uploadtree_pk", $itemId])->andReturn(true);
526 
527  $this->uploadDao->shouldReceive("getItemTreeBoundsFromUploadId")
528  ->withArgs([$itemId, $uploadId])->andReturn($itemTreeBounds);
529  $this->clearingDao->shouldReceive("getFileClearings")
530  ->withArgs([$itemTreeBounds, $this->groupId, false, true])->andReturn($fileClearings);
531  $this->decisionTypes->shouldReceive("getTypeName")
532  ->withArgs([$fileClearings[0]->getType()])->andReturn("test");
533  $this->decisionScopes->shouldReceive("getTypeName")->withArgs([$fileClearings[0]->getScope()])->andReturn("test");
534  $this->decisionTypes->shouldReceive("getConstantNameFromKey")
535  ->withArgs([$fileClearings[0]->getType()])->andReturn("TO_BE_DISCUSSED");
536  $expectedResponse = (new ResponseHelper())->withJson($result, 200);
537  $actualResponse = $this->uploadTreeController->getClearingHistory(null, new ResponseHelper(), ['id' => $uploadId, 'itemId' => $itemId]);
538  $this->assertEquals($expectedResponse->getStatusCode(), $actualResponse->getStatusCode());
539  $this->assertEquals($this->getResponseJson($expectedResponse), $this->getResponseJson($actualResponse));
540  }
541 
547  public function testGetHighlightEntries()
548  {
549  $uploadId = 1;
550  $itemId = 200;
551  $res [] = array(
552  "start" => 70,
553  "end" => 70,
554  "type" => "MD",
555  "licenseId" => null,
556  "refStart" => 0,
557  "refEnd" => 53,
558  "infoText" => "MIT: 'MIT License\n\nCopyright (c) <year> <copyright holders>'",
559  "htmlElement" => null
560  );
561 
562  $highlight = new Highlight($res[0]["start"], $res[0]["end"], $res[0]["type"], $res[0]["refStart"], $res[0]["refEnd"], $res[0]["infoText"]);
563  $itemTreeBounds = new ItemTreeBounds($itemId, 'uploadtree', $uploadId, 1, 2);
564 
565  $this->uploadDao->shouldReceive('isAccessible')
566  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
567  $this->dbHelper->shouldReceive('doesIdExist')
568  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
569  $this->uploadDao->shouldReceive("getUploadtreeTableName")->withArgs([$uploadId])->andReturn("uploadtree");
570  $this->dbHelper->shouldReceive('doesIdExist')
571  ->withArgs(["uploadtree", "uploadtree_pk", $itemId])->andReturn(true);
572  $this->uploadDao->shouldReceive("getItemTreeBounds")->withArgs([$itemId, "uploadtree"])->andReturn($itemTreeBounds);
573  $this->viewLicensePlugin->shouldReceive('getSelectedHighlighting')->withArgs([$itemTreeBounds, null, null, null, null, $uploadId])->andReturn([$highlight]);
574 
575  $expectedResponse = (new ResponseHelper())->withJson($res, 200);
576  $queryParams = ['clearingId' => null, 'agentId' => null, 'highlightId' => null, 'licenseId' => null];
577  $request = $this->getMockBuilder(ServerRequestInterface::class)
578  ->getMock();
579  $request->expects($this->any())
580  ->method('getQueryParams')
581  ->willReturn($queryParams);
582 
583  $actualResponse = $this->uploadTreeController->getHighlightEntries($request, new ResponseHelper(), ['id' => $uploadId, 'itemId' => $itemId]);
584  $this->assertEquals($expectedResponse->getStatusCode(), $actualResponse->getStatusCode());
585  $this->assertEquals($this->getResponseJson($expectedResponse), $this->getResponseJson($actualResponse));
586  }
587 
594  public function testGetLicenseDecisions()
595  {
596  $itemId = 200;
597  $uploadId = 1;
598  $licenseId = 123;
599  $licenses = array();
600 
601  $itemTreeBounds = new ItemTreeBounds($itemId, 'uploadtree_a', $uploadId, 0, 1);
602  $addedClearingResults = [];
603 
604  $result = array(
605  'name' => 'Imported decision',
606  'clearingId' => null,
607  'agentId' => null,
608  'highlightId' => null,
609  'page' => 0,
610  'percentage' => null
611  );
612 
613  $license = new License($licenseId, "MIT", "MIT License", "text", "url", [],
614  null, false);
615  $licenseDecision = new LicenseDecision($licenseId, "MIT", "MIT License", 'text', "url", array($result),
616  '', '', false, [], null, false);
617 
618  $licenseRef = new LicenseRef($licenseId, "MIT", "MIT LICENSE", "spx");
619  $clearingEvent = new ClearingEvent(1, $itemId, 12, $this->userId, $this->groupId, 4, new ClearingLicense($licenseRef, false, "", "", "", ""));
620  $licenseDecisionResult = new ClearingResult($clearingEvent, []);
621  $addedClearingResults[$licenseId] = $licenseDecisionResult;
622 
623  $this->uploadDao->shouldReceive('isAccessible')
624  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
625  $this->dbHelper->shouldReceive('doesIdExist')
626  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
627 
628  $this->uploadDao->shouldReceive('getUploadtreeTableName')->withArgs([$uploadId])->andReturn("uploadtree");
629  $this->dbHelper->shouldReceive('doesIdExist')
630  ->withArgs(["uploadtree", "uploadtree_pk", $itemId])->andReturn(true);
631 
632  $this->uploadDao->shouldReceive("getItemTreeBoundsFromUploadId")->withArgs([$itemId, $uploadId])->andReturn($itemTreeBounds);
633  $this->itemTreeBoundsMock->shouldReceive("containsFiles")->andReturn(false);
634  $this->clearingDao->shouldReceive('getMainLicenseIds')->andReturn([]);
635  $this->clearingEventTypes->shouldReceive('getTypeName')->withArgs([$clearingEvent->getEventType()])->andReturn($result['name']);
636  $this->highlightDao->shouldReceive('getHighlightRegion')->withArgs([1])->andReturn([""]);
637  $this->clearingDecisionEventProcessor->shouldReceive("getCurrentClearings")->withArgs([$itemTreeBounds, $this->groupId, LicenseMap::CONCLUSION])->andReturn([$addedClearingResults, []]);
638  $this->licenseDao->shouldReceive('getLicenseObligations')->withArgs([[$licenseId], false])->andReturn([]);
639  $this->licenseDao->shouldReceive('getLicenseObligations')->withArgs([[$licenseId], true])->andReturn([]);
640  $this->licenseDao->shouldReceive('getLicenseById')->withArgs([$licenseId])->andReturn($license);
641  $licenses[] = $licenseDecision->getArray();
642 
643  $expectedResponse = (new ResponseHelper())->withJson($licenses, 200);
644  $actualResponse = $this->uploadTreeController->getLicenseDecisions(null, new ResponseHelper(), ['id' => $uploadId, 'itemId' => $itemId]);
645  $this->assertEquals($expectedResponse->getStatusCode(), $actualResponse->getStatusCode());
646  $this->assertEquals($this->getResponseJson($expectedResponse), $this->getResponseJson($actualResponse));
647  }
648 
655  {
656  $uploadId = 1;
657  $itemId = 200;
658  $shortName = "MIT";
659  $licenseId = 23;
660  $license = new License($licenseId, "MIT", "MIT License", "risk", "texts", [],
661  'type', false);
662  $itemTreeBounds = new ItemTreeBounds($itemId, 'uploadtree_a', $uploadId, 1, 2);
663  $rq = [
664  array(
665  "shortName" => "MIT",
666  "add" => true
667  )
668  ];
669 
670  $existingLicenses = array(['DT_RowId' => "$itemId,400", 'DT_RowClass' => 'removed']);
671 
672  $this->uploadDao->shouldReceive('isAccessible')
673  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
674  $this->dbHelper->shouldReceive('doesIdExist')
675  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
676  $this->uploadDao->shouldReceive("getUploadtreeTableName")->withArgs([$uploadId])->andReturn("uploadtree");
677  $this->dbHelper->shouldReceive('doesIdExist')
678  ->withArgs(["uploadtree", "uploadtree_pk", $itemId])->andReturn(true);
679  $this->uploadDao->shouldReceive('getItemTreeBoundsFromUploadId')->withArgs([$itemId, $uploadId])->andReturn($itemTreeBounds);
680  $this->concludeLicensePlugin->shouldReceive('getCurrentSelectedLicensesTableData')->withArgs([$itemTreeBounds, $this->groupId, true])->andReturn($existingLicenses);
681  $this->licenseDao->shouldReceive('getLicenseByShortName')
682  ->withArgs([$shortName, $this->groupId])->andReturn($license);
683  $this->clearingDao->shouldReceive('insertClearingEvent')
684  ->withArgs([$itemId, $this->userId, $this->groupId, $licenseId, false])->andReturn(null);
685 
686  $info = new Info(200, 'Successfully added MIT as a new license decision.', InfoType::INFO);
687  $res = [
688  'success' => [$info->getArray()],
689  'errors' => []
690  ];
691  $expectedResponse = (new ResponseHelper())->withJson($res, 200);
692  $reqBody = $this->streamFactory->createStream(json_encode(
693  $rq
694  ));
695  $requestHeaders = new Headers();
696  $requestHeaders->setHeader('Content-Type', 'application/json');
697  $request = new Request("PUT", new Uri("HTTP", "localhost"),
698  $requestHeaders, [], [], $reqBody);
699  $actualResponse = $this->uploadTreeController->handleAddEditAndDeleteLicenseDecision($request, new ResponseHelper(), ['id' => $uploadId, 'itemId' => $itemId]);
700 
701  $this->assertEquals($expectedResponse->getStatusCode(),
702  $actualResponse->getStatusCode());
703  $this->assertEquals($this->getResponseJson($expectedResponse),
704  $this->getResponseJson($actualResponse));
705  }
706 
713  {
714  $uploadId = 1;
715  $itemId = 200;
716  $shortName = "MIT";
717  $licenseId = 23;
718  $license = new License($licenseId, "MIT", "MIT License", "risk", "texts", [],
719  'type', false);
720  $itemTreeBounds = new ItemTreeBounds($itemId, 'uploadtree_a', $uploadId, 1, 2);
721  $rq = [
722  array(
723  "shortName" => "MIT",
724  "add" => true,
725  "text" => "Updated license text",
726  )
727  ];
728 
729  $existingLicenses = array(['DT_RowId' => "$itemId,$licenseId", 'DT_RowClass' => 'removed']);
730 
731  $this->uploadDao->shouldReceive('isAccessible')
732  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
733  $this->dbHelper->shouldReceive('doesIdExist')
734  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
735  $this->uploadDao->shouldReceive("getUploadtreeTableName")->withArgs([$uploadId])->andReturn("uploadtree");
736  $this->dbHelper->shouldReceive('doesIdExist')
737  ->withArgs(["uploadtree", "uploadtree_pk", $itemId])->andReturn(true);
738  $this->uploadDao->shouldReceive('getItemTreeBoundsFromUploadId')->withArgs([$itemId, $uploadId])->andReturn($itemTreeBounds);
739  $this->concludeLicensePlugin->shouldReceive('getCurrentSelectedLicensesTableData')->withArgs([$itemTreeBounds, $this->groupId, true])->andReturn($existingLicenses);
740  $this->licenseDao->shouldReceive('getLicenseByShortName')
741  ->withArgs([$shortName, $this->groupId])->andReturn($license);
742  $this->clearingDao->shouldReceive('updateClearingEvent')
743  ->withArgs([$itemId, $this->userId, $this->groupId, $licenseId, 'reportinfo', "Updated license text"])->andReturn(null);
744 
745  $info = new Info(200, "Successfully updated MIT's license reportinfo", InfoType::INFO);
746  $res = [
747  'success' => [$info->getArray()],
748  'errors' => []
749  ];
750  $expectedResponse = (new ResponseHelper())->withJson($res, 200);
751  $reqBody = $this->streamFactory->createStream(json_encode(
752  $rq
753  ));
754  $requestHeaders = new Headers();
755  $requestHeaders->setHeader('Content-Type', 'application/json');
756  $request = new Request("PUT", new Uri("HTTP", "localhost"),
757  $requestHeaders, [], [], $reqBody);
758  $actualResponse = $this->uploadTreeController->handleAddEditAndDeleteLicenseDecision($request, new ResponseHelper(), ['id' => $uploadId, 'itemId' => $itemId]);
759 
760  $this->assertEquals($expectedResponse->getStatusCode(),
761  $actualResponse->getStatusCode());
762  $this->assertEquals($this->getResponseJson($expectedResponse),
763  $this->getResponseJson($actualResponse));
764  }
765 
772  {
773  $uploadId = 1;
774  $itemId = 200;
775  $shortName = "MIT";
776  $licenseId = 23;
777  $license = new License($licenseId, "MIT", "MIT License", "risk", "texts", [],
778  'type', false);
779  $itemTreeBounds = new ItemTreeBounds($itemId, 'uploadtree_a', $uploadId, 1, 2);
780  $rq = [
781  array(
782  "shortName" => "MIT",
783  "add" => false,
784  "text" => "Updated license text",
785  )
786  ];
787 
788  $existingLicenses = array(['DT_RowId' => "$itemId,$licenseId", 'DT_RowClass' => 'removed']);
789 
790  $this->uploadDao->shouldReceive('isAccessible')
791  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
792  $this->dbHelper->shouldReceive('doesIdExist')
793  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
794  $this->uploadDao->shouldReceive("getUploadtreeTableName")->withArgs([$uploadId])->andReturn("uploadtree");
795  $this->dbHelper->shouldReceive('doesIdExist')
796  ->withArgs(["uploadtree", "uploadtree_pk", $itemId])->andReturn(true);
797  $this->uploadDao->shouldReceive('getItemTreeBoundsFromUploadId')->withArgs([$itemId, $uploadId])->andReturn($itemTreeBounds);
798  $this->concludeLicensePlugin->shouldReceive('getCurrentSelectedLicensesTableData')->withArgs([$itemTreeBounds, $this->groupId, true])->andReturn($existingLicenses);
799  $this->licenseDao->shouldReceive('getLicenseByShortName')
800  ->withArgs([$shortName, $this->groupId])->andReturn($license);
801  $this->clearingDao->shouldReceive('insertClearingEvent')
802  ->withArgs([$itemId, $this->userId, $this->groupId, $licenseId, true])->andReturn(null);
803 
804  $info = new Info(200, 'Successfully deleted MIT from license decision list.', InfoType::INFO);
805  $res = [
806  'success' => [$info->getArray()],
807  'errors' => []
808  ];
809  $expectedResponse = (new ResponseHelper())->withJson($res, 200);
810  $reqBody = $this->streamFactory->createStream(json_encode(
811  $rq
812  ));
813  $requestHeaders = new Headers();
814  $requestHeaders->setHeader('Content-Type', 'application/json');
815  $request = new Request("PUT", new Uri("HTTP", "localhost"),
816  $requestHeaders, [], [], $reqBody);
817  $actualResponse = $this->uploadTreeController->handleAddEditAndDeleteLicenseDecision($request, new ResponseHelper(), ['id' => $uploadId, 'itemId' => $itemId]);
818 
819  $this->assertEquals($expectedResponse->getStatusCode(),
820  $actualResponse->getStatusCode());
821  $this->assertEquals($this->getResponseJson($expectedResponse),
822  $this->getResponseJson($actualResponse));
823  }
824 
830  public function testScheduleBulkScan()
831  {
832  $licenseId = 357;
833  $licenseShortName = "MIT";
834  $existingLicense = new License( $licenseId, $licenseShortName, "FULL NAME", "text", "url", [], "1");
835  $body = [
836  'bulkActions' => [
837  [
838  'licenseShortName' => $licenseShortName,
839  'licenseText' => '',
840  'acknowledgement' => '',
841  'comment' => '',
842  'licenseAction' => 'ADD'
843  ]
844  ],
845  'refText' => 'Copyright (c) 2011-2023 The Bootstrap Authors',
846  'bulkScope' => 'folder',
847  'forceDecision' => 0,
848  'ignoreIrre' => 0,
849  'delimiters' => 'DEFAULT',
850  'scanOnlyFindings' => 0
851  ];
852  $jobId = 122;
853  $res = new JsonResponse(array("jqid" => $jobId));
854 
855  $itemId = 1;
856  $uploadId = 1;
857 
858  $this->uploadDao->shouldReceive('isAccessible')
859  ->withArgs([$uploadId, $this->groupId])->andReturn(true);
860  $this->dbHelper->shouldReceive('doesIdExist')
861  ->withArgs(["upload", "upload_pk", $uploadId])->andReturn(true);
862  $this->uploadDao->shouldReceive('getUploadtreeTableName')->withArgs([$uploadId])->andReturn("uploadtree");
863  $this->dbHelper->shouldReceive('doesIdExist')
864  ->withArgs(["uploadtree", "uploadtree_pk", $itemId])->andReturn(true);
865  $this->dbHelper->shouldReceive('doesIdExist')
866  ->withArgs(["license_ref", "rf_pk", $licenseId])->andReturn(true);
867  $this->licenseDao->shouldReceive('getLicenseByShortName')
868  ->withArgs([$licenseShortName, $this->groupId])
869  ->andReturn($existingLicense);
870  $this->changeLicenseBulk->shouldReceive('handle')
871  ->withArgs([M::any()])
872  ->andReturn($res);
873 
874  $info = new Info(201, json_decode($res->getContent(), true)["jqid"], InfoType::INFO);
875 
876  $reqBody = $this->streamFactory->createStream(json_encode(
877  $body
878  ));
879 
880  $requestHeaders = new Headers();
881  $requestHeaders->setHeader('Content-Type', 'application/json');
882  $request = new Request("POST", new Uri("HTTP", "localhost"),
883  $requestHeaders, [], [], $reqBody);
884 
885  $expectedResponse = (new ResponseHelper())->withJson($info->getArray(), $info->getCode());
886  $actualResponse = $this->uploadTreeController->scheduleBulkScan($request, new ResponseHelper(), ['id' => $uploadId, 'itemId' => $itemId]);
887 
888  $this->assertEquals($expectedResponse->getStatusCode(),
889  $actualResponse->getStatusCode());
890  $this->assertEquals($this->getResponseJson($expectedResponse),
891  $this->getResponseJson($actualResponse));
892  }
893  }
894 }
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
Utility functions to process ClearingDecision.
Wrapper class for license map.
Definition: LicenseMap.php:19
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
Different type of infos provided by REST.
Definition: InfoType.php:16
Info model to contain general error and return values.
Definition: Info.php:19
RepPathItem($Item, $Repo="files")
Given an uploadtree_pk, retrieve the pfile path.
Definition: common-repo.php:91
fo_dbManager * dbManager
fo_dbManager object
Definition: process.c:16