9 namespace Fossology\Lib\Dao;
25 protected function setUp() :
void
28 $this->
dbManager = $this->testDb->getDbManager();
29 $userDao = M::mock(
'Fossology\Lib\Dao\UserDao');
30 $uploadDao = M::mock(
'Fossology\Lib\Dao\UploadDao');
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'));
38 $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
41 protected function tearDown() :
void
43 $this->addToAssertionCount(\Hamcrest\MatcherAssert::getCount()-$this->assertCountBefore);
48 public function testGetAllFolderIds()
50 $this->testDb->insertData(array(
'folder'));
51 assertThat(
sizeof($this->folderDao->getAllFolderIds())>0);
54 public function testHasTopLevelFolder_yes()
56 $this->testDb->insertData(array(
'folder'));
57 $htlf = $this->folderDao->hasTopLevelFolder();
58 assertThat($htlf, is(TRUE));
61 public function testHasTopLevelFolder_no()
63 $htlf = $this->folderDao->hasTopLevelFolder();
64 assertThat($htlf, is(FALSE));
68 public function testInsertFolder()
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)));
76 $folderIdPlusOne = $this->folderDao->insertFolder($folderName =
'four', $folderDescription =
'ceil(PI)');
77 assertThat($folderIdPlusOne, equalTo(FolderDao::TOP_LEVEL+1));
81 public function testInsertFolderContents()
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))));
90 public function testGetFolderPK()
92 $folderId = $this->folderDao->insertFolder($folderName =
'three', $folderDescription =
'floor(PI)');
94 assertThat($this->folderDao->getFolderId(
'three'), is($folderId));
97 public function testGetFolderPK_Null()
99 assertThat($this->folderDao->getFolderId(
'three'), is(
null));
102 public function testGetFolderWithWrongParent()
104 $this->folderDao->insertFolder($folderName =
'three', $folderDescription =
'floor(PI)+Epsilon',2);
105 assertThat($this->folderDao->getFolderId(
'three'), is(
null));
108 public function testEnsureTopLevelFolder()
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));
120 public function testIsWithoutReusableFolders()
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));
131 assertThat($this->folderDao->isWithoutReusableFolders(array($filledFolder,$emptyFolder)),is(
false));
134 public function testGetFolderChildFolders()
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)));
143 public function testMoveContent()
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)));
154 public function testMoveContentShouldFailIfCyclesAreProduced()
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);
165 public function testCopyContent()
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)));
178 public function testGetRemovableContents()
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));
191 public function testGetFolder()
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()));
fo_dbManager * dbManager
fo_dbManager object