123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- <?php
- require_once "AirtimeInstall.php";
- class TestHelper
- {
- public static function loginUser()
- {
- $authAdapter = Application_Model_Auth::getAuthAdapter();
- //pass to the adapter the submitted username and password
- $authAdapter->setIdentity('admin')
- ->setCredential('admin');
- $auth = Zend_Auth::getInstance();
- $result = $auth->authenticate($authAdapter);
- if ($result->isValid()) {
- //all info about this user from the login table omit only the password
- $userInfo = $authAdapter->getResultRowObject(null, 'password');
- //the default storage is a session with namespace Zend_Auth
- $authStorage = $auth->getStorage();
- $authStorage->write($userInfo);
- }
- }
- public static function getDbZendConfig()
- {
- return new Zend_Config(
- array(
- 'host' => '127.0.0.1',
- 'dbname' => 'airtime_test',
- 'username' => 'airtime',
- 'password' => 'airtime'
- )
- );
- }
- public static function installTestDatabase()
- {
- //We need to load the config before our app bootstrap runs. The config
- //is normally
- $CC_CONFIG = Config::getConfig();
-
- $dbuser = $CC_CONFIG['dsn']['username'];
- $dbpasswd = $CC_CONFIG['dsn']['password'];
- $dbname = $CC_CONFIG['dsn']['database'];
- $dbhost = $CC_CONFIG['dsn']['hostspec'];
-
- $databaseAlreadyExists = AirtimeInstall::createDatabase();
- if ($databaseAlreadyExists)
- {
- //Truncate all the tables
- $con = Propel::getConnection();
- $sql = "select * from pg_tables where tableowner = 'airtime'";
- try {
- $rows = $con->query($sql)->fetchAll();
- } catch (Exception $e) {
- $rows = array();
- }
-
- //Add any tables that shouldn't be cleared here.
- // cc_subjs - Most of Airtime requires an admin account to work, which has id=1,
- // so don't clear it.
- // cc_music_dirs - Has foreign key constraints against cc_files, so we clear cc_files
- // first and clear cc_music_dirs after
- $tablesToNotClear = array("cc_subjs", "cc_music_dirs");
- $con->beginTransaction();
- foreach ($rows as $row) {
- $tablename = $row["tablename"];
- if (in_array($tablename, $tablesToNotClear))
- {
- continue;
- }
- //echo " * Clearing database table $tablename...";
- //TRUNCATE is actually slower than DELETE in many cases:
- //http://stackoverflow.com/questions/11419536/postgresql-truncation-speed
- //$sql = "TRUNCATE TABLE $tablename CASCADE";
- $sql = "DELETE FROM $tablename";
- AirtimeInstall::InstallQuery($sql, false);
- }
- //Now that cc_files is empty, clearing cc_music_dirs should work
- $sql = "DELETE FROM cc_music_dirs";
- AirtimeInstall::InstallQuery($sql, false);
- $con->commit();
-
- //Because we're DELETEing all the rows instead of using TRUNCATE (for speed),
- //we have to reset the sequences so the auto-increment columns (like primary keys)
- //all start at 1 again. This is hacky but it still lets all of this execute fast.
- $sql = "SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'";
- try {
- $rows = $con->query($sql)->fetchAll();
- } catch (Exception $e) {
- $rows = array();
- }
- $con->beginTransaction();
- foreach ($rows as $row) {
- $seqrelname= $row["relname"];
- $sql = "ALTER SEQUENCE ${seqrelname} RESTART WITH 1";
- AirtimeInstall::InstallQuery($sql, false);
- }
- $con->commit();
- }
- else
- {
- //Create all the database tables
- AirtimeInstall::createDatabaseTables($dbuser, $dbpasswd, $dbname, $dbhost);
- }
- }
- public static function setupZendBootstrap()
- {
- $application = new Zend_Application(APPLICATION_ENV, CONFIG_PATH . 'application.ini');
- $application->bootstrap();
- return $application;
- }
- }
|