FOSSology  4.7.1
Open Source License Compliance by Open Source Software
UploadPermissionPageTest.php
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2026 Siemens AG
4 
5  SPDX-License-Identifier: GPL-2.0-only
6 */
7 
11 use Mockery as M;
12 
13 require_once(dirname(dirname(dirname(__DIR__))) . '/lib/php/Test/Reflectory.php');
14 require_once(dirname(dirname(dirname(__DIR__))) . '/lib/php/Plugin/FO_Plugin.php');
15 require_once(dirname(dirname(dirname(__DIR__))) . '/lib/php/common-plugin.php');
16 require_once(dirname(dirname(dirname(__DIR__))) . '/lib/php/common-menu.php');
17 
32 class UploadPermissionPageTest extends \PHPUnit\Framework\TestCase
33 {
35  private $assertCountBefore;
37  private $page;
38 
39  protected function setUp(): void
40  {
41  if (!class_exists('UploadPermissionPage', false)) {
42  $GLOBALS['SysConf'] = [];
43  $GLOBALS['container'] = new class {
44  public function get($name)
45  {
46  return new \stdClass();
47  }
48  };
49  require_once(__DIR__ . '/../../ui/page/UploadPermissionPage.php');
50  }
51 
52  $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
53 
54  global $MenuList, $Plugins;
55  $MenuList = array();
56  $Plugins = array();
57 
58  // Bypass DefaultPlugin::__construct(): insertPermission() only needs
59  // uploadPermDao, which is injected directly in each test below.
60  $this->page = (new \ReflectionClass('UploadPermissionPage'))->newInstanceWithoutConstructor();
61  }
62 
63  protected function tearDown(): void
64  {
65  $this->addToAssertionCount(\Hamcrest\MatcherAssert::getCount() - $this->assertCountBefore);
66  M::close();
67  }
68 
69  private function accessibleUploadList()
70  {
71  return [
72  ['upload_pk' => 11, 'name' => 'owned-upload-a.zip'],
73  ['upload_pk' => 12, 'name' => 'owned-upload-b.zip'],
74  ];
75  }
76 
86  {
87  $unrelatedUploadId = 999;
88 
89  $uploadPermDao = M::mock(UploadPermissionDao::class);
90  $uploadPermDao->shouldNotReceive('insertPermission');
91  Reflectory::setObjectsProperty($this->page, 'uploadPermDao', $uploadPermDao);
92 
93  $this->expectException(\Exception::class);
94  $this->expectExceptionMessage('This upload is missing or inaccessible');
95 
96  $this->page->insertPermission(4, $unrelatedUploadId, Auth::PERM_ADMIN,
97  $this->accessibleUploadList());
98  }
99 
107  {
108  $groupId = 4;
109  $accessibleUploadId = 12;
110  $permission = Auth::PERM_WRITE;
111 
112  $uploadPermDao = M::mock(UploadPermissionDao::class);
113  $uploadPermDao->shouldReceive('insertPermission')
114  ->withArgs([$accessibleUploadId, $groupId, $permission])->once();
115  Reflectory::setObjectsProperty($this->page, 'uploadPermDao', $uploadPermDao);
116 
117  $this->page->insertPermission($groupId, $accessibleUploadId, $permission,
118  $this->accessibleUploadList());
119  }
120 
128  {
129  $uploadPermDao = M::mock(UploadPermissionDao::class);
130  $uploadPermDao->shouldNotReceive('insertPermission');
131  Reflectory::setObjectsProperty($this->page, 'uploadPermDao', $uploadPermDao);
132 
133  $this->expectException(\Exception::class);
134  $this->expectExceptionMessage('This upload is missing or inaccessible');
135 
136  $this->page->insertPermission(4, 12, Auth::PERM_ADMIN, []);
137  }
138 }
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
Test for UploadPermissionPage::insertPermission(), covering the broken upload membership check fix @r...
$MenuList
Global menu list array.
Definition: common-menu.php:48
#define PERM_WRITE
Read-Write permission.
Definition: libfossology.h:33
#define PERM_ADMIN
Administrator.
Definition: libfossology.h:34