diff --git a/api/src/test/AppTest.php b/api/src/test/AppTest.php new file mode 100644 index 0000000000..e9b521d741 --- /dev/null +++ b/api/src/test/AppTest.php @@ -0,0 +1,140 @@ +/test/ or /src/test/ to test one + * small aspect of an application. + */ +abstract class AppTest extends TestCase +{ + /** + * Start session once before each test case + */ + public static function setUpBeforeClass() + { + // These globals pulled from the test config (phpunit.xml) + static::load_egw($GLOBALS['EGW_USER'],$GLOBALS['EGW_PASSWORD'], $GLOBALS['EGW_DOMAIN']); + } + + /** + * End session when done - every test case gets its own session + */ + public static function tearDownAfterClass() + { + if($GLOBALS['egw']) + { + if($GLOBALS['egw']->session) + { + $GLOBALS['egw']->session->destroy( + $GLOBALS['egw']->session->sessionid, + $GLOBALS['egw']->session->kp3 + ); + } + unset($GLOBALS['egw']); + } + unset($GLOBALS['egw_info']); + unset($GLOBALS['_SESSION']); + $_SESSION = array(); + } + + /** + * Start the eGW session, exits on wrong credentials + * + * @param string $user + * @param string $passwd + * @param string $domain + */ + public static function load_egw($user,$passwd,$domain='default') + { + $_REQUEST['domain'] = $domain; + $GLOBALS['egw_login_data'] = array( + 'login' => $user, + 'passwd' => $passwd, + 'passwd_type' => 'text', + ); + + 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 + } + + $GLOBALS['egw_info'] = array( + 'flags' => array( + 'currentapp' => 'api', + 'noheader' => true, + 'autocreate_session_callback' => __NAMESPACE__ . '\AppTest::create_session', + 'no_exception_handler' => 'cli', + 'noapi' => false, + ) + ); + + include(realpath(__DIR__ . '/../../../header.inc.php')); + + require_once realpath(__DIR__.'/../loader/common.php'); // autoloader & check_load_extension + + // egw is normally created when a file is loaded using require_once + if(!$GLOBALS['egw']) + { + // From Api/src/loader.php + $GLOBALS['egw_info']['user']['domain'] = Api\Session::search_instance( + isset($_POST['login']) ? $_POST['login'] : (isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : $_SERVER['REMOTE_USER']), + Api\Session::get_request('domain'),$GLOBALS['egw_info']['server']['default_domain'], + array($_SERVER['HTTP_HOST'], $_SERVER['SERVER_NAME']),$GLOBALS['egw_domain']); + + $GLOBALS['egw_info']['server']['db_host'] = $GLOBALS['egw_domain'][$GLOBALS['egw_info']['user']['domain']]['db_host']; + $GLOBALS['egw_info']['server']['db_port'] = $GLOBALS['egw_domain'][$GLOBALS['egw_info']['user']['domain']]['db_port']; + $GLOBALS['egw_info']['server']['db_name'] = $GLOBALS['egw_domain'][$GLOBALS['egw_info']['user']['domain']]['db_name']; + $GLOBALS['egw_info']['server']['db_user'] = $GLOBALS['egw_domain'][$GLOBALS['egw_info']['user']['domain']]['db_user']; + $GLOBALS['egw_info']['server']['db_pass'] = $GLOBALS['egw_domain'][$GLOBALS['egw_info']['user']['domain']]['db_pass']; + $GLOBALS['egw_info']['server']['db_type'] = $GLOBALS['egw_domain'][$GLOBALS['egw_info']['user']['domain']]['db_type']; + + $GLOBALS['egw'] = new Api\Egw(array_keys($GLOBALS['egw_domain'])); + } + } + + + /** + * callback to authenticate with the user/pw specified on the commandline + * + * @param array &$account account_info with keys 'login', 'passwd' and optional 'passwd_type' + * @return boolean/string true if we allow the access and account is set, a sessionid or false otherwise + */ + public static function create_session(&$account) + { + if (!($sessionid = $GLOBALS['egw']->session->create($GLOBALS['egw_login_data']))) + { + echo lang("Wrong account or password !!!")."\n\n"; + } + unset($GLOBALS['egw_login_data']); + return $sessionid; + } +} \ No newline at end of file diff --git a/doc/phpunit.xml b/doc/phpunit.xml new file mode 100644 index 0000000000..6615225ed7 --- /dev/null +++ b/doc/phpunit.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + ../api/src/test/ + + + ../*/test/ + + + ../*/src/test/ + ../*/src/*/test/ + + +