FOSSology  4.4.0
Open Source License Compliance by Open Source Software
FolderDaoTest.php
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2014-2017 Siemens AG
4  Author: Steffen Weber
5 
6  SPDX-License-Identifier: GPL-2.0-only
7 */
8 
9 namespace Fossology\Lib\Dao;
10 
11 use Exception;
14 use Mockery as M;
15 
16 class FolderDaoTest extends \PHPUnit\Framework\TestCase
17 {
19  private $testDb;
21  private $dbManager;
23  private $folderDao;
24 
25  protected function setUp() : void
26  {
27  $this->testDb = new TestPgDb();
28  $this->dbManager = $this->testDb->getDbManager();
29  $userDao = M::mock('Fossology\Lib\Dao\UserDao');
30  $uploadDao = M::mock('Fossology\Lib\Dao\UploadDao');
31  $this->folderDao = new FolderDao($this->dbManager, $userDao, $uploadDao);
32 
33  $this->testDb->createPlainTables(array('folder','foldercontents'));
34  $this->testDb->createSequences(array('folder_folder_pk_seq','foldercontents_foldercontents_pk_seq'));
35  $this->testDb->createConstraints(array('folder_pkey','foldercontents_pkey'));
36  $this->testDb->alterTables(array('folder','foldercontents'));
37 
38  $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
39  }
40 
41  protected function tearDown() : void
42  {
43  $this->addToAssertionCount(\Hamcrest\MatcherAssert::getCount()-$this->assertCountBefore);
44  $this->testDb = null;
45  $this->dbManager = null;
46  }
47 
48  public function testGetAllFolderIds()
49  {
50  $this->testDb->insertData(array('folder'));
51  assertThat(sizeof($this->folderDao->getAllFolderIds())>0);
52  }
53 
54  public function testHasTopLevelFolder_yes()
55  {
56  $this->testDb->insertData(array('folder'));
57  $htlf = $this->folderDao->hasTopLevelFolder();
58  assertThat($htlf, is(TRUE));
59  }
60 
61  public function testHasTopLevelFolder_no()
62  {
63  $htlf = $this->folderDao->hasTopLevelFolder();
64  assertThat($htlf, is(FALSE));
65  }
66 
67 
68  public function testInsertFolder()
69  {
70  $folderId = $this->folderDao->insertFolder($folderName = 'three', $folderDescription = 'floor(PI)');
71  assertThat($folderId, equalTo(FolderDao::TOP_LEVEL));
72  $folderInfo = $this->dbManager->getSingleRow('SELECT folder_name,folder_desc FROM folder WHERE folder_pk=$1',
73  array($folderId), __METHOD__);
74  assertThat($folderInfo, is(array('folder_name' => $folderName, 'folder_desc' => $folderDescription)));
75 
76  $folderIdPlusOne = $this->folderDao->insertFolder($folderName = 'four', $folderDescription = 'ceil(PI)');
77  assertThat($folderIdPlusOne, equalTo(FolderDao::TOP_LEVEL+1));
78 
79  }
80 
81  public function testInsertFolderContents()
82  {
83  $this->folderDao->insertFolderContents($parentId = 7, $foldercontentsMode = 2, $childId = 22);
84  $contentsInfo = $this->dbManager->getSingleRow('SELECT foldercontents_mode, child_id FROM foldercontents WHERE parent_fk=$1',
85  array($parentId), __METHOD__);
86  assertThat($contentsInfo, is(equalTo(array('foldercontents_mode' => $foldercontentsMode, 'child_id' => $childId))));
87  }
88 
89 
90  public function testGetFolderPK()
91  {
92  $folderId = $this->folderDao->insertFolder($folderName = 'three', $folderDescription = 'floor(PI)');
93 
94  assertThat($this->folderDao->getFolderId('three'), is($folderId));
95  }
96 
97  public function testGetFolderPK_Null()
98  {
99  assertThat($this->folderDao->getFolderId('three'), is(null));
100  }
101 
102  public function testGetFolderWithWrongParent()
103  {
104  $this->folderDao->insertFolder($folderName = 'three', $folderDescription = 'floor(PI)+Epsilon',2);
105  assertThat($this->folderDao->getFolderId('three'), is(null));
106  }
107 
108  public function testEnsureTopLevelFolder()
109  {
110  $htlfFresh = $this->folderDao->hasTopLevelFolder();
111  assertThat($htlfFresh, is(false));
112  $this->folderDao->ensureTopLevelFolder();
113  $htlfFixed = $this->folderDao->hasTopLevelFolder();
114  assertThat($htlfFixed, is(true));
115  $this->folderDao->ensureTopLevelFolder();
116  $folders = $this->dbManager->getSingleRow('SELECT count(*) FROM folder');
117  assertThat($folders['count'],is(1));
118  }
119 
120  public function testIsWithoutReusableFolders()
121  {
122  assertThat($this->folderDao->isWithoutReusableFolders(array()),is(true));
123  $filledFolder = array(FolderDao::REUSE_KEY=>array(1=>array('group_id'=>1,'count'=>12,'group_name'=>'one')));
124  assertThat($this->folderDao->isWithoutReusableFolders(array($filledFolder)),is(false));
125  $emptyFolder = array(FolderDao::REUSE_KEY=>array(1=>array('group_id'=>1,'count'=>0,'group_name'=>'one')));
126  assertThat($this->folderDao->isWithoutReusableFolders(array($emptyFolder)),is(true));
127  $multiAccessibleFolder = array(FolderDao::REUSE_KEY=>array(1=>array('group_id'=>1,'count'=>0,'group_name'=>'one'),
128  2=>array('group_id'=>2,'count'=>20,'group_name'=>'two')));
129  assertThat($this->folderDao->isWithoutReusableFolders(array($multiAccessibleFolder)),is(false));
130 
131  assertThat($this->folderDao->isWithoutReusableFolders(array($filledFolder,$emptyFolder)),is(false));
132  }
133 
134  public function testGetFolderChildFolders()
135  {
136  $this->folderDao->ensureTopLevelFolder();
137  $folderA = $this->folderDao->insertFolder('A', '/A', FolderDao::TOP_LEVEL);
138  $this->folderDao->insertFolder('B', '/A/B', $folderA);
139  $this->folderDao->insertFolder('C', '/C', FolderDao::TOP_LEVEL);
140  assertThat($this->folderDao->getFolderChildFolders(FolderDao::TOP_LEVEL),is(arrayWithSize(2)));
141  }
142 
143  public function testMoveContent()
144  {
145  $this->folderDao->ensureTopLevelFolder();
146  $folderA = $this->folderDao->insertFolder($folderName='A', '/A', FolderDao::TOP_LEVEL);
147  $folderB = $this->folderDao->insertFolder($folderName='B', '/A/B', $folderA);
148  $fc = $this->dbManager->getSingleRow('SELECT foldercontents_pk FROM foldercontents WHERE child_id=$1',
149  array($folderB),__METHOD__.'.needs.the.foldercontent_pk');
150  $this->folderDao->moveContent($fc['foldercontents_pk'], FolderDao::TOP_LEVEL);
151  assertThat($this->folderDao->getFolderChildFolders(FolderDao::TOP_LEVEL),is(arrayWithSize(2)));
152  }
153 
154  public function testMoveContentShouldFailIfCyclesAreProduced()
155  {
156  $this->expectException(Exception::class);
157  $this->folderDao->ensureTopLevelFolder();
158  $folderA = $this->folderDao->insertFolder($folderName='A', '/A', FolderDao::TOP_LEVEL);
159  $folderB = $this->folderDao->insertFolder($folderName='B', '/A/B', $folderA);
160  $fc = $this->dbManager->getSingleRow('SELECT foldercontents_pk FROM foldercontents WHERE child_id=$1',
161  array($folderA),__METHOD__.'.needs.the.foldercontent_pk');
162  $this->folderDao->moveContent($fc['foldercontents_pk'], $folderB);
163  }
164 
165  public function testCopyContent()
166  {
167  $this->folderDao->ensureTopLevelFolder();
168  $folderA = $this->folderDao->insertFolder($folderName='A', '/A', FolderDao::TOP_LEVEL);
169  $folderB = $this->folderDao->insertFolder($folderName='B', '/A/B', $folderA);
170  $this->folderDao->insertFolder($folderName='C', '/C', FolderDao::TOP_LEVEL);
171  $fc = $this->dbManager->getSingleRow('SELECT foldercontents_pk FROM foldercontents WHERE child_id=$1',
172  array($folderB),__METHOD__.'.needs.the.foldercontent_pk');
173  $this->folderDao->copyContent($fc['foldercontents_pk'], FolderDao::TOP_LEVEL);
174  assertThat($this->folderDao->getFolderChildFolders($folderA),is(arrayWithSize(1)));
175  assertThat($this->folderDao->getFolderChildFolders(FolderDao::TOP_LEVEL),is(arrayWithSize(3)));
176  }
177 
178  public function testGetRemovableContents()
179  {
180  $this->folderDao->ensureTopLevelFolder();
181  $folderA = $this->folderDao->insertFolder($folderName='A', '/A', FolderDao::TOP_LEVEL);
182  $this->folderDao->insertFolder('B', '/A/B', $folderA);
183  $folderC = $this->folderDao->insertFolder('C', '/C', FolderDao::TOP_LEVEL);
184  assertThat($this->folderDao->getRemovableContents($folderA),arrayWithSize(0));
185  $this->dbManager->insertTableRow('foldercontents',array('foldercontents_mode'=> FolderDao::MODE_UPLOAD,'parent_fk'=>$folderA,'child_id'=>$folderC));
186  assertThat($this->folderDao->getRemovableContents($folderA),arrayWithSize(0));
187  $this->dbManager->insertTableRow('foldercontents',array('foldercontents_mode'=> FolderDao::MODE_FOLDER,'parent_fk'=>$folderA,'child_id'=>$folderC));
188  assertThat($this->folderDao->getRemovableContents($folderA),arrayWithSize(1));
189  }
190 
191  public function testGetFolder()
192  {
193  $this->folderDao->ensureTopLevelFolder();
194  $goodFolder = $this->folderDao->getFolder(FolderDao::TOP_LEVEL);
195  assertThat($goodFolder, is(anInstanceOf(\Fossology\Lib\Data\Folder\Folder::class)));
196  assertThat($goodFolder->getId(), equalTo(FolderDao::TOP_LEVEL));
197  $badFolder = $this->folderDao->getFolder(987);
198  assertThat($badFolder, is(nullValue()));
199  }
200 }
fo_dbManager * dbManager
fo_dbManager object
Definition: process.c:16