mirror of
https://git.code.sf.net/p/seeddms/code
synced 2024-11-26 23:42:11 +00:00
291 lines
9.8 KiB
PHP
291 lines
9.8 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Implementation of the complex dms tests
|
||
|
*
|
||
|
* PHP version 7
|
||
|
*
|
||
|
* @category SeedDMS
|
||
|
* @package Tests
|
||
|
* @author Uwe Steinmann <uwe@steinmann.cx>
|
||
|
* @copyright 2021 Uwe Steinmann
|
||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
|
||
|
* @version @package_version@
|
||
|
* @link https://www.seeddms.org
|
||
|
*/
|
||
|
|
||
|
use PHPUnit\Framework\SeedDmsTest;
|
||
|
|
||
|
/**
|
||
|
* DMS test class
|
||
|
*
|
||
|
* @category SeedDMS
|
||
|
* @package Tests
|
||
|
* @author Uwe Steinmann <uwe@steinmann.cx>
|
||
|
* @copyright 2021 Uwe Steinmann
|
||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
|
||
|
* @version Release: @package_version@
|
||
|
* @link https://www.seeddms.org
|
||
|
*/
|
||
|
class DmsWithDataTest extends SeedDmsTest
|
||
|
{
|
||
|
|
||
|
/**
|
||
|
* Create a real sqlite database in memory
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function setUp(): void
|
||
|
{
|
||
|
self::$dbh = self::createInMemoryDatabase();
|
||
|
self::$contentdir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'phpunit-'.time();
|
||
|
mkdir(self::$contentdir);
|
||
|
// echo "Creating temp content dir: ".self::$contentdir."\n";
|
||
|
self::$dms = new SeedDMS_Core_DMS(self::$dbh, self::$contentdir);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Clean up at tear down
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function tearDown(): void
|
||
|
{
|
||
|
self::$dbh = null;
|
||
|
// echo "\nRemoving temp. content dir: ".self::$contentdir."\n";
|
||
|
exec('rm -rf '.self::$contentdir);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test getFoldersMinMax()
|
||
|
*
|
||
|
* This method uses a real in memory sqlite3 database.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function testGetFoldersMinMax()
|
||
|
{
|
||
|
self::createSimpleFolderStructure();
|
||
|
$rootfolder = self::$dms->getRootFolder();
|
||
|
$minmax = $rootfolder->getFoldersMinMax();
|
||
|
$this->assertIsArray($minmax);
|
||
|
$this->assertCount(2, $minmax);
|
||
|
$this->assertEquals(0.5, $minmax['min']);
|
||
|
$this->assertEquals(2.0, $minmax['max']);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test method getFoldersMinMax()
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function testGetFoldersMinMaxSqlFail()
|
||
|
{
|
||
|
$rootfolder = $this->getMockedRootFolder();
|
||
|
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
|
||
|
$db->expects($this->once())
|
||
|
->method('getResultArray')
|
||
|
->with($this->stringContains("SELECT min(`sequence`) AS `min`, max(`sequence`) AS `max` FROM `tblFolders`"))
|
||
|
->willReturn(false);
|
||
|
$dms = new SeedDMS_Core_DMS($db, '');
|
||
|
$rootfolder->setDMS($dms);
|
||
|
$this->assertFalse($rootfolder->getFoldersMinMax());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test getDocumentsMinMax()
|
||
|
*
|
||
|
* This method uses a real in memory sqlite3 database.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function testGetDocumentsMinMax()
|
||
|
{
|
||
|
self::createSimpleFolderStructureWithDocuments();
|
||
|
$subfolder = self::$dms->getFolderByName('Subfolder 1');
|
||
|
$this->assertIsObject($subfolder);
|
||
|
$minmax = $subfolder->getDocumentsMinMax();
|
||
|
$this->assertIsArray($minmax);
|
||
|
$this->assertCount(2, $minmax);
|
||
|
$this->assertEquals(2.0, $minmax['min']);
|
||
|
$this->assertEquals(16.0, $minmax['max']);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test method getDocumentsMinMax()
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function testGetDocumentsMinMaxSqlFail()
|
||
|
{
|
||
|
$rootfolder = $this->getMockedRootFolder();
|
||
|
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
|
||
|
$db->expects($this->once())
|
||
|
->method('getResultArray')
|
||
|
->with($this->stringContains("SELECT min(`sequence`) AS `min`, max(`sequence`) AS `max` FROM `tblDocuments`"))
|
||
|
->willReturn(false);
|
||
|
$dms = new SeedDMS_Core_DMS($db, '');
|
||
|
$rootfolder->setDMS($dms);
|
||
|
$this->assertFalse($rootfolder->getDocumentsMinMax());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test addDocument()
|
||
|
*
|
||
|
* This method uses a real in memory sqlite3 database.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function testAddDocument()
|
||
|
{
|
||
|
self::createSimpleFolderStructure();
|
||
|
$rootfolder = self::$dms->getRootFolder();
|
||
|
$user = self::$dms->getUser(1);
|
||
|
$this->assertInstanceOf(SeedDMS_Core_Folder::class, $rootfolder);
|
||
|
$this->assertEquals(1, $rootfolder->getId());
|
||
|
/* Add a new document */
|
||
|
$filename = self::createTempFile(200);
|
||
|
list($document, $res) = $rootfolder->addDocument(
|
||
|
'Document 1', // name
|
||
|
'', // comment
|
||
|
null, // expiration
|
||
|
$user, // owner
|
||
|
'', // keywords
|
||
|
[], // categories
|
||
|
$filename, // name of file
|
||
|
'file1.txt', // original file name
|
||
|
'.txt', // file type
|
||
|
'text/plain', // mime type
|
||
|
1.0 // sequence
|
||
|
);
|
||
|
$this->assertTrue(SeedDMS_Core_File::removeFile($filename));
|
||
|
$this->assertIsObject($document);
|
||
|
$this->assertInstanceOf(SeedDMS_Core_Document::class, $document);
|
||
|
$this->assertEquals('Document 1', $document->getName());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test getDocumentsExpired()
|
||
|
*
|
||
|
* Create two documents which will expired today and tomorrow
|
||
|
*
|
||
|
* This method uses a real in memory sqlite3 database.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function testGetDocumentsExpiredFuture()
|
||
|
{
|
||
|
self::createSimpleFolderStructure();
|
||
|
$rootfolder = self::$dms->getRootFolder();
|
||
|
$user = self::$dms->getUser(1);
|
||
|
$this->assertInstanceOf(SeedDMS_Core_Folder::class, $rootfolder);
|
||
|
$this->assertEquals(1, $rootfolder->getId());
|
||
|
/* Add a new document */
|
||
|
$filename = self::createTempFile(200);
|
||
|
list($document, $res) = $rootfolder->addDocument(
|
||
|
'Document 1', // name
|
||
|
'', // comment
|
||
|
mktime(23,59,59), // expiration is still today at 23:59:59
|
||
|
$user, // owner
|
||
|
'', // keywords
|
||
|
[], // categories
|
||
|
$filename, // name of file
|
||
|
'file1.txt', // original file name
|
||
|
'.txt', // file type
|
||
|
'text/plain', // mime type
|
||
|
1.0 // sequence
|
||
|
);
|
||
|
$this->assertIsObject($document);
|
||
|
list($document, $res) = $rootfolder->addDocument(
|
||
|
'Document 2', // name
|
||
|
'', // comment
|
||
|
mktime(23,59,59)+1, // expiration is tomorrow today at 0:00:00
|
||
|
$user, // owner
|
||
|
'', // keywords
|
||
|
[], // categories
|
||
|
$filename, // name of file
|
||
|
'file1.txt', // original file name
|
||
|
'.txt', // file type
|
||
|
'text/plain', // mime type
|
||
|
1.0 // sequence
|
||
|
);
|
||
|
$this->assertIsObject($document);
|
||
|
$this->assertTrue(SeedDMS_Core_File::removeFile($filename));
|
||
|
$documents = self::$dms->getDocumentsExpired(0); /* Docs expire today */
|
||
|
$this->assertIsArray($documents);
|
||
|
$this->assertCount(1, $documents);
|
||
|
$documents = self::$dms->getDocumentsExpired(date('Y-m-d')); /* Docs expire today */
|
||
|
$this->assertIsArray($documents);
|
||
|
$this->assertCount(1, $documents);
|
||
|
$documents = self::$dms->getDocumentsExpired(1); /* Docs expire till tomorrow 23:59:59 */
|
||
|
$this->assertIsArray($documents);
|
||
|
$this->assertCount(2, $documents);
|
||
|
$documents = self::$dms->getDocumentsExpired(date('Y-m-d', time()+86400)); /* Docs expire till tomorrow 23:59:59 */
|
||
|
$this->assertIsArray($documents);
|
||
|
$this->assertCount(2, $documents);
|
||
|
$documents = self::$dms->getDocumentsExpired(date('Y-m-d', time()+86400), $user); /* Docs expire till tomorrow 23:59:59 owned by $user */
|
||
|
$this->assertIsArray($documents);
|
||
|
$this->assertCount(2, $documents);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test getDocumentsExpired()
|
||
|
*
|
||
|
* Create two documents which have expired yesterday and the day before
|
||
|
* yesterday
|
||
|
*
|
||
|
* This method uses a real in memory sqlite3 database.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function testGetDocumentsExpiredPast()
|
||
|
{
|
||
|
self::createSimpleFolderStructure();
|
||
|
$rootfolder = self::$dms->getRootFolder();
|
||
|
$user = self::$dms->getUser(1);
|
||
|
$this->assertInstanceOf(SeedDMS_Core_Folder::class, $rootfolder);
|
||
|
$this->assertEquals(1, $rootfolder->getId());
|
||
|
/* Add a new document */
|
||
|
$filename = self::createTempFile(200);
|
||
|
list($document, $res) = $rootfolder->addDocument(
|
||
|
'Document 1', // name
|
||
|
'', // comment
|
||
|
mktime(0,0,0)-1, // expiration was yesterday
|
||
|
$user, // owner
|
||
|
'', // keywords
|
||
|
[], // categories
|
||
|
$filename, // name of file
|
||
|
'file1.txt', // original file name
|
||
|
'.txt', // file type
|
||
|
'text/plain', // mime type
|
||
|
1.0 // sequence
|
||
|
);
|
||
|
$this->assertIsObject($document);
|
||
|
list($document, $res) = $rootfolder->addDocument(
|
||
|
'Document 2', // name
|
||
|
'', // comment
|
||
|
mktime(0,0,0)-1-86400, // expiration the day before yesterday
|
||
|
$user, // owner
|
||
|
'', // keywords
|
||
|
[], // categories
|
||
|
$filename, // name of file
|
||
|
'file1.txt', // original file name
|
||
|
'.txt', // file type
|
||
|
'text/plain', // mime type
|
||
|
1.0 // sequence
|
||
|
);
|
||
|
$this->assertTrue(SeedDMS_Core_File::removeFile($filename));
|
||
|
$this->assertIsObject($document);
|
||
|
$documents = self::$dms->getDocumentsExpired(0); /* No Docs expire today */
|
||
|
$this->assertIsArray($documents);
|
||
|
$this->assertCount(0, $documents);
|
||
|
$documents = self::$dms->getDocumentsExpired(-1); /* Docs expired yesterday */
|
||
|
$this->assertIsArray($documents);
|
||
|
$this->assertCount(1, $documents);
|
||
|
$documents = self::$dms->getDocumentsExpired(-2); /* Docs expired since the day before yesterday */
|
||
|
$this->assertIsArray($documents);
|
||
|
$this->assertCount(2, $documents);
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|