egroupware/api/tests/Storage/BaseTest.php

108 lines
3.0 KiB
PHP

<?php
/**
* EGroupware test app to test eg. Api\Storage\Base
*
* @package api
* @subpackage tests
* @link http://www.egroupware.org
* @author Ralf Becker <RalfBecker@outdoor-training.de>
* @copyright 2017RalfBecker@outdoor-training.de
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
*/
use PHPUnit\Framework\TestCase;
use EGroupware\Api;
class BaseTest extends TestCase
{
/**
*
* @var Api\Db
*/
private static $db;
/**
*
* @var Api\Storage\Base
*/
private $storage;
public static function setUpBeforeClass()
{
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()
{
$this->storage = new Api\Storage\Base('test', 'egw_test', self::$db);
}
protected function assertPreConditions()
{
$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->assertInternalType('array', $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->assertEquals(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()
{
}*/
}