FOSSology  4.5.1
Open Source License Compliance by Open Source Software
ScanOptionsTest.php
Go to the documentation of this file.
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2021 Siemens AG
4  Author: Gaurav Mishra <mishra.gaurav@siemens.com>
5 
6  SPDX-License-Identifier: GPL-2.0-only
7 */
14 {
15  use Mockery as M;
23  use Symfony\Component\HttpFoundation\Request;
25 
30  class ScanOptionsTest extends \PHPUnit\Framework\TestCase
31  {
36  public static $functions;
37 
42  private $agentAdderMock;
43 
48  private $userDao;
49 
54  public function setUp() : void
55  {
56  global $container;
57  $container = M::mock('ContainerBuilder');
58  $this->agentAdderMock = M::mock('overload:\AgentAdder');
59  $this->userDao = M::mock(UserDao::class);
60  $container->shouldReceive('get')->withArgs(["dao.user"])
61  ->andReturn($this->userDao);
62  $container->shouldReceive('get')->andReturn(null);
63 
64  self::$functions = M::mock(\stdClass::class);
65  self::$functions->shouldReceive('FolderListUploads_perm')
66  ->withArgs([2, Auth::PERM_WRITE])->andReturn([
67  ['upload_pk' => 2],
68  ['upload_pk' => 3],
69  ['upload_pk' => 4]
70  ]);
71  self::$functions->shouldReceive('register_plugin')
72  ->with(\Hamcrest\Matchers::identicalTo(
73  new ScanOptions(null, null, null, null)));
74  }
75 
83  private function prepareRequest($request, $reuserOpts, $deciderOpts)
84  {
85  if (!empty($reuserOpts)) {
86  $reuserSelector = $reuserOpts['upload'] . "," . $reuserOpts['group'];
87  $request->request->set('uploadToReuse', $reuserSelector);
88  if (key_exists('rules', $reuserOpts)) {
89  $request->request->set('reuseMode', $reuserOpts['rules']);
90  }
91  }
92  if (!empty($deciderOpts)) {
93  $request->request->set('deciderRules', $deciderOpts);
94  if (in_array('nomosInMonk', $deciderOpts)) {
95  $request->request->set('Check_agent_nomos', 1);
96  }
97  }
98  return $request;
99  }
100 
107  public function testScheduleAgentsApiVersionV1()
108  {
109  $reuseUploadId = 2;
110  $uploadId = 4;
111  $folderId = 2;
112  $groupId = 2;
113  $groupName = "fossy";
114  $agentsToAdd = ['agent_nomos', 'agent_ojo', 'agent_monk'];
115  $reuserOpts = [
116  'upload' => $reuseUploadId,
117  'group' => $groupId,
118  'rules' => []
119  ];
120  $deciderOpts = [
121  'nomosInMonk',
122  'ojoNoContradiction'
123  ];
124 
125  $_SERVER['REQUEST_URI'] = "/api/v1/";
126 
127  $mockApiVersion = $this->createMock(ApiVersion::class);
128  $mockApiVersion->method("getVersionFromUri")->willReturn(ApiVersion::V1);
129 
130  $request = new Request();
131  $request = $this->prepareRequest($request, $reuserOpts, $deciderOpts);
132 
133  $analysis = new Analysis();
134  $analysis->setUsingString("nomos,ojo,monk");
135 
136  $reuse = new Reuser($reuseUploadId, $groupName);
137 
138  $decider = new Decider();
139  $decider->setOjoDecider(true);
140  $decider->setNomosMonk(true);
141  $decider->setConcludeLicenseType("Permissive");
142 
143  $scancode = new Scancode();
144 
145  $scanOption = new ScanOptions($analysis, $reuse, $decider, $scancode);
146 
147  $this->userDao->shouldReceive('getGroupIdByName')
148  ->withArgs([$groupName])->andReturn($groupId);
149  $this->agentAdderMock->shouldReceive('scheduleAgents')
150  ->once()
151  ->andReturn(25);
152 
153  $scanOption->scheduleAgents($folderId, $uploadId);
154  }
155 
156  public function testScheduleAgentsApiVersionV2()
157  {
158  $reuseUploadId = 2;
159  $uploadId = 4;
160  $folderId = 2;
161  $groupId = 2;
162  $groupName = "fossy";
163  $agentsToAdd = ['agent_nomos', 'agent_ojo', 'agent_monk'];
164  $reuserOpts = [
165  'upload' => $reuseUploadId,
166  'group' => $groupId,
167  'rules' => []
168  ];
169  $deciderOpts = [
170  'nomosInMonk',
171  'ojoNoContradiction'
172  ];
173 
174  $_SERVER['REQUEST_URI'] = "/api/v2/";
175 
176  $mockApiVersion = $this->createMock(ApiVersion::class);
177  $mockApiVersion->method("getVersionFromUri")->willReturn(ApiVersion::V2);
178 
179  $request = new Request();
180  $request = $this->prepareRequest($request, $reuserOpts, $deciderOpts);
181 
182  $analysis = new Analysis();
183  $analysis->setUsingString("nomos,ojo,monk");
184 
185  $reuse = new Reuser($reuseUploadId, $groupName);
186 
187  $decider = new Decider();
188  $decider->setOjoDecider(true);
189  $decider->setNomosMonk(true);
190  $decider->setConcludeLicenseType("Permissive");
191 
192  $scancode = new Scancode();
193 
194  $scanOption = new ScanOptions($analysis, $reuse, $decider, $scancode);
195 
196  $this->userDao->shouldReceive('getGroupIdByName')
197  ->withArgs([$groupName])->andReturn($groupId);
198  $this->agentAdderMock->shouldReceive('scheduleAgents')
199  ->once()
200  ->andReturn(25);
201 
202  $scanOption->scheduleAgents($folderId, $uploadId);
203  }
204  }
205 }
206 
207 namespace Fossology\UI\Api\Models
208 {
209  function register_plugin($obj)
210  {
211  return \Fossology\Ui\Api\Test\Models\ScanOptionsTest::$functions
212  ->register_plugin($obj);
213  }
214 
215  function FolderListUploads_perm($parentFolder, $perm)
216  {
217  return \Fossology\Ui\Api\Test\Models\ScanOptionsTest::$functions
218  ->FolderListUploads_perm($parentFolder, $perm);
219  }
220 }
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
Model to hold analysis settings.
Definition: Analysis.php:21
Model to hold info required by Reuser agent.
Definition: Reuser.php:18
Model to hold add settings for new scan.
Definition: ScanOptions.php:32
prepareRequest($request, $reuserOpts, $deciderOpts)
FolderListUploads_perm($ParentFolder, $perm)
Returns an array of uploads in a folder.