mirror of
				https://git.code.sf.net/p/seeddms/code
				synced 2025-10-31 05:11:27 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			2957 lines
		
	
	
		
			102 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			2957 lines
		
	
	
		
			102 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Implementation of the 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 DmsTest 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);
 | |
|         self::$dbversion = self::$dms->getDBVersion();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 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);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Create a mock admin role object (only used for SeedDMS 6)
 | |
|      *
 | |
|      * @return SeedDMS_Core_User
 | |
|      */
 | |
|     protected function getAdminRole()
 | |
|     {
 | |
|         $role = new SeedDMS_Core_Role(1, 'admin', SeedDMS_Core_Role::role_admin);
 | |
|         return $role;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test checkIfEqual()
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckIfEqual()
 | |
|     {
 | |
|         $user1 = new SeedDMS_Core_User(1, 'user 1', '', '', '', '', '', '', 1);
 | |
|         $group1 = new SeedDMS_Core_Group(1, 'group 1', '');
 | |
|         $group1n = new SeedDMS_Core_Group(1, 'group 1n', '');
 | |
|         $group1c = clone $group1;
 | |
|         $group2 = new SeedDMS_Core_Group(2, 'group 1', '');
 | |
|         $dms = new SeedDMS_Core_DMS(null, '');
 | |
|         $this->assertFalse($dms->checkIfEqual($group1, $user1)); // different classes
 | |
|         $this->assertFalse($dms->checkIfEqual($group1, $group2)); // different id
 | |
|         $this->assertTrue($dms->checkIfEqual($group1, $group1c)); // a clone is always equal
 | |
|         $this->assertTrue($dms->checkIfEqual($group1, $group1n)); // different instances but same id is sufficient to be equal
 | |
|     } /* }}} */
 | |
| 
 | |
|     /**
 | |
|      * Test checkDate()
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckDate()
 | |
|     {
 | |
|         $dms = new SeedDMS_Core_DMS(null, '');
 | |
|         $this->assertTrue($dms->checkDate('2020-02-28 10:12:34'));
 | |
|         $this->assertTrue($dms->checkDate('2020-02-29 10:12:34')); // a leap year
 | |
|         $this->assertFalse($dms->checkDate('2020-02-30 10:12:34')); // feb has never 30 days
 | |
|         $this->assertFalse($dms->checkDate('2021-02-29 10:12:34')); // not a leap year
 | |
|         $this->assertFalse($dms->checkDate('2020-02-28 24:12:34')); // hour is out of range
 | |
|         $this->assertFalse($dms->checkDate('2020-02-28 23:60:34')); // minute is out of range
 | |
|         $this->assertFalse($dms->checkDate('2020-02-28 23:59:60')); // second is out of range
 | |
|         $this->assertFalse($dms->checkDate('2020-02-28 23:59:')); // second is missing
 | |
|         $this->assertTrue($dms->checkDate('2020-02-28', 'Y-m-d')); // just checking the date
 | |
|         $this->assertFalse($dms->checkDate('28.2.2020', 'd.m.Y')); // month must be 01-12
 | |
|         $this->assertTrue($dms->checkDate('28.2.2020', 'd.n.Y')); // month must be 1-12
 | |
|         $this->assertFalse($dms->checkDate('28.02.2020', 'd.n.Y')); // month must be 1-12
 | |
|     } /* }}} */
 | |
| 
 | |
|     /**
 | |
|      * Test getClassname()
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetClassName()
 | |
|     {
 | |
|         /* Do not mess up the global instance self::$dms, but create my own */
 | |
|         $dms = new SeedDMS_Core_DMS(null, '');
 | |
|         $this->assertEquals('SeedDMS_Core_Folder', $dms->getClassname('folder'));
 | |
|         $this->assertEquals('SeedDMS_Core_Document', $dms->getClassname('document'));
 | |
|         $this->assertEquals('SeedDMS_Core_DocumentContent', $dms->getClassname('documentcontent'));
 | |
|         $this->assertEquals('SeedDMS_Core_User', $dms->getClassname('user'));
 | |
|         $this->assertEquals('SeedDMS_Core_Group', $dms->getClassname('group'));
 | |
|         $this->assertFalse($dms->getClassname('foo'));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test setClassname()
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testSetClassName()
 | |
|     {
 | |
|         /* Do not mess up the global instance self::$dms, but create my own */
 | |
|         $dms = new SeedDMS_Core_DMS(null, '');
 | |
|         $this->assertEquals('SeedDMS_Core_Folder', $dms->setClassname('folder', 'MyNewFolderClass'));
 | |
|         $this->assertEquals('MyNewFolderClass', $dms->getClassname('folder'));
 | |
|         $this->assertEquals('MyNewFolderClass', $dms->setClassname('folder', 'MySuperNewFolderClass'));
 | |
|         $this->assertFalse($dms->setClassname('foo', 'MyNewFolderClass'));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addCallback()
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddCallback()
 | |
|     {
 | |
|         /* Do not mess up the global instance self::$dms, but create my own */
 | |
|         $dms = new SeedDMS_Core_DMS(null, '');
 | |
|         /* Add a closure as a callback is just fine */
 | |
|         $this->assertTrue(
 | |
|             $dms->addCallback(
 | |
|                 'onPostSomething', function () {
 | |
|                 }
 | |
|             )
 | |
|         );
 | |
|         /* An empty callback will make addCallback() fail */
 | |
|         $this->assertFalse(
 | |
|             $dms->addCallback(
 | |
|                 '', function () {
 | |
|                 }
 | |
|             )
 | |
|         );
 | |
|         /* Passing a class method is ok */
 | |
|         $this->assertTrue($dms->addCallback('onPostSomething', 'DmsTest::testAddCallback'));
 | |
|         /* Passing a none existing class mehtod makes addCallback() fail */
 | |
|         $this->assertFalse($dms->addCallback('onPostSomething', 'DmsTest::thisMethodDoesNotExist'));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test for hasCallback
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testHasCallback()
 | |
|     {
 | |
|         /* Do not mess up the global instance self::$dms, but create my own */
 | |
|         $dms = new SeedDMS_Core_DMS(null, '');
 | |
|         /* Add a closure as a callback is just fine */
 | |
|         $this->assertTrue(
 | |
|             $dms->addCallback(
 | |
|                 'onPostSomething', function () {
 | |
|                 }
 | |
|             )
 | |
|         );
 | |
|         $this->assertTrue($dms->hasCallback('onPostSomething'));
 | |
|         $this->assertFalse($dms->hasCallback('thisOneDoesNotExist'));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test for getDecorators
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDecorators()
 | |
|     {
 | |
|         /* Do not mess up the global instance self::$dms, but create my own */
 | |
|         $dms = new SeedDMS_Core_DMS(null, '');
 | |
|         $this->assertFalse($dms->getDecorators('folder'));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test for addDecorator
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testaddDecorator()
 | |
|     {
 | |
|         /* Do not mess up the global instance self::$dms, but create my own */
 | |
|         $dms = new SeedDMS_Core_DMS(null, '');
 | |
|         $this->assertTrue($dms->addDecorator('folder', 'MyNewDecorator'));
 | |
|         $decorators = $dms->getDecorators('folder');
 | |
|         $this->assertIsArray($decorators);
 | |
|         $this->assertCount(1, $decorators);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDb()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDb()
 | |
|     {
 | |
|         $this->assertEquals(self::$dbh, self::$dms->getDb());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDBVersion()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDbVersion()
 | |
|     {
 | |
|         $version = self::$dms->getDBVersion();
 | |
|         $this->assertCount(4, $version);
 | |
|         $this->assertGreaterThanOrEqual(5, $version['major']);
 | |
|         $this->assertGreaterThanOrEqual(0, $version['minor']);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDBVersionFailMissingTable()
 | |
|      *
 | |
|      * This method checks if getDBVersion() returns false if the table
 | |
|      * list of the database does not contain the table 'tblVersion'
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDbVersionFailMissingTable()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('TableList')
 | |
|             ->willReturn(['tblFolders', 'tblDocuments']);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $version = $dms->getDBVersion();
 | |
|         $this->assertFalse($version);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDBVersionSqlFail()
 | |
|      *
 | |
|      * This method checks if getDBVersion() returns false if the sql
 | |
|      * for selecting the records in table 'tblVersion' fail
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDbVersionSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblVersion` ORDER BY `major`,`minor`,`subminor` LIMIT 1")
 | |
|             ->willReturn(false);
 | |
|         $db->expects($this->once())
 | |
|             ->method('TableList')
 | |
|             ->willReturn(['tblVersion', 'tblFolders', 'tblDocuments']);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $version = $dms->getDBVersion();
 | |
|         $this->assertFalse($version);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDBVersionNoRecord()
 | |
|      *
 | |
|      * This method checks if getDBVersion() returns false a table 'tblVersion'
 | |
|      * exists but has no record
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDbVersionNoRecord()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblVersion` ORDER BY `major`,`minor`,`subminor` LIMIT 1")
 | |
|             ->willReturn(array());
 | |
|         $db->expects($this->once())
 | |
|             ->method('TableList')
 | |
|             ->willReturn(['tblVersion', 'tblFolders', 'tblDocuments']);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $version = $dms->getDBVersion();
 | |
|         $this->assertFalse($version);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test checkVersion()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckVersion()
 | |
|     {
 | |
|         $this->assertTrue(self::$dms->checkVersion());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test checkVersionFail()
 | |
|      *
 | |
|      * This method checks if checkVersion() returns false if the version
 | |
|      * in table 'tblVersion' does not match the version in the class variable
 | |
|      * $version. To make this method independant of version changes, the
 | |
|      * current version is taken from SeedDMS_Core_DMS::version and modified
 | |
|      * in order to differ from the version stored in the database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testcheckVersionFail()
 | |
|     {
 | |
|         $verstr = (new SeedDMS_Core_DMS(null, ''))->version;
 | |
|         $verarr = explode('.', $verstr);
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblVersion` ORDER BY `major`,`minor`,`subminor` LIMIT 1")
 | |
|             ->willReturn([['major'=>$verarr[0], 'minor'=>$verarr[1]+1]]);
 | |
|         $db->expects($this->once())
 | |
|             ->method('TableList')
 | |
|             ->willReturn(['tblVersion', 'tblFolders', 'tblDocuments']);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $version = $dms->checkVersion();
 | |
|         $this->assertFalse($version);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test checkVersionSqlFail()
 | |
|      *
 | |
|      * This method checks if checkVersion() returns false if the sql
 | |
|      * for selecting the records in table 'tblVersion' fail
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testcheckVersionSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblVersion` ORDER BY `major`,`minor`,`subminor` LIMIT 1")
 | |
|             ->willReturn(false);
 | |
|         $db->expects($this->once())
 | |
|             ->method('TableList')
 | |
|             ->willReturn(['tblVersion', 'tblFolders', 'tblDocuments']);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $version = $dms->checkVersion();
 | |
|         $this->assertFalse($version);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test checkVersionFailMissingTable()
 | |
|      *
 | |
|      * This method checks if checkVersion() returns false if the table
 | |
|      * list of the database does not contain the table 'tblVersion'
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckVersionFailMissingTable()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('TableList')
 | |
|             ->willReturn(['tblFolders', 'tblDocuments']);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $version = $dms->checkVersion();
 | |
|         $this->assertTrue($version); // A missing table tblVersion returns true!
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test checkVersionNoRecord()
 | |
|      *
 | |
|      * This method checks if checkVersion() returns false a table 'tblVersion'
 | |
|      * exists but has no record
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckVersionNoRecord()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblVersion` ORDER BY `major`,`minor`,`subminor` LIMIT 1")
 | |
|             ->willReturn(array());
 | |
|         $db->expects($this->once())
 | |
|             ->method('TableList')
 | |
|             ->willReturn(['tblVersion', 'tblFolders', 'tblDocuments']);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $version = $dms->checkVersion();
 | |
|         $this->assertFalse($version);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test setRootFolderID()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testSetRootFolderID()
 | |
|     {
 | |
|         /* Setting the same root folder is ok */
 | |
|         $oldid = self::$dms->setRootFolderID(1);
 | |
|         $this->assertEquals(1, $oldid);
 | |
|         /* Setting a none existing root folder id will not change the root folder */
 | |
|         $oldid = self::$dms->setRootFolderID(2);
 | |
|         $this->assertFalse($oldid);
 | |
|         /* Make sure the old root folder is still set */
 | |
|         $rootfolder = self::$dms->getRootFolder();
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Folder::class, $rootfolder);
 | |
|         $this->assertEquals(1, $rootfolder->getId());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getRootFolder()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetRootFolder()
 | |
|     {
 | |
|         $rootfolder = self::$dms->getRootFolder();
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Folder::class, $rootfolder);
 | |
|         $this->assertEquals(1, $rootfolder->getId());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test setUser()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testSetUser()
 | |
|     {
 | |
|         $user = self::$dms->getUser(1);
 | |
|         $olduser = self::$dms->setUser($user); // returns null because there is no old user
 | |
|         $this->assertNull($olduser);
 | |
|         $olduser = self::$dms->setUser($user); // second call will return the user set before
 | |
|         $this->assertIsObject($olduser);
 | |
|         $olduser = self::$dms->setUser(null); // old user is still an object
 | |
|         $this->assertIsObject($olduser);
 | |
|         $olduser = self::$dms->setUser(8); // invalid user
 | |
|         $this->assertFalse($olduser);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getLoggedInUser()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetLoggedInUser()
 | |
|     {
 | |
|         $olduser = self::$dms->getLoggedInUser(); // initially this is set to null
 | |
|         $this->assertNull($olduser);
 | |
|         $user = self::$dms->getUser(1);
 | |
|         self::$dms->setUser($user);
 | |
|         $olduser = self::$dms->getLoggedInUser();
 | |
|         $this->assertEquals($olduser->getId(), $user->getId());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDocument()
 | |
|      *
 | |
|      * As there is currently no document, getDocument() must return null.
 | |
|      * If false was returned it would indicated an sql error.
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocument()
 | |
|     {
 | |
|         $document = self::$dms->getDocument(1);
 | |
|         $this->assertNull($document);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDocumentsByUser()
 | |
|      *
 | |
|      * As there is currently no document, getDocumentsByUser() must return
 | |
|      * an empty array.
 | |
|      * If false was returned it would indicated an sql error.
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentsByUser()
 | |
|     {
 | |
|         $documents = self::$dms->getDocumentsByUser(self::$dms->getUser(1));
 | |
|         $this->assertIsArray($documents);
 | |
|         $this->assertCount(0, $documents);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDocumentsLockedByUser()
 | |
|      *
 | |
|      * As there is currently no document, getDocumentsLockedByUser() must return
 | |
|      * an empty array.
 | |
|      * If false was returned it would indicated an sql error.
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentsLockedByUser()
 | |
|     {
 | |
|         $documents = self::$dms->getDocumentsLockedByUser(self::$dms->getUser(1));
 | |
|         $this->assertIsArray($documents);
 | |
|         $this->assertCount(0, $documents);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test makeTimeStamp()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testMakeTimeStamp()
 | |
|     {
 | |
|         /* Assert correct date */
 | |
|         $this->assertEquals(0, self::$dms->makeTimeStamp(1, 0, 0, 1970, 1, 1));
 | |
|         $this->assertEquals(68166000, self::$dms->makeTimeStamp(0, 0, 0, 1972, 2, 29));
 | |
|         /* Assert incorrect dates */
 | |
|         $this->assertFalse(self::$dms->makeTimeStamp(0, 0, 0, 1970, 13, 1), 'Incorrect month not recognized');
 | |
|         $this->assertFalse(self::$dms->makeTimeStamp(0, 0, 0, 1970, 1, 32), 'Incorrect day in january not recognized');
 | |
|         $this->assertFalse(self::$dms->makeTimeStamp(0, 0, 0, 1970, 4, 31), 'Incorrect day in april not recognized');
 | |
|         $this->assertFalse(self::$dms->makeTimeStamp(0, 0, 0, 1970, 2, 29), 'Incorrect day in february not recognized');
 | |
|         $this->assertFalse(self::$dms->makeTimeStamp(24, 0, 0, 1970, 1, 1), 'Incorrect hour not recognized');
 | |
|         $this->assertFalse(self::$dms->makeTimeStamp(0, 60, 0, 1970, 1, 1), 'Incorrect minute not recognized');
 | |
|         $this->assertFalse(self::$dms->makeTimeStamp(0, 0, 60, 1970, 1, 1), 'Incorrect second not recognized');
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test search()
 | |
|      *
 | |
|      * Just search the root folder in different ways. Because the initial database
 | |
|      * does not have any documents, this method will test various ways to
 | |
|      * find the root folder 'DMS' with id=1
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testSearchRootFolder()
 | |
|     {
 | |
|         /* searching for folders/documents in any field */
 | |
|         $result = self::$dms->search(
 | |
|             array(
 | |
|                 'query'=>'DMS'
 | |
|             )
 | |
|         );
 | |
|         $this->assertEquals(1, $result['totalFolders']);
 | |
|         $this->assertCount(1, $result['folders']);
 | |
|         $this->assertEquals(0, $result['totalDocs']);
 | |
|         $this->assertCount(0, $result['docs']);
 | |
| 
 | |
|         /* searching for folders in any field */
 | |
|         $result = self::$dms->search(
 | |
|             array(
 | |
|                 'query'=>'DMS',
 | |
|                 'mode'=>0x2
 | |
|             )
 | |
|         );
 | |
|         $this->assertEquals(1, $result['totalFolders']);
 | |
|         $this->assertCount(1, $result['folders']);
 | |
|         $this->assertEquals(0, $result['totalDocs']);
 | |
|         $this->assertCount(0, $result['docs']);
 | |
| 
 | |
|         /* searching for documents in any field will not return any folders*/
 | |
|         $result = self::$dms->search(
 | |
|             array(
 | |
|                 'query'=>'DMS',
 | |
|                 'mode'=>0x1
 | |
|             )
 | |
|         );
 | |
|         $this->assertEquals(0, $result['totalFolders']);
 | |
|         $this->assertCount(0, $result['folders']);
 | |
|         $this->assertEquals(0, $result['totalDocs']);
 | |
|         $this->assertCount(0, $result['docs']);
 | |
| 
 | |
|         /* searching for folders with a bogus name may not return any folders */
 | |
|         $result = self::$dms->search(
 | |
|             array(
 | |
|                 'query'=>'foo',
 | |
|                 'mode'=>0x2
 | |
|             )
 | |
|         );
 | |
|         $this->assertEquals(0, $result['totalFolders']);
 | |
|         $this->assertCount(0, $result['folders']);
 | |
| 
 | |
|         /* searching for folders by its id */
 | |
|         $result = self::$dms->search(
 | |
|             array(
 | |
|                 'query'=>'1',
 | |
|                 'mode'=>0x2
 | |
|             )
 | |
|         );
 | |
|         $this->assertEquals(1, $result['totalFolders']);
 | |
|         $this->assertCount(1, $result['folders']);
 | |
| 
 | |
|         /* searching for folders by an unknown id */
 | |
|         $result = self::$dms->search(
 | |
|             array(
 | |
|                 'query'=>'2',
 | |
|                 'mode'=>0x2
 | |
|             )
 | |
|         );
 | |
|         $this->assertEquals(0, $result['totalFolders']);
 | |
|         $this->assertCount(0, $result['folders']);
 | |
| 
 | |
|         /* searching for folders with two terms ANDed, but only one matches */
 | |
|         $result = self::$dms->search(
 | |
|             array(
 | |
|                 'query'=>'DMS foo',
 | |
|                 'mode'=>0x2,
 | |
|                 'logicalmode'=>'AND',
 | |
|             )
 | |
|         );
 | |
|         $this->assertEquals(0, $result['totalFolders']);
 | |
|         $this->assertCount(0, $result['folders']);
 | |
| 
 | |
|         /* searching for folders with two terms ORed, but only one matches */
 | |
|         $result = self::$dms->search(
 | |
|             array(
 | |
|                 'query'=>'DMS foo',
 | |
|                 'mode'=>0x2,
 | |
|                 'logicalmode'=>'OR',
 | |
|             )
 | |
|         );
 | |
|         $this->assertEquals(1, $result['totalFolders']);
 | |
|         $this->assertCount(1, $result['folders']);
 | |
| 
 | |
|         /* searching for folders with two terms ANDed, both match, but in different fields (name and id) */
 | |
|         $result = self::$dms->search(
 | |
|             array(
 | |
|                 'query'=>'DMS 1',
 | |
|                 'mode'=>0x2,
 | |
|                 'logicalmode'=>'AND',
 | |
|             )
 | |
|         );
 | |
|         $this->assertEquals(1, $result['totalFolders']);
 | |
|         $this->assertCount(1, $result['folders']);
 | |
| 
 | |
|         /* searching for folders with two terms ANDed, both match, but in different fields (name and id). But only one field is searched. */
 | |
|         $result = self::$dms->search(
 | |
|             array(
 | |
|                 'query'=>'DMS 1',
 | |
|                 'mode'=>0x2,
 | |
|                 'logicalmode'=>'AND',
 | |
|                 'searchin'=>array(2,3), // name, comment
 | |
|             )
 | |
|         );
 | |
|         $this->assertEquals(0, $result['totalFolders']);
 | |
|         $this->assertCount(0, $result['folders']);
 | |
| 
 | |
|         /* searching for folders below a start folder will not find the folder 'DMS'
 | |
|          * anymore, because the start folder itself will not be found.
 | |
|          */
 | |
|         $result = self::$dms->search(
 | |
|             array(
 | |
|                 'query'=>'DMS',
 | |
|                 'mode'=>0x2,
 | |
|                 'startFolder'=>self::$dms->getRootFolder()
 | |
|             )
 | |
|         );
 | |
|         $this->assertEquals(0, $result['totalFolders']);
 | |
|         $this->assertCount(0, $result['folders']);
 | |
| 
 | |
|         /* Restrict search to the owner of the folder 'DMS'
 | |
|          */
 | |
|         $result = self::$dms->search(
 | |
|             array(
 | |
|                 'query'=>'DMS',
 | |
|                 'mode'=>0x2,
 | |
|                 'owner'=>self::$dms->getUser(1)
 | |
|             )
 | |
|         );
 | |
|         $this->assertEquals(1, $result['totalFolders']);
 | |
|         $this->assertCount(1, $result['folders']);
 | |
| 
 | |
|         /* Restrict search to user who does not own a document
 | |
|          */
 | |
|         $result = self::$dms->search(
 | |
|             array(
 | |
|                 'query'=>'DMS',
 | |
|                 'mode'=>0x2,
 | |
|                 'owner'=>self::$dms->getUser(2)
 | |
|             )
 | |
|         );
 | |
|         $this->assertEquals(0, $result['totalFolders']);
 | |
|         $this->assertCount(0, $result['folders']);
 | |
| 
 | |
|         /* Restrict search to a list of owners (in this case all users)
 | |
|          */
 | |
|         $result = self::$dms->search(
 | |
|             array(
 | |
|                 'query'=>'DMS',
 | |
|                 'mode'=>0x2,
 | |
|                 'owner'=>self::$dms->getAllUsers()
 | |
|             )
 | |
|         );
 | |
|         $this->assertEquals(1, $result['totalFolders']);
 | |
|         $this->assertCount(1, $result['folders']);
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getFolder()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetFolder()
 | |
|     {
 | |
|         $folder = self::$dms->getFolder(1);
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Folder::class, $folder);
 | |
|         $this->assertEquals(1, $folder->getId());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getFolderByName()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetFolderByName()
 | |
|     {
 | |
|         $folder = self::$dms->getFolderByName('DMS');
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Folder::class, $folder);
 | |
|         $this->assertEquals(1, $folder->getId());
 | |
|         $folder = self::$dms->getFolderByName('FOO');
 | |
|         $this->assertNull($folder);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test checkFolders()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckFolders()
 | |
|     {
 | |
|         $errors = self::$dms->checkFolders();
 | |
|         $this->assertIsArray($errors);
 | |
|         $this->assertCount(0, $errors);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test checkFoldersSqlFail()
 | |
|      *
 | |
|      * This test catches the case when the sql statement for getting all
 | |
|      * folders fails.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckFoldersSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblFolders`")
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $this->assertFalse($dms->checkFolders());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test checkFoldersFailNoParent()
 | |
|      *
 | |
|      * This test catches the case when a folder's parent is not present
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckFoldersFailNoParent()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblFolders`")
 | |
|             ->willReturn(
 | |
|                 array(
 | |
|                 array('id'=>1, 'name'=>'DMS', 'parent'=>0, 'folderList'=>''),
 | |
|                 array('id'=>5, 'name'=>'Subfolder', 'parent'=>3, 'folderList'=>':1:'),
 | |
|                 )
 | |
|             );
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $errors = $dms->checkFolders();
 | |
|         $this->assertIsArray($errors);
 | |
|         $this->assertCount(1, $errors); // there should be 1 error
 | |
|         $this->assertArrayHasKey(5, $errors); // folder with id=5 has the wrong parent
 | |
|         $this->assertEquals('Missing parent', $errors[5]['msg']);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test checkFoldersFailWrongFolderList()
 | |
|      *
 | |
|      * This test catches the case when a folder's parent is not present
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckFoldersFailWrongFolderList()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblFolders`")
 | |
|             ->willReturn(
 | |
|                 array(
 | |
|                 array('id'=>1, 'name'=>'DMS', 'parent'=>0, 'folderList'=>''),
 | |
|                 array('id'=>5, 'name'=>'Subfolder', 'parent'=>1, 'folderList'=>':1:2:'),
 | |
|                 )
 | |
|             );
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $errors = $dms->checkFolders();
 | |
|         $this->assertIsArray($errors);
 | |
|         $this->assertCount(1, $errors); // there should be 1 error
 | |
|         $this->assertArrayHasKey(5, $errors); // folder with id=5 has the wrong parent
 | |
|         $this->assertStringContainsString('Wrong folder list', $errors[5]['msg']);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|     /**
 | |
|      * Test checkDocuments()
 | |
|      *
 | |
|      * The intitial database does not have any documents which makes this
 | |
|      * test less usefull.
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckDocuments()
 | |
|     {
 | |
|         $errors = self::$dms->checkDocuments();
 | |
|         $this->assertIsArray($errors);
 | |
|         $this->assertCount(0, $errors);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test checkDocumentsSqlFoldersFail()
 | |
|      *
 | |
|      * This test catches the case when the sql statement for getting all
 | |
|      * folders fails.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckDocumentsSqlFoldersFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblFolders`")
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $this->assertFalse($dms->checkDocuments());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test checkDocumentsSqlDocumentsFail()
 | |
|      *
 | |
|      * This test catches the case when the sql statement for getting all
 | |
|      * documents fails, after getting all folders succeeded.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckDocumentsSqlDocumentsFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->exactly(2))
 | |
|             ->method('getResultArray')
 | |
|             ->will(
 | |
|                 $this->returnValueMap(
 | |
|                     array(
 | |
|                         array("SELECT * FROM `tblFolders`", true, array(
 | |
|                             array('id'=>1, 'name'=>'DMS', 'parent'=>0, 'folderList'=>'')
 | |
|                         )),
 | |
|                         array("SELECT * FROM `tblDocuments`", true, false)
 | |
|                     )
 | |
|                 )
 | |
|             );
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $this->assertFalse($dms->checkDocuments());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test checkDocumentsFailNoParent()
 | |
|      *
 | |
|      * This test catches the case when a documents's parent is not present
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckDocumentsFailNoParent()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->exactly(2))
 | |
|             ->method('getResultArray')
 | |
|             ->will(
 | |
|                 $this->returnValueMap(
 | |
|                     array(
 | |
|                         array("SELECT * FROM `tblFolders`", true, array(
 | |
|                             array('id'=>1, 'name'=>'DMS', 'parent'=>0, 'folderList'=>''),
 | |
|                             array('id'=>5, 'name'=>'Subfolder', 'parent'=>1, 'folderList'=>':1:'),
 | |
|                         )),
 | |
|                         array("SELECT * FROM `tblDocuments`", true, array(
 | |
|                             array('id'=>1, 'name'=>'Document 1', 'folder'=>1, 'folderList'=>':1:'),
 | |
|                             array('id'=>2, 'name'=>'Document 2', 'folder'=>2, 'folderList'=>':1:5:'),
 | |
|                         ))
 | |
|                     )
 | |
|                 )
 | |
|             );
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $errors = $dms->checkDocuments();
 | |
|         $this->assertIsArray($errors);
 | |
|         $this->assertCount(1, $errors); // there should be 1 error
 | |
|         $this->assertArrayHasKey(2, $errors); // document with id=2 has the wrong parent
 | |
|         $this->assertEquals('Missing parent', $errors[2]['msg']);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test checkDocumentsFailWrongFolderList()
 | |
|      *
 | |
|      * This test catches the case when a documents's parent is not present
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckDocumentsFailWrongFolderList()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->exactly(2))
 | |
|             ->method('getResultArray')
 | |
|             ->will(
 | |
|                 $this->returnValueMap(
 | |
|                     array(
 | |
|                         array("SELECT * FROM `tblFolders`", true, array(
 | |
|                             array('id'=>1, 'name'=>'DMS', 'parent'=>0, 'folderList'=>''),
 | |
|                             array('id'=>5, 'name'=>'Subfolder', 'parent'=>1, 'folderList'=>':1:'),
 | |
|                         )),
 | |
|                         array("SELECT * FROM `tblDocuments`", true, array(
 | |
|                             array('id'=>1, 'name'=>'Document 1', 'folder'=>1, 'folderList'=>':1:'),
 | |
|                             array('id'=>2, 'name'=>'Document 2', 'folder'=>5, 'folderList'=>':1:2:'),
 | |
|                         ))
 | |
|                     )
 | |
|                 )
 | |
|             );
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $errors = $dms->checkDocuments();
 | |
|         $this->assertIsArray($errors);
 | |
|         $this->assertCount(1, $errors); // there should be 1 error
 | |
|         $this->assertArrayHasKey(2, $errors); // document with id=2 has the wrong parent
 | |
|         $this->assertStringContainsString('Wrong folder list', $errors[2]['msg']);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getUser()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetUser()
 | |
|     {
 | |
|         $user = self::$dms->getUser(1);
 | |
|         $this->assertInstanceOf(SeedDMS_Core_User::class, $user);
 | |
|         $this->assertEquals(1, $user->getId());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getUserByLogin()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetUserByLogin()
 | |
|     {
 | |
|         $user = self::$dms->getUserByLogin('admin');
 | |
|         $this->assertInstanceOf(SeedDMS_Core_User::class, $user);
 | |
|         $this->assertEquals('admin', $user->getLogin());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getUserByEmail()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetUserByEmail()
 | |
|     {
 | |
|         $user = self::$dms->getUserByEmail('info@seeddms.org');
 | |
|         $this->assertInstanceOf(SeedDMS_Core_User::class, $user);
 | |
|         $this->assertEquals('admin', $user->getLogin());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAllUsers()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAllUsers()
 | |
|     {
 | |
|         $users = self::$dms->getAllUsers();
 | |
|         $this->assertIsArray($users);
 | |
|         $this->assertCount(2, $users);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addUser()
 | |
|      *
 | |
|      * Add a new user and retrieve it afterwards. Also check if the number
 | |
|      * of users has increased by one. Add a user with the same name a
 | |
|      * second time and check if it returns false.
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddUser()
 | |
|     {
 | |
|         /* Adding a new user */
 | |
|         $user = self::$dms->addUser('new user', 'pwd', 'Full Name', 'newuser@seeddms.org', 'en_GB', 'bootstrap', 'with comment');
 | |
|         $this->assertIsObject($user);
 | |
|         $this->assertEquals('new user', $user->getLogin());
 | |
|         $this->assertEquals('with comment', $user->getComment());
 | |
| 
 | |
|         /* Adding a user with the same login must fail */
 | |
|         $user = self::$dms->addUser('new user', 'pwd', 'Full Name', 'newuser@seeddms.org', 'en_GB', 'bootstrap', 'with comment');
 | |
|         $this->assertFalse($user);
 | |
| 
 | |
|         /* There should be 3 users now */
 | |
|         $users = self::$dms->getAllUsers();
 | |
|         $this->assertIsArray($users);
 | |
|         $this->assertCount(3, $users);
 | |
| 
 | |
|         /* Check if setting the password expiration to 'now' works */
 | |
|         $now = date('Y-m-d H:i:s');
 | |
|         $user = self::$dms->addUser('new user pwdexpiration 1', 'pwd', 'Full Name', 'newuser@seeddms.org', 'en_GB', 'bootstrap', 'with comment', '', false, false, 'now');
 | |
|         $this->assertEquals($now, $user->getPwdExpiration());
 | |
|         $now = date('Y-m-d H:i:s');
 | |
|         $user = self::$dms->addUser('new user pwdexpiration 2', 'pwd', 'Full Name', 'newuser@seeddms.org', 'en_GB', 'bootstrap', 'with comment', '', false, false, $now);
 | |
|         $this->assertEquals($now, $user->getPwdExpiration());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addUserWithPostAddHook()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddUserWithPostAddHook()
 | |
|     {
 | |
|         /* Add the 'onPostAddUser' callback */
 | |
|         $ret = 0;
 | |
|         $callback = function ($param, $user) use (&$ret) {
 | |
|             $ret = 1; 
 | |
|         };
 | |
|         self::$dms->addCallback('onPostAddUser', $callback, 1);
 | |
|         /* Adding a new user */
 | |
|         $user = self::$dms->addUser('new user', 'pwd', 'Full Name', 'newuser@seeddms.org', 'en_GB', 'bootstrap', 'with comment');
 | |
|         $this->assertIsObject($user);
 | |
|         $this->assertEquals('new user', $user->getLogin());
 | |
|         $this->assertEquals(1, $ret);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addUser() with sql failure
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddUserSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResult')
 | |
|             ->with($this->stringContains("INSERT INTO `tblUsers`"))
 | |
|             ->willReturn(false);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblUsers` WHERE `login` = ")
 | |
|             ->willReturn([]);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         if(self::$dbversion['major'] < 6)
 | |
|             $role = 1;
 | |
|         else
 | |
|             $role = $this->getAdminRole();
 | |
|         $user = $dms->addUser('new user', 'pwd', 'Full Name', 'newuser@seeddms.org', 'en_GB', 'bootstrap', 'with comment', $role);
 | |
|         $this->assertFalse($user);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getGroup()
 | |
|      *
 | |
|      * Get a group by its id
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetGroup()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblGroups` WHERE `id` = 1")
 | |
|             ->willReturn([['id'=>1, 'name'=>'foo', 'comment'=>'']]);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $group = $dms->getGroup(1);
 | |
|         $this->assertIsObject($group);
 | |
|         $this->assertEquals(1, $group->getId());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getGroupByName()
 | |
|      *
 | |
|      * Get a group by its name
 | |
|      *
 | |
|      * qstr must be mocked because it is used in the sql statement to quote
 | |
|      * the name.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetGroupByName()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblGroups` WHERE `name` = 'foo'")
 | |
|             ->willReturn([['id'=>1, 'name'=>'foo', 'comment'=>'']]);
 | |
|         $db->expects($this->once())
 | |
|             ->method('qstr')
 | |
|             ->will(
 | |
|                 $this->returnCallback(
 | |
|                     function ($a) {
 | |
|                         return "'".$a."'";
 | |
|                     }
 | |
|                 )
 | |
|             );
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $group = $dms->getGroupByName('foo');
 | |
|         $this->assertIsObject($group);
 | |
|         $this->assertEquals('foo', $group->getName());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAllGroups()
 | |
|      *
 | |
|      * The intitial database does not have any groups
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAllGroups()
 | |
|     {
 | |
|         $groups = self::$dms->getAllGroups();
 | |
|         $this->assertIsArray($groups);
 | |
|         $this->assertCount(0, $groups);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addGroup()
 | |
|      *
 | |
|      * Add a new group and retrieve it afterwards. Also check if the number
 | |
|      * of groups has increased by one. Add a group with the same name a
 | |
|      * second time and check if it returns false.
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddGroup()
 | |
|     {
 | |
|         /* Adding a new group */
 | |
|         $group = self::$dms->addGroup('new group', 'with comment');
 | |
|         $this->assertIsObject($group);
 | |
|         $this->assertEquals('new group', $group->getName());
 | |
|         /* Adding a group with the same name must fail */
 | |
|         $group = self::$dms->addGroup('new group', 'with comment');
 | |
|         $this->assertFalse($group);
 | |
|         /* There should be one group now */
 | |
|         $groups = self::$dms->getAllGroups();
 | |
|         $this->assertIsArray($groups);
 | |
|         $this->assertCount(1, $groups);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addGroupWithPostAddHook()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddGroupWithPostAddHook()
 | |
|     {
 | |
|         /* Add the 'onPostAddGroup' callback */
 | |
|         $ret = 0;
 | |
|         $callback = function ($param, $group) use (&$ret) {
 | |
|             $ret = 1; 
 | |
|         };
 | |
|         self::$dms->addCallback('onPostAddGroup', $callback, 1);
 | |
|         /* Adding a new group */
 | |
|         $group = self::$dms->addGroup('new group', 'with comment');
 | |
|         $this->assertIsObject($group);
 | |
|         $this->assertEquals('new group', $group->getName());
 | |
|         $this->assertEquals(1, $ret);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addGroup() with sql failure
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddGroupSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResult')
 | |
|             ->with($this->stringContains("INSERT INTO `tblGroups`"))
 | |
|             ->willReturn(false);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblGroups` WHERE `name` = ")
 | |
|             ->willReturn([]);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $group = $dms->addGroup('new group', 'with comment');
 | |
|         $this->assertFalse($group);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAllKeywordCategories()
 | |
|      *
 | |
|      * The intitial database does not have any keyword categories
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAllKeywordCategories()
 | |
|     {
 | |
|         $cats = self::$dms->getAllKeywordCategories();
 | |
|         $this->assertIsArray($cats);
 | |
|         $this->assertCount(0, $cats);
 | |
|         /* Even passing bogus ids is handled propperly */
 | |
|         $cats = self::$dms->getAllKeywordCategories(['kk', '0', 3, true]);
 | |
|         $this->assertIsArray($cats);
 | |
|         $this->assertCount(0, $cats);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAllUserKeywordCategories()
 | |
|      *
 | |
|      * Method getAllUserKeywordCategories() actually uses
 | |
|      * getAllKeywordCategories()
 | |
|      *
 | |
|      * The intitial database does not have any keyword categories
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAllUserKeywordCategories()
 | |
|     {
 | |
|         $cats = self::$dms->getAllUserKeywordCategories(1);
 | |
|         $this->assertIsArray($cats);
 | |
|         $this->assertCount(0, $cats);
 | |
|         /* Passing a none existing user id will return an empty array */
 | |
|         $cats = self::$dms->getAllUserKeywordCategories(3);
 | |
|         $this->assertIsArray($cats);
 | |
|         $this->assertCount(0, $cats);
 | |
|         /* Passing an invalid user id will return false */
 | |
|         $cats = self::$dms->getAllUserKeywordCategories(0);
 | |
|         $this->assertFalse($cats);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAllKeywordCategories() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAllKeywordCategoriesSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblKeywordCategories`"))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $cats = $dms->getAllKeywordCategories();
 | |
|         $this->assertFalse($cats);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addKeywordCategory()
 | |
|      *
 | |
|      * Add a new keyword category and retrieve it afterwards. Also check if the
 | |
|      * number of keyword categories has increased by one. Add a keyword category
 | |
|      * with the same name a second time and check if it returns false.
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddKeywordCategory()
 | |
|     {
 | |
|         /* Adding a new keyword category */
 | |
|         $cat = self::$dms->addKeywordCategory(1, 'new category');
 | |
|         $this->assertIsObject($cat);
 | |
|         $this->assertEquals('new category', $cat->getName());
 | |
| 
 | |
|         /* Adding a keyword category for the same user and with the same name must fail */
 | |
|         $cat = self::$dms->addKeywordCategory(1, 'new category');
 | |
|         $this->assertFalse($cat);
 | |
| 
 | |
|         /* Adding a keyword category with a non existing user id must fail */
 | |
|         $cat = self::$dms->addKeywordCategory(0, 'new category');
 | |
|         $this->assertFalse($cat);
 | |
| 
 | |
|         /* Adding a keyword category with an empty name must fail */
 | |
|         $cat = self::$dms->addKeywordCategory(1, ' ');
 | |
|         $this->assertFalse($cat);
 | |
| 
 | |
|         /* Adding a keyword category with a non existing user id must fail */
 | |
|         //      $cat = self::$dms->addKeywordCategory(3, 'new category');
 | |
|         //      $this->assertFalse($cat);
 | |
| 
 | |
|         /* There should be 1 keyword category now */
 | |
|         $cats = self::$dms->getAllKeywordCategories();
 | |
|         $this->assertIsArray($cats);
 | |
|         $this->assertCount(1, $cats);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addKeywordCategoryWithPostAddHook()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddKeywordCategoryWithPostAddHook()
 | |
|     {
 | |
|         /* Add the 'onPostAddKeywordCategory' callback */
 | |
|         $ret = 0;
 | |
|         $callback = function ($param, $cat) use (&$ret) {
 | |
|             $ret = 1; 
 | |
|         };
 | |
|         self::$dms->addCallback('onPostAddKeywordCategory', $callback, 1);
 | |
|         /* Adding a new keyword category */
 | |
|         $cat = self::$dms->addKeywordCategory(1, 'new category');
 | |
|         $this->assertIsObject($cat);
 | |
|         $this->assertEquals('new category', $cat->getName());
 | |
|         $this->assertEquals(1, $ret);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addKeywordCategory() with sql failure
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddKeywordCategorySqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResult')
 | |
|             ->with($this->stringContains("INSERT INTO `tblKeywordCategories`"))
 | |
|             ->willReturn(false);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblKeywordCategories` WHERE `name` ="))
 | |
|             ->willReturn([]);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $cat = $dms->addKeywordCategory(1, 'new category');
 | |
|         $this->assertFalse($cat);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getKeywordCategory()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetKeywordCategory()
 | |
|     {
 | |
|         $cat = self::$dms->addKeywordCategory(1, 'new category');
 | |
|         $cat = self::$dms->getKeywordCategory(1);
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Keywordcategory::class, $cat);
 | |
|         $this->assertEquals(1, $cat->getId());
 | |
|         /* Return false if the id is invalid */
 | |
|         $cat = self::$dms->getKeywordCategory(0);
 | |
|         $this->assertFalse($cat);
 | |
|         /* Return null if the keyword category with the id does not exist */
 | |
|         $cat = self::$dms->getKeywordCategory(2);
 | |
|         $this->assertNull($cat);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getKeywordCategory() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetKeywordCategorySqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblKeywordCategories` WHERE `id` = 1")
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $cat = $dms->getKeywordCategory(1);
 | |
|         $this->assertFalse($cat);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getKeywordCategoryByName()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetKeywordCategoryByName()
 | |
|     {
 | |
|         $cat = self::$dms->addKeywordCategory(1, 'new category');
 | |
|         $cat = self::$dms->getKeywordCategory(1);
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Keywordcategory::class, $cat);
 | |
|         $this->assertEquals(1, $cat->getId());
 | |
|         /* Return false if the user id is invalid */
 | |
|         $cat = self::$dms->getKeywordCategoryByName('new category', 0);
 | |
|         $this->assertFalse($cat);
 | |
|         /* Return null if the keyword category with the passed name does not exist */
 | |
|         $cat = self::$dms->getKeywordCategoryByName('foo', 1);
 | |
|         $this->assertNull($cat);
 | |
|         /* Return category if the keyword category with the passed name exists */
 | |
|         $cat = self::$dms->getKeywordCategoryByName('new category', 1);
 | |
|         $this->assertIsObject($cat);
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Keywordcategory::class, $cat);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getKeywordCategoryByName() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetKeywordCategoryByNameSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblKeywordCategories` WHERE `name` ="))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $cat = $dms->getKeywordCategoryByName('foo', 1);
 | |
|         $this->assertFalse($cat);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDocumentCategories()
 | |
|      *
 | |
|      * The intitial database does not have any document categories
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentCategories()
 | |
|     {
 | |
|         $cats = self::$dms->getDocumentCategories();
 | |
|         $this->assertIsArray($cats);
 | |
|         $this->assertCount(0, $cats);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDocumentCategories() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentCategoriesNameSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblCategory`"))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $cats = $dms->getDocumentCategories();
 | |
|         $this->assertFalse($cats);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDocumentCategory()
 | |
|      *
 | |
|      * The intitial database does not have any document categories
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentCategory()
 | |
|     {
 | |
|         /* Adding a new keyword category */
 | |
|         $cat = self::$dms->addDocumentCategory('new category');
 | |
|         $this->assertIsObject($cat);
 | |
|         $this->assertEquals('new category', $cat->getName());
 | |
| 
 | |
|         $cat = self::$dms->getDocumentCategory($cat->getId());
 | |
|         $this->assertIsObject($cat);
 | |
| 
 | |
|         /* Return false if the id is out of range */
 | |
|         $cat = self::$dms->getDocumentCategory(0);
 | |
|         $this->assertFalse($cat);
 | |
| 
 | |
|         /* Return null if the keyword category with the id does not exist */
 | |
|         $cat = self::$dms->getDocumentCategory(2);
 | |
|         $this->assertNull($cat);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDocumentCategory() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentCategorySqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with("SELECT * FROM `tblCategory` WHERE `id` = 1")
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $cat = $dms->getDocumentCategory(1);
 | |
|         $this->assertFalse($cat);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDocumentCategoryByName()
 | |
|      *
 | |
|      * The intitial database does not have any document categories
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentCategoryByName()
 | |
|     {
 | |
|         /* Adding a new keyword category with leading and trailing spaces*/
 | |
|         $cat = self::$dms->addDocumentCategory(' new category ');
 | |
|         $this->assertIsObject($cat);
 | |
|         $this->assertEquals('new category', $cat->getName());
 | |
| 
 | |
|         $cat = self::$dms->getDocumentCategoryByName($cat->getName());
 | |
|         $this->assertIsObject($cat);
 | |
| 
 | |
|         $cat = self::$dms->getDocumentCategoryByName(' ');
 | |
|         $this->assertFalse($cat);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDocumentCategoryByName() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentCategoryByNameSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblCategory` WHERE `name`="))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $cat = $dms->getDocumentCategoryByName('foo');
 | |
|         $this->assertFalse($cat);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addDocumentCategory()
 | |
|      *
 | |
|      * Add a new keyword category and retrieve it afterwards. Also check if the
 | |
|      * number of keyword categories has increased by one. Add a keyword category
 | |
|      * with the same name a second time and check if it returns false.
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddDocumentCategory()
 | |
|     {
 | |
|         /* Adding a new keyword category */
 | |
|         $cat = self::$dms->addDocumentCategory('new category');
 | |
|         $this->assertIsObject($cat);
 | |
|         $this->assertEquals('new category', $cat->getName());
 | |
| 
 | |
|         /* Adding a document category with the same name must fail */
 | |
|         $cat = self::$dms->addDocumentCategory('new category');
 | |
|         $this->assertFalse($cat);
 | |
| 
 | |
|         /* Adding a document category with an empty name must fail */
 | |
|         $cat = self::$dms->addDocumentCategory(' ');
 | |
|         $this->assertFalse($cat);
 | |
| 
 | |
|         /* There should be 1 document category now */
 | |
|         $cats = self::$dms->getDocumentCategories();
 | |
|         $this->assertIsArray($cats);
 | |
|         $this->assertCount(1, $cats);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addDocumentCategoryWithPostAddHook()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddDocumentCategoryWithPostAddHook()
 | |
|     {
 | |
|         /* Add the 'onPostAddDocumentCategory' callback */
 | |
|         $ret = 0;
 | |
|         $callback = function ($param, $group) use (&$ret) {
 | |
|             $ret = 1; 
 | |
|         };
 | |
|         self::$dms->addCallback('onPostAddDocumentCategory', $callback, 1);
 | |
|         /* Adding a new group */
 | |
|         $cat = self::$dms->addDocumentCategory('new category');
 | |
|         $this->assertIsObject($cat);
 | |
|         $this->assertEquals('new category', $cat->getName());
 | |
|         $this->assertEquals(1, $ret);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addDocumentCategory() with sql failure
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddDocumentCategorySqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResult')
 | |
|             ->with($this->stringContains("INSERT INTO `tblCategory`"))
 | |
|             ->willReturn(false);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblCategory` WHERE `name`="))
 | |
|             ->willReturn([]);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $cat = $dms->addDocumentCategory('new category');
 | |
|         $this->assertFalse($cat);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAttributeDefinition() with a none existing workflow
 | |
|      *
 | |
|      * The intitial database does not have any workflows
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAttributeDefinitionNoExists()
 | |
|     {
 | |
|         $workflow = self::$dms->getAttributeDefinition(1);
 | |
|         $this->assertNull($workflow);
 | |
|         /* Passing an id not a numeric value returns false */
 | |
|         $workflow = self::$dms->getAttributeDefinition('foo');
 | |
|         $this->assertFalse($workflow);
 | |
|         /* Passing an id out of range returns false */
 | |
|         $workflow = self::$dms->getAttributeDefinition(0);
 | |
|         $this->assertFalse($workflow);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAttributeDefinition() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAttributeDefinitionSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblAttributeDefinitions` WHERE `id` ="))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $attrdef = $dms->getAttributeDefinition(1);
 | |
|         $this->assertFalse($attrdef);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAttributeDefinitionByName() with a none existing workflow
 | |
|      *
 | |
|      * The intitial database does not have any workflows
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAttributeDefinitionByNameNoExists()
 | |
|     {
 | |
|         $workflow = self::$dms->getAttributeDefinitionByName('foo');
 | |
|         $this->assertNull($workflow);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAttributeDefinitionByName() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAttributeDefinitionByNameSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblAttributeDefinitions` WHERE `name` ="))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $attrdef = $dms->getAttributeDefinitionByName('foo');
 | |
|         $this->assertFalse($attrdef);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAllAttributeDefinitions()
 | |
|      *
 | |
|      * The intitial database does not have any attribute definitions
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAllAttributeDefinitions()
 | |
|     {
 | |
|         $attrdefs = self::$dms->getAllAttributeDefinitions();
 | |
|         $this->assertIsArray($attrdefs);
 | |
|         $this->assertCount(0, $attrdefs);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAllAttributeDefinitions() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAllAttributeDefinitionsSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblAttributeDefinitions`"))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $attrdef = $dms->getAllAttributeDefinitions();
 | |
|         $this->assertFalse($attrdef);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addAttributeDefinition()
 | |
|      *
 | |
|      * Add a new group and retrieve it afterwards. Also check if the number
 | |
|      * of groups has increased by one. Add a group with the same name a
 | |
|      * second time and check if it returns false.
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddAttributeDefinition()
 | |
|     {
 | |
|         /* Adding a new attribute definition */
 | |
|         $attrdef = self::$dms->addAttributeDefinition('new attribute definition', SeedDMS_Core_AttributeDefinition::objtype_folder, SeedDMS_Core_AttributeDefinition::type_int, false, 0, 0, '', '');
 | |
|         $this->assertIsObject($attrdef);
 | |
|         $this->assertEquals('new attribute definition', $attrdef->getName());
 | |
|         /* Get the new attribute definition by its id */
 | |
|         $newattrdef = self::$dms->getAttributeDefinition($attrdef->getId());
 | |
|         $this->assertIsObject($newattrdef);
 | |
|         $this->assertEquals($attrdef->getId(), $newattrdef->getId());
 | |
|         /* Get the new attribute definition by its name */
 | |
|         $newattrdef = self::$dms->getAttributeDefinitionByName('new attribute definition');
 | |
|         $this->assertIsObject($newattrdef);
 | |
|         $this->assertEquals($attrdef->getId(), $newattrdef->getId());
 | |
|         /* Adding an attribute definition with the same name must fail */
 | |
|         $attrdef = self::$dms->addAttributeDefinition('new attribute definition', SeedDMS_Core_AttributeDefinition::objtype_folder, SeedDMS_Core_AttributeDefinition::type_int, false, 0, 0, '', '');
 | |
|         $this->assertFalse($attrdef);
 | |
|         /* Adding an attribute definition with an empty name must fail */
 | |
|         $attrdef = self::$dms->addAttributeDefinition(' ', SeedDMS_Core_AttributeDefinition::objtype_folder, SeedDMS_Core_AttributeDefinition::type_int, false, 0, 0, '', '');
 | |
|         $this->assertFalse($attrdef);
 | |
|         /* Adding an attribute definition with an invalid object type must fail */
 | |
|         $attrdef = self::$dms->addAttributeDefinition('no object type', -1, SeedDMS_Core_AttributeDefinition::type_int, false, 0, 0, '', '');
 | |
|         $this->assertFalse($attrdef);
 | |
|         /* Adding an attribute definition without a type must fail */
 | |
|         $attrdef = self::$dms->addAttributeDefinition('no type', SeedDMS_Core_AttributeDefinition::objtype_folder, 0, 0, '', '');
 | |
|         $this->assertFalse($attrdef);
 | |
|         /* There should be one attribute definition now */
 | |
|         $attrdefs = self::$dms->getAllAttributeDefinitions();
 | |
|         $this->assertIsArray($attrdefs);
 | |
|         $this->assertCount(1, $attrdefs);
 | |
|         /* There should be one attribute definition of object type folder now */
 | |
|         $attrdefs = self::$dms->getAllAttributeDefinitions(SeedDMS_Core_AttributeDefinition::objtype_folder);
 | |
|         $this->assertIsArray($attrdefs);
 | |
|         $this->assertCount(1, $attrdefs);
 | |
|         /* The object type can also be passed as an array */
 | |
|         $attrdefs = self::$dms->getAllAttributeDefinitions([SeedDMS_Core_AttributeDefinition::objtype_folder]);
 | |
|         $this->assertIsArray($attrdefs);
 | |
|         $this->assertCount(1, $attrdefs);
 | |
|         /* Adding more attribute definitions of different object type */
 | |
|         $attrdef = self::$dms->addAttributeDefinition('new attribute definition all', SeedDMS_Core_AttributeDefinition::objtype_all, SeedDMS_Core_AttributeDefinition::type_int, false, 0, 0, '', '');
 | |
|         $this->assertIsObject($attrdef);
 | |
|         $this->assertEquals('new attribute definition all', $attrdef->getName());
 | |
|         $attrdef = self::$dms->addAttributeDefinition('new attribute definition document', SeedDMS_Core_AttributeDefinition::objtype_all, SeedDMS_Core_AttributeDefinition::type_int, false, 0, 0, '', '');
 | |
|         $this->assertIsObject($attrdef);
 | |
|         $this->assertEquals('new attribute definition document', $attrdef->getName());
 | |
|         $attrdef = self::$dms->addAttributeDefinition('new attribute definition documentcontent', SeedDMS_Core_AttributeDefinition::objtype_all, SeedDMS_Core_AttributeDefinition::type_int, false, 0, 0, '', '');
 | |
|         $this->assertIsObject($attrdef);
 | |
|         $this->assertEquals('new attribute definition documentcontent', $attrdef->getName());
 | |
|         /* There should be four attribute definitions now */
 | |
|         $attrdefs = self::$dms->getAllAttributeDefinitions();
 | |
|         $this->assertIsArray($attrdefs);
 | |
|         $this->assertCount(4, $attrdefs);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAllWorkflows()
 | |
|      *
 | |
|      * The intitial database does not have any workflows
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAllWorkflows()
 | |
|     {
 | |
|         $workflows = self::$dms->getAllWorkflows();
 | |
|         $this->assertIsArray($workflows);
 | |
|         $this->assertCount(0, $workflows);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAllWorkflows() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAllWorkflowsSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblWorkflows`"))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $workflows = $dms->getAllWorkflows();
 | |
|         $this->assertFalse($workflows);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getWorkflow() with a none existing workflow
 | |
|      *
 | |
|      * The intitial database does not have any workflows
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetWorkflowNoExists()
 | |
|     {
 | |
|         $workflow = self::$dms->getWorkflow(1);
 | |
|         $this->assertNull($workflow);
 | |
|         /* Passing an id not a numeric value returns false */
 | |
|         $workflow = self::$dms->getWorkflow('foo');
 | |
|         $this->assertFalse($workflow);
 | |
|         /* Passing an id out of range returns false */
 | |
|         $workflow = self::$dms->getWorkflow(0);
 | |
|         $this->assertFalse($workflow);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getWorkflow() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetWorkflowSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblWorkflows` WHERE `id`="))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $workflow = $dms->getWorkflow(1);
 | |
|         $this->assertFalse($workflow);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getWorkflowByName() with a none existing workflow
 | |
|      *
 | |
|      * The intitial database does not have any workflows
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetWorkflowByNameNoExists()
 | |
|     {
 | |
|         $workflow = self::$dms->getWorkflowByName('foo');
 | |
|         $this->assertNull($workflow);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getWorkflowByName() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetWorkflowByNameSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblWorkflows` WHERE `name`="))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $workflow = $dms->getWorkflowByName('foo');
 | |
|         $this->assertFalse($workflow);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addWorkflow()
 | |
|      *
 | |
|      * Add a new workflow and retrieve it afterwards. Also check if the number
 | |
|      * of workflows has increased by one. Add a workflow with the same name a
 | |
|      * second time and check if it returns false.
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddWorkflow()
 | |
|     {
 | |
|         /* Adding a new workflow */
 | |
|         $workflowstate = self::$dms->addWorkflowState('new workflow state', S_RELEASED);
 | |
|         $workflow = self::$dms->addWorkflow('new workflow', $workflowstate);
 | |
|         $this->assertIsObject($workflow);
 | |
|         $this->assertEquals('new workflow', $workflow->getName());
 | |
|         /* Adding a workflow with the same name must fail */
 | |
|         $workflow = self::$dms->addWorkflow('new workflow', $workflowstate);
 | |
|         $this->assertFalse($workflow);
 | |
|         /* Adding a workflow with an empty name must fail */
 | |
|         $workflow = self::$dms->addWorkflow(' ', $workflowstate);
 | |
|         $this->assertFalse($workflow);
 | |
|         /* There should be one workflow now */
 | |
|         $workflows = self::$dms->getAllWorkflows();
 | |
|         $this->assertIsArray($workflows);
 | |
|         $this->assertCount(1, $workflows);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAllWorkflowStates()
 | |
|      *
 | |
|      * The intitial database does not have any workflow states
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAllWorkflowStates()
 | |
|     {
 | |
|         $states = self::$dms->getAllWorkflowStates();
 | |
|         $this->assertIsArray($states);
 | |
|         $this->assertCount(0, $states);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAllWorkflowStates() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAllWorkflowStatesSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblWorkflowStates`"))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $states = $dms->getAllWorkflowStates();
 | |
|         $this->assertFalse($states);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getWorkflowState() with a none existing workflow state
 | |
|      *
 | |
|      * The intitial database does not have any workflow states
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetWorkflowStateNoExists()
 | |
|     {
 | |
|         $workflowstate = self::$dms->getWorkflowState(1);
 | |
|         $this->assertNull($workflowstate);
 | |
|         /* Passing an id not a numeric value returns false */
 | |
|         $workflowstate = self::$dms->getWorkflowState('foo');
 | |
|         $this->assertFalse($workflowstate);
 | |
|         /* Passing an id out of range returns false */
 | |
|         $workflowstate = self::$dms->getWorkflowState(0);
 | |
|         $this->assertFalse($workflowstate);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getWorkflowState() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetWorkflowStateSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblWorkflowStates` WHERE `id` ="))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $state = $dms->getWorkflowState(1);
 | |
|         $this->assertFalse($state);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getWorkflowStateByName() with a none existing workflow state
 | |
|      *
 | |
|      * The intitial database does not have any workflow states
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetWorkflowStateByNameNoExists()
 | |
|     {
 | |
|         $workflowstate = self::$dms->getWorkflowStateByName('foo');
 | |
|         $this->assertNull($workflowstate);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getWorkflowStateByName() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetWorkflowStateByNameSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblWorkflowStates` WHERE `name`="))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $state = $dms->getWorkflowStateByName('foo');
 | |
|         $this->assertFalse($state);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addWorkflowState()
 | |
|      *
 | |
|      * Add a new workflow state and retrieve it afterwards. Also check if the number
 | |
|      * of workflow states has increased by one. Add a workflow state with the same name a
 | |
|      * second time and check if it returns false.
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddWorkflowState()
 | |
|     {
 | |
|         /* Adding a new workflow state */
 | |
|         $workflowstate = self::$dms->addWorkflowState('new workflow state', S_RELEASED);
 | |
|         $this->assertIsObject($workflowstate);
 | |
|         $this->assertEquals('new workflow state', $workflowstate->getName());
 | |
|         /* Adding a workflow state with the same name must fail */
 | |
|         $workflowstate = self::$dms->addWorkflowState('new workflow state', S_RELEASED);
 | |
|         $this->assertFalse($workflowstate);
 | |
|         /* Adding a workflow state with an empty name must fail */
 | |
|         $workflowstate = self::$dms->addWorkflowState(' ', S_RELEASED);
 | |
|         $this->assertFalse($workflowstate);
 | |
|         /* There should be one workflow state now */
 | |
|         $workflowstates = self::$dms->getAllWorkflowStates();
 | |
|         $this->assertIsArray($workflowstates);
 | |
|         $this->assertCount(1, $workflowstates);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAllWorkflowActions()
 | |
|      *
 | |
|      * The intitial database does not have any workflow actions
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAllWorkflowActions()
 | |
|     {
 | |
|         $actions = self::$dms->getAllWorkflowActions();
 | |
|         $this->assertIsArray($actions);
 | |
|         $this->assertCount(0, $actions);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getAllWorkflowActions() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetAllWorkflowActionsSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblWorkflowActions`"))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $actions = $dms->getAllWorkflowActions();
 | |
|         $this->assertFalse($actions);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getWorkflowAction() with a none existing workflow
 | |
|      *
 | |
|      * The intitial database does not have any workflow actions
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetWorkflowActionNoExists()
 | |
|     {
 | |
|         $workflowaction = self::$dms->getWorkflowAction(1);
 | |
|         $this->assertNull($workflowaction);
 | |
|         /* Passing an id not a numeric value returns false */
 | |
|         $workflowaction = self::$dms->getWorkflowAction('foo');
 | |
|         $this->assertFalse($workflowaction);
 | |
|         /* Passing an id out of range returns false */
 | |
|         $workflowaction = self::$dms->getWorkflowAction(0);
 | |
|         $this->assertFalse($workflowaction);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getWorkflowAction() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetWorkflowActionSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblWorkflowActions` WHERE `id` ="))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $action = $dms->getWorkflowAction(1);
 | |
|         $this->assertFalse($action);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getWorkflowActionByName() with a none existing workflow action
 | |
|      *
 | |
|      * The intitial database does not have any workflow actions
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetWorkflowActionByNameNoExists()
 | |
|     {
 | |
|         $workflowaction = self::$dms->getWorkflowActionByName('foo');
 | |
|         $this->assertNull($workflowaction);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getWorkflowActionByName() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetWorkflowActionByNameSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblWorkflowActions` WHERE `name` ="))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $action = $dms->getWorkflowActionByName('foo');
 | |
|         $this->assertFalse($action);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test addWorkflowAction()
 | |
|      *
 | |
|      * Add a new workflow state and retrieve it afterwards. Also check if the number
 | |
|      * of workflow states has increased by one. Add a workflow state with the same name a
 | |
|      * second time and check if it returns false.
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testAddWorkflowAction()
 | |
|     {
 | |
|         /* Adding a new workflow action */
 | |
|         $workflowaction = self::$dms->addWorkflowAction('new workflow action', S_RELEASED);
 | |
|         $this->assertIsObject($workflowaction);
 | |
|         $this->assertEquals('new workflow action', $workflowaction->getName());
 | |
|         /* Adding a workflow action with the same name must fail */
 | |
|         $workflowaction = self::$dms->addWorkflowAction('new workflow action', S_RELEASED);
 | |
|         $this->assertFalse($workflowaction);
 | |
|         /* Adding a workflow action with an empty name must fail */
 | |
|         $workflowaction = self::$dms->addWorkflowAction(' ', S_RELEASED);
 | |
|         $this->assertFalse($workflowaction);
 | |
|         /* There should be one workflow action now */
 | |
|         $workflowactions = self::$dms->getAllWorkflowActions();
 | |
|         $this->assertIsArray($workflowactions);
 | |
|         $this->assertCount(1, $workflowactions);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getStatisticalData()
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetStatisticalData()
 | |
|     {
 | |
|         /* There should one folder (root folder) */
 | |
|         $data = self::$dms->getStatisticalData('foldersperuser');
 | |
|         $this->assertIsArray($data);
 | |
|         $this->assertEquals(1, $data[0]['total']);
 | |
|         /* There should be no documents */
 | |
|         foreach (array('docsperuser', 'docspermimetype', 'docspercategory', 'docspermonth', 'docsperstatus', 'docsaccumulated', 'sizeperuser') as $type) {
 | |
|             $data = self::$dms->getStatisticalData($type);
 | |
|             $this->assertIsArray($data);
 | |
|             $this->assertCount(0, $data);
 | |
|         }
 | |
|         /* Passing an unknown name returns an empty array */
 | |
|         $data = self::$dms->getStatisticalData('foo');
 | |
|         $this->assertIsArray($data);
 | |
|         $this->assertCount(0, $data);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getStatisticalDataFail()
 | |
|      *
 | |
|      * Check if getStatisticalData() fails if the sql statements fail
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetStatisticalDataFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->any())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT "))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         foreach (array('foldersperuser', 'docsperuser', 'docspermimetype', 'docspercategory', 'docspermonth', 'docsperstatus', 'docsaccumulated', 'sizeperuser') as $type) {
 | |
|             $data = $dms->getStatisticalData($type);
 | |
|             $this->assertFalse($data);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test createPasswordRequest() and checkPasswordRequest()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCreateAndCheckAndDeletePasswordRequest()
 | |
|     {
 | |
|         $user = self::$dms->getUser(1);
 | |
|         $hash = self::$dms->createPasswordRequest($user);
 | |
|         $this->assertIsString($hash);
 | |
|         $user = self::$dms->checkPasswordRequest($hash);
 | |
|         $this->assertIsObject($user);
 | |
|         $this->assertEquals(1, $user->getId());
 | |
|         /* Check a non existing hash */
 | |
|         $user = self::$dms->checkPasswordRequest('foo');
 | |
|         $this->assertFalse($user);
 | |
|         /* Delete the hash */
 | |
|         $ret = self::$dms->deletePasswordRequest($hash);
 | |
|         $this->assertTrue($ret);
 | |
|         /* Checking the hash again must return false, because it was deleted */
 | |
|         $user = self::$dms->checkPasswordRequest($hash);
 | |
|         $this->assertFalse($user);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test method checkPasswordRequest() with sql failure
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testCheckPasswordRequestSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblUserPasswordRequest`"))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $this->assertFalse($dms->checkPasswordRequest('foo'));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test method deletePasswordRequest() with sql failure
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testDeletePasswordRequestSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResult')
 | |
|             ->with($this->stringContains("DELETE FROM `tblUserPasswordRequest`"))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $this->assertFalse($dms->deletePasswordRequest('foo'));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getTimeline()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetTimeline()
 | |
|     {
 | |
|         $timeline = self::$dms->getTimeline();
 | |
|         $this->assertIsArray($timeline);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getUnlinkedDocumentContent()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetUnlinkedDocumentContent()
 | |
|     {
 | |
|         $contents = self::$dms->getUnlinkedDocumentContent();
 | |
|         $this->assertIsArray($contents);
 | |
|         $this->assertCount(0, $contents);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getNoFileSizeDocumentContent()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetNoFileSizeDocumentContent()
 | |
|     {
 | |
|         $rootfolder = self::$dms->getRootFolder();
 | |
|         $user = self::$dms->getUser(1);
 | |
|         $document = self::createDocument($rootfolder, $user, 'Document 1');
 | |
|         $contents = self::$dms->getNoFileSizeDocumentContent();
 | |
|         $this->assertIsArray($contents);
 | |
|         $this->assertCount(0, $contents);
 | |
|         /* Manipulate the file size right in the database */
 | |
|         $dbh = self::$dms->getDB();
 | |
|         $ret = $dbh->getResult("UPDATE `tblDocumentContent` SET `fileSize` = 0");
 | |
|         $this->assertTrue($ret);
 | |
|         $contents = self::$dms->getNoFileSizeDocumentContent();
 | |
|         $this->assertIsArray($contents);
 | |
|         $this->assertCount(1, $contents);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getNoFileSizeDocumentContent()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetNoFileSizeDocumentContentSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblDocumentContent` WHERE `fileSize`"))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $this->assertFalse($dms->getNoFileSizeDocumentContent());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getNoChecksumDocumentContent()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetNoChecksumDocumentContent()
 | |
|     {
 | |
|         $rootfolder = self::$dms->getRootFolder();
 | |
|         $user = self::$dms->getUser(1);
 | |
|         $document = self::createDocument($rootfolder, $user, 'Document 1');
 | |
|         $contents = self::$dms->getNoChecksumDocumentContent();
 | |
|         $this->assertIsArray($contents);
 | |
|         $this->assertCount(0, $contents);
 | |
|         /* Manipulate the checksum right in the database */
 | |
|         $dbh = self::$dms->getDB();
 | |
|         $ret = $dbh->getResult("UPDATE `tblDocumentContent` SET `checksum` = null");
 | |
|         $this->assertTrue($ret);
 | |
|         $contents = self::$dms->getNoChecksumDocumentContent();
 | |
|         $this->assertIsArray($contents);
 | |
|         $this->assertCount(1, $contents);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getNoChecksumDocumentContent()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetNoChecksumDocumentContentSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT * FROM `tblDocumentContent` WHERE `checksum`"))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $this->assertFalse($dms->getNoChecksumDocumentContent());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDuplicateDocumentContent()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDuplicateDocumentContent()
 | |
|     {
 | |
|         $contents = self::$dms->getDuplicateDocumentContent();
 | |
|         $this->assertIsArray($contents);
 | |
|         $this->assertCount(0, $contents);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDuplicateDocumentContent()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDuplicateDocumentContentWithDuplicates()
 | |
|     {
 | |
|         $rootfolder = self::$dms->getRootFolder();
 | |
|         $user = self::$dms->getUser(1);
 | |
|         $document1 = self::createDocument($rootfolder, $user, 'Document 1');
 | |
| 
 | |
|         $filename = self::createTempFile(200);
 | |
|         list($document2, $res) = $rootfolder->addDocument(
 | |
|             'Documet 2', // name
 | |
|             '', // comment
 | |
|             null, // no expiration
 | |
|             $user, // owner
 | |
|             '', // keywords
 | |
|             [], // categories
 | |
|             $filename, // name of file
 | |
|             'file1.txt', // original file name
 | |
|             '.txt', // file type
 | |
|             'text/plain', // mime type
 | |
|             1.0 // sequence
 | |
|         );
 | |
|         list($document3, $res) = $rootfolder->addDocument(
 | |
|             'Documet 3', // name
 | |
|             '', // comment
 | |
|             null, // no 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));
 | |
| 
 | |
|         $contents = self::$dms->getDuplicateDocumentContent();
 | |
|         $this->assertIsArray($contents);
 | |
|         $this->assertCount(1, $contents);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test method getDuplicateDocumentContent() with sql failure
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDuplicateDocumentContentSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT a.*, b.`id` as dupid FROM `tblDocumentContent`"))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $this->assertFalse($dms->getDuplicateDocumentContent());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getNotificationsByUser()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetNotificationsByUser()
 | |
|     {
 | |
|         $user = self::$dms->getUser(1);
 | |
|         $notifications = self::$dms->getNotificationsByUser($user, 0);
 | |
|         $this->assertIsArray($notifications);
 | |
|         $this->assertCount(0, $notifications);
 | |
|         $notifications = self::$dms->getNotificationsByUser($user, 1);
 | |
|         $this->assertIsArray($notifications);
 | |
|         $this->assertCount(0, $notifications);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getNotificationsByGroup()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetNotificationsByGroup()
 | |
|     {
 | |
|         $group = self::$dms->addGroup('new group', 'with comment');
 | |
|         $this->assertIsObject($group);
 | |
|         $notifications = self::$dms->getNotificationsByGroup($group, 0);
 | |
|         $this->assertIsArray($notifications);
 | |
|         $this->assertCount(0, $notifications);
 | |
|         $notifications = self::$dms->getNotificationsByGroup($group, 1);
 | |
|         $this->assertIsArray($notifications);
 | |
|         $this->assertCount(0, $notifications);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDocumentsExpired()
 | |
|      *
 | |
|      * Check if getDocumentsExpired() fails if the parameters are wrong
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentsExpiredFail()
 | |
|     {
 | |
|         $documents = self::$dms->getDocumentsExpired(false);
 | |
|         $this->assertFalse($documents);
 | |
|         $documents = self::$dms->getDocumentsExpired('2021-04');
 | |
|         $this->assertFalse($documents);
 | |
|         $documents = self::$dms->getDocumentsExpired('2021-01-32');
 | |
|         $this->assertFalse($documents);
 | |
|         $documents = self::$dms->getDocumentsExpired('2021-01-31'); // valid date
 | |
|         $this->assertIsArray($documents);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test method getDocumentsExpired() with sql failure
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentsExpiredSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('createTemporaryTable')
 | |
|             ->with('ttstatid')
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $this->assertFalse($dms->getDocumentsExpired(1));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDocumentByName()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentByName()
 | |
|     {
 | |
|         $rootfolder = self::$dms->getRootFolder();
 | |
|         $user = self::$dms->getUser(1);
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Folder::class, $rootfolder);
 | |
|         $subfolder = $rootfolder->addSubFolder('Subfolder 1', '', $user, 2.0);
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Folder::class, $subfolder);
 | |
| 
 | |
|         /* Add a new document */
 | |
|         $filename = self::createTempFile(200);
 | |
|         list($document, $res) = $subfolder->addDocument(
 | |
|             'Document 1', // name
 | |
|             '', // comment
 | |
|             null, // no 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->assertIsObject($document);
 | |
|         $this->assertTrue(SeedDMS_Core_File::removeFile($filename));
 | |
|         /* Search without a parent folder restriction */
 | |
|         $document = self::$dms->getDocumentByName('Document 1');
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Document::class, $document);
 | |
|         /* Searching in the root folder will return no document */
 | |
|         $document = self::$dms->getDocumentByName('Document 1', $rootfolder);
 | |
|         $this->assertNull($document);
 | |
|         /* Searching in the sub folder will return the document */
 | |
|         $document = self::$dms->getDocumentByName('Document 1', $subfolder);
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Document::class, $document);
 | |
|         /* Searching for an empty name returns false */
 | |
|         $document = self::$dms->getDocumentByName('  ');
 | |
|         $this->assertFalse($document);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDocumentByName() with sql failure
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentByNameSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('getResultArray')
 | |
|             ->with($this->stringContains("SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser`"))
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $document = $dms->getDocumentByName('foo');
 | |
|         $this->assertFalse($document);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDocumentByOriginalFilename()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentByOriginalFilename()
 | |
|     {
 | |
|         $rootfolder = self::$dms->getRootFolder();
 | |
|         $user = self::$dms->getUser(1);
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Folder::class, $rootfolder);
 | |
|         $subfolder = $rootfolder->addSubFolder('Subfolder 1', '', $user, 2.0);
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Folder::class, $subfolder);
 | |
| 
 | |
|         /* Add a new document */
 | |
|         $filename = self::createTempFile(200);
 | |
|         list($document, $res) = $subfolder->addDocument(
 | |
|             'Document 1', // name
 | |
|             '', // comment
 | |
|             null, // no 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->assertIsObject($document);
 | |
|         $this->assertTrue(SeedDMS_Core_File::removeFile($filename));
 | |
|         /* Search without a parent folder restriction */
 | |
|         $document = self::$dms->getDocumentByOriginalFilename('file1.txt');
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Document::class, $document);
 | |
|         /* Searching in the root folder will return no document */
 | |
|         $document = self::$dms->getDocumentByOriginalFilename('file1.txt', $rootfolder);
 | |
|         $this->assertNull($document);
 | |
|         /* Searching in the sub folder will return the document */
 | |
|         $document = self::$dms->getDocumentByOriginalFilename('file1.txt', $subfolder);
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Document::class, $document);
 | |
|         /* Searching for an empty name returns false */
 | |
|         $document = self::$dms->getDocumentByOriginalFilename('  ');
 | |
|         $this->assertFalse($document);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test method getDocumentByOriginalFilename() with sql failure
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentByOriginalFilenameSqlFail()
 | |
|     {
 | |
|         $db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
 | |
|         $db->expects($this->once())
 | |
|             ->method('createTemporaryTable')
 | |
|             ->with('ttcontentid')
 | |
|             ->willReturn(false);
 | |
|         $dms = new SeedDMS_Core_DMS($db, '');
 | |
|         $this->assertFalse($dms->getDocumentByOriginalFilename(1));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test getDocumentList()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testGetDocumentList()
 | |
|     {
 | |
|         $rootfolder = self::$dms->getRootFolder();
 | |
|         $user = self::$dms->getUser(1);
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Folder::class, $rootfolder);
 | |
| 
 | |
|         /* Add a new document */
 | |
|         $filename = self::createTempFile(200);
 | |
|         list($document, $res) = $rootfolder->addDocument(
 | |
|             'Document 1', // name
 | |
|             '', // comment
 | |
|             null, // no 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);
 | |
| 
 | |
|         /* Add a second new document */
 | |
|         $filename = self::createTempFile(200);
 | |
|         list($document, $res) = $rootfolder->addDocument(
 | |
|             'Document 2', // name
 | |
|             '', // comment
 | |
|             mktime(0, 0, 0), // expires today
 | |
|             $user, // owner
 | |
|             '', // keywords
 | |
|             [], // categories
 | |
|             $filename, // name of file
 | |
|             'file2.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->getDocumentList('MyDocs', $user);
 | |
|         $this->assertIsArray($documents);
 | |
|         $this->assertCount(2, $documents);
 | |
|         /* All documents expiring from 1 year ago till today */
 | |
|         $documents = self::$dms->getDocumentList('ExpiredOwner', $user);
 | |
|         $this->assertIsArray($documents);
 | |
|         $this->assertCount(1, $documents);
 | |
|         /* All documents expiring today */
 | |
|         $documents = self::$dms->getDocumentList('ExpiredOwner', $user, 0);
 | |
|         $this->assertIsArray($documents);
 | |
|         $this->assertCount(1, $documents);
 | |
|         /* All documents expiring tomorrow */
 | |
|         $documents = self::$dms->getDocumentList('ExpiredOwner', $user, date("Y-m-d", time()+86400));
 | |
|         $this->assertIsArray($documents);
 | |
|         $this->assertCount(1, $documents);
 | |
|         /* Get unknown list */
 | |
|         $documents = self::$dms->getDocumentList('foo', $user);
 | |
|         $this->assertFalse($documents);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test search()
 | |
|      *
 | |
|      * This method uses a real in memory sqlite3 database.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function testSearch()
 | |
|     {
 | |
|         $rootfolder = self::$dms->getRootFolder();
 | |
|         $user = self::$dms->getUser(1);
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Folder::class, $rootfolder);
 | |
|         $subfolder = $rootfolder->addSubFolder('Subfolder 1', '', $user, 2.0);
 | |
|         $this->assertInstanceOf(SeedDMS_Core_Folder::class, $subfolder);
 | |
| 
 | |
|         /* Add a new document to the subfolder*/
 | |
|         $filename = self::createTempFile(200);
 | |
|         list($document, $res) = $subfolder->addDocument(
 | |
|             'Document 1', // name
 | |
|             '', // comment
 | |
|             null, // no 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));
 | |
|         /* Add a new document to the root folder. All documents expire. The first
 | |
|          * expires today, the second expires tomorrow, etc.
 | |
|          */
 | |
|         for ($i=2; $i<=30; $i++) {
 | |
|             $filename = self::createTempFile(200);
 | |
|             list($document, $res) = $rootfolder->addDocument(
 | |
|                 'Document '.$i, // name
 | |
|                 '', // comment
 | |
|                 mktime(0, 0, 0)+($i-2)*86400, // expires in $i-2 days
 | |
|                 $user, // owner
 | |
|                 '', // keywords
 | |
|                 [], // categories
 | |
|                 $filename, // name of file
 | |
|                 'file'.$i.'.txt', // original file name
 | |
|                 '.txt', // file type
 | |
|                 'text/plain', // mime type
 | |
|                 1.0+$i // sequence
 | |
|             );
 | |
|             $this->assertTrue(SeedDMS_Core_File::removeFile($filename));
 | |
|         }
 | |
|         $hits = self::$dms->search(['query'=>'Document']);
 | |
|         $this->assertIsArray($hits);
 | |
|         $this->assertCount(5, $hits);
 | |
|         $this->assertEquals(30, $hits['totalDocs']);
 | |
|         $this->assertCount(30, $hits['docs']);
 | |
|         /* Limit number of documents to 10 */
 | |
|         $hits = self::$dms->search(['query'=>'Document', 'limit'=>10]);
 | |
|         $this->assertIsArray($hits);
 | |
|         $this->assertCount(5, $hits);
 | |
|         $this->assertEquals(30, $hits['totalDocs']);
 | |
|         $this->assertCount(10, $hits['docs']);
 | |
|         /* Same number of documents if startFolder is the root folder */
 | |
|         $hits = self::$dms->search(['query'=>'Document', 'startFolder'=>$rootfolder]);
 | |
|         $this->assertIsArray($hits);
 | |
|         $this->assertCount(5, $hits);
 | |
|         $this->assertEquals(30, $hits['totalDocs']);
 | |
|         $this->assertCount(30, $hits['docs']);
 | |
|         /* There is just one document below the sub folder */
 | |
|         $hits = self::$dms->search(['query'=>'Document', 'startFolder'=>$subfolder]);
 | |
|         $this->assertIsArray($hits);
 | |
|         $this->assertCount(5, $hits);
 | |
|         $this->assertEquals(1, $hits['totalDocs']);
 | |
|         /* Get documents with a given expiration date in the future
 | |
|          * All documents in subfolder, but not the one in the root folder
 | |
|          */
 | |
|         $expts = mktime(0, 0, 0);
 | |
|         $expstart = [
 | |
|             'year'=>date('Y', $expts),
 | |
|             'month'=>date('m', $expts),
 | |
|             'day'=>date('d', $expts),
 | |
|             'hour'=>date('H', $expts),
 | |
|             'minute'=>date('i', $expts),
 | |
|             'second'=>date('s', $expts)
 | |
|         ];
 | |
|         $hits = self::$dms->search(['query'=>'Document', 'expirationstartdate'=>$expstart]);
 | |
|         $this->assertIsArray($hits);
 | |
|         $this->assertCount(5, $hits);
 | |
|         $this->assertEquals(29, $hits['totalDocs']);
 | |
|         /* Get documents with a given expiration date in the future, starting tomorrow
 | |
|          * All documents in subfolder - 1
 | |
|          */
 | |
|         $expts = mktime(0, 0, 0)+86400;
 | |
|         $expstart = [
 | |
|             'year'=>date('Y', $expts),
 | |
|             'month'=>date('m', $expts),
 | |
|             'day'=>date('d', $expts),
 | |
|             'hour'=>date('H', $expts),
 | |
|             'minute'=>date('i', $expts),
 | |
|             'second'=>date('s', $expts)
 | |
|         ];
 | |
|         $hits = self::$dms->search(['query'=>'Document', 'expirationstartdate'=>$expstart]);
 | |
|         $this->assertIsArray($hits);
 | |
|         $this->assertCount(5, $hits);
 | |
|         $this->assertEquals(28, $hits['totalDocs']);
 | |
|         /* Get documents expire today or tomorrow
 | |
|          * 2 documents in subfolder 
 | |
|          */
 | |
|         $expts = mktime(0, 0, 0);
 | |
|         $expstart = [
 | |
|             'year'=>date('Y', $expts),
 | |
|             'month'=>date('m', $expts),
 | |
|             'day'=>date('d', $expts),
 | |
|             'hour'=>date('H', $expts),
 | |
|             'minute'=>date('i', $expts),
 | |
|             'second'=>date('s', $expts)
 | |
|         ];
 | |
|         $expts += 1*86400;
 | |
|         $expstop = [
 | |
|             'year'=>date('Y', $expts),
 | |
|             'month'=>date('m', $expts),
 | |
|             'day'=>date('d', $expts),
 | |
|             'hour'=>date('H', $expts),
 | |
|             'minute'=>date('i', $expts),
 | |
|             'second'=>date('s', $expts)
 | |
|         ];
 | |
|         $hits = self::$dms->search(['query'=>'Document', 'expirationstartdate'=>$expstart, 'expirationenddate'=>$expstop]);
 | |
|         $this->assertIsArray($hits);
 | |
|         $this->assertCount(5, $hits);
 | |
|         $this->assertEquals(2, $hits['totalDocs']);
 | |
|         /* Get documents expire before and tomorrow
 | |
|          * 2 documents in subfolder 
 | |
|          */
 | |
|         $expts = mktime(0, 0, 0); // Start of today
 | |
|         $expts += 1*86400; // Start of tomorrow
 | |
|         $expstop = [
 | |
|             'year'=>date('Y', $expts),
 | |
|             'month'=>date('m', $expts),
 | |
|             'day'=>date('d', $expts),
 | |
|             'hour'=>date('H', $expts),
 | |
|             'minute'=>date('i', $expts),
 | |
|             'second'=>date('s', $expts)
 | |
|         ];
 | |
|         $hits = self::$dms->search(['query'=>'Document', 'expirationenddate'=>$expstop]);
 | |
|         $this->assertIsArray($hits);
 | |
|         $this->assertCount(5, $hits);
 | |
|         $this->assertEquals(2, $hits['totalDocs']);
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | 
