* @copyright 2017RalfBecker@outdoor-training.de * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License */ use EGroupware\Api; use PHPUnit\Framework\TestCase; class BaseTest extends TestCase { /** * * @var Api\Db */ private static $db; /** * * @var Api\Storage\Base */ private $storage; public static function setUpBeforeClass() : void { if (ini_get('session.save_handler') == 'files' && !is_writable(ini_get('session.save_path')) && is_dir('/tmp') && is_writable('/tmp')) { ini_set('session.save_path','/tmp'); // regular users may have no rights to apache's session dir } $_REQUEST['domain'] = $GLOBALS['EGW_DOMAIN']; $GLOBALS['egw_info'] = array( 'flags' => array( 'noheader' => True, 'nonavbar' => True, 'currentapp' => 'setup', 'noapi' => true, )); require(__DIR__.'/../../../header.inc.php'); $GLOBALS['egw'] = new stdClass(); $GLOBALS['egw']->db = self::$db = new Api\Db($GLOBALS['egw_domain'][$GLOBALS['EGW_DOMAIN']]); self::$db->connect(); } protected function setUp() : void { $this->storage = new Api\Storage\Base('test', 'egw_test', self::$db); } protected function assertPreConditions() : void { $tables = self::$db->table_names(true); $this->assertContains('egw_test', $tables, 'Could not find DB table "egw_test", make sure test app is installed'); } public function testSaveInternalState() { $this->storage->data = $data = array( 't_title' => 'Test', 't_desc' => "First Line\nSecond Line\n\n...", 't_start' => $start = Api\DateTime::to('now', 'ts'), 't_end' => $end = Api\DateTime::to('now', 'ts'), 't_modifier' => 123, ); $this->storage->Save(); $this->assertGreaterThan(0, $this->storage->data['t_id']); $row = self::$db->select('egw_test', '*', array('t_id' => $this->storage->data['t_id']), __LINE__, __FILE__, false, '', 'test')->fetch(); $this->assertIsArray($row); $this->assertEquals($data['t_title'], $row['t_title']); $this->assertEquals($data['t_desc'], $row['t_desc']); $this->assertEquals($data['t_modifier'], $row['t_modifier']); $this->assertEquals(Api\DateTime::user2server($start), $row['t_start']); $this->assertEquals(Api\DateTime::user2server($end, Api\DateTime::DATABASE), $row['t_end']); $this->assertEqualsWithDelta(new DateTime('now'), new DateTime($row['t_modified']), 1); return $this->storage->data; } /** * * @param array $data * @depends testSaveInternalState */ public function testReadFromDb(array $data) { $read = $this->storage->read($data['t_id']); // not set above, just be DB or read method unset($read['t_modified'], $read['user_timezone_read']); // set as ts, but read as is in DB $data['t_end'] = Api\DateTime::to($data['t_end'], Api\DateTime::DATABASE); $this->assertEquals($data, $read); } /*public function testSaveGivenState() { }*/ }