FOSSology  4.6.0
Open Source License Compliance by Open Source Software
ReuserAgentTest.php
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2025 ayxsh_shxrma <ayushmaan.sharma911@gmail.com>
4 
5  SPDX-License-Identifier: GPL-2.0-only
6 */
7 
8 namespace Fossology\Reuser;
9 
10 // Use relative paths to ensure the test works in any FOSSology environment (Local or CI)
11 $autoloadPath = __DIR__ . '/../../../../vendor/autoload.php';
12 if (file_exists($autoloadPath)) {
13  require_once $autoloadPath;
14 }
15 require_once __DIR__ . '/../../agent/ReuserAgent.php';
16 
21 
26 class ReuserAgentTest extends \PHPUnit\Framework\TestCase
27 {
28  private $dbManager;
29  private $uploadDao;
30  private $copyrightDao;
31 
32  protected function setUp(): void
33  {
34  $this->dbManager = $this->getMockBuilder(DbManager::class)->disableOriginalConstructor()->getMock();
35  $this->uploadDao = $this->getMockBuilder(UploadDao::class)->disableOriginalConstructor()->getMock();
36  $this->copyrightDao = $this->getMockBuilder(CopyrightDao::class)->disableOriginalConstructor()->getMock();
37  }
38 
43  public function testReuseCopyrights()
44  {
45  $uploadId = 1;
46  $reusedUploadId = 2;
47  $agentId = 10;
48  $tableName = "uploadtree";
49 
50  $this->uploadDao->method('getUploadtreeTableName')->willReturn($tableName);
51 
52  $allCopyrights = [
53  'c1' => ['hash' => 'hash1', 'uploadtree_pk' => 101, 'content' => '© Meta'],
54  'c2' => ['hash' => 'hash2', 'uploadtree_pk' => 102, 'content' => '© Google'],
55  ];
56 
57  $reusedCopyrights = [
58  ['hash' => 'hash1', 'is_enabled' => 't', 'contentedited' => '© Meta Edited'],
59  ['hash' => 'hash2', 'is_enabled' => 'f', 'contentedited' => ''],
60  ];
61 
62  $this->copyrightDao->method('getScannerEntries')->willReturn($allCopyrights);
63  $this->copyrightDao->method('getAllEventEntriesForUpload')->willReturn($reusedCopyrights);
64  $this->dbManager->method('booleanFromDb')->willReturnCallback(function($val) {
65  return $val === 't';
66  });
67 
68  $item1 = $this->createMock(ItemTreeBounds::class);
69  $item2 = $this->createMock(ItemTreeBounds::class);
70  $this->uploadDao->method('getItemTreeBounds')->willReturnMap([
71  [101, $tableName, $item1],
72  [102, $tableName, $item2],
73  ]);
74 
75  $this->copyrightDao->expects($this->exactly(2))->method('updateTable');
76 
77  $mockReuserAgent = $this->getMockBuilder(ReuserAgent::class)
78  ->disableOriginalConstructor()
79  ->onlyMethods(['getAgentId', 'heartbeat'])
80  ->getMock();
81 
82  $reflection = new \ReflectionClass(ReuserAgent::class);
83  foreach (['uploadDao', 'copyrightDao', 'dbManager', 'userId'] as $propName) {
84  $prop = $reflection->getProperty($propName);
85  $prop->setAccessible(true);
86  if ($propName === 'userId') {
87  $prop->setValue($mockReuserAgent, 1);
88  } else {
89  $prop->setValue($mockReuserAgent, $this->$propName);
90  }
91  }
92 
93  $mockReuserAgent->method('getAgentId')->willReturn($agentId);
94  $mockReuserAgent->method('heartbeat')->willReturn(null);
95 
96  $method = $reflection->getMethod('reuseCopyrights');
97  $method->setAccessible(true);
98  $method->invoke($mockReuserAgent, $uploadId, $reusedUploadId);
99 
100  $this->assertTrue(true);
101  }
102 
108  {
109  $uploadId = 1;
110  $reusedUploadId = 2;
111  $tableName = "uploadtree";
112 
113  $allCopyrights = [
114  'c1' => ['hash' => 'shared', 'uploadtree_pk' => 101],
115  'c2' => ['hash' => 'shared', 'uploadtree_pk' => 102],
116  ];
117 
118  $reusedCopyrights = [
119  ['hash' => 'shared', 'is_enabled' => 't', 'contentedited' => 'Edit 1'],
120  ['hash' => 'shared', 'is_enabled' => 't', 'contentedited' => 'Edit 2'],
121  ];
122 
123  $this->uploadDao->method('getUploadtreeTableName')->willReturn($tableName);
124  $this->copyrightDao->method('getScannerEntries')->willReturn($allCopyrights);
125  $this->copyrightDao->method('getAllEventEntriesForUpload')->willReturn($reusedCopyrights);
126  $this->dbManager->method('booleanFromDb')->willReturn(true);
127 
128  $this->uploadDao->method('getItemTreeBounds')->willReturn($this->createMock(ItemTreeBounds::class));
129 
130  $mockReuserAgent = $this->getMockBuilder(ReuserAgent::class)
131  ->disableOriginalConstructor()
132  ->onlyMethods(['getAgentId', 'heartbeat'])
133  ->getMock();
134 
135  $reflection = new \ReflectionClass(ReuserAgent::class);
136  foreach (['uploadDao', 'copyrightDao', 'dbManager', 'userId'] as $propName) {
137  $prop = $reflection->getProperty($propName);
138  $prop->setAccessible(true);
139  if ($propName === 'userId') {
140  $prop->setValue($mockReuserAgent, 1);
141  } else {
142  $prop->setValue($mockReuserAgent, $this->$propName);
143  }
144  }
145 
146  $mockReuserAgent->method('getAgentId')->willReturn(10);
147  $mockReuserAgent->method('heartbeat')->willReturn(null);
148 
149  $this->copyrightDao->expects($this->exactly(2))->method('updateTable');
150 
151  $method = $reflection->getMethod('reuseCopyrights');
152  $method->setAccessible(true);
153  $method->invoke($mockReuserAgent, $uploadId, $reusedUploadId);
154 
155  $this->assertTrue(true);
156  }
157 }
Unit test for ReuserAgent matching logic.
fo_dbManager * dbManager
fo_dbManager object
Definition: process.c:16