/** * Create a builder for the headless environment. * * @return \Civi\Test\CiviEnvBuilder * * @code * \Civi\Test::headless()->apply(); * \Civi\Test::headless()->sqlFile('ex.sql')->apply(); * @endCode */ public static function headless() { $civiRoot = dirname(__DIR__); $builder = new \Civi\Test\CiviEnvBuilder('CiviEnvBuilder'); $builder->callback(function ($ctx) { if (CIVICRM_UF !== 'UnitTests') { throw new \RuntimeException("\\Civi\\Test::headless() requires CIVICRM_UF=UnitTests"); } $dbName = \Civi\Test::dsn('database'); echo "Installing {$dbName} schema\n"; \Civi\Test::schema()->dropAll(); }, 'headless-drop')->sqlFile($civiRoot . "/sql/civicrm.mysql")->sql("DELETE FROM civicrm_extension")->callback(function ($ctx) { \Civi\Test::data()->populate(); }, 'populate'); return $builder; }
/** * @return bool */ public function populate() { \Civi\Test::schema()->truncateAll(); \Civi\Test::schema()->setStrict(FALSE); $sqlDir = dirname(dirname(__DIR__)) . "/sql"; $query2 = file_get_contents("{$sqlDir}/civicrm_data.mysql"); $query3 = file_get_contents("{$sqlDir}/test_data.mysql"); $query4 = file_get_contents("{$sqlDir}/test_data_second_domain.mysql"); if (\Civi\Test::execute($query2) === FALSE) { throw new RuntimeException("Cannot load civicrm_data.mysql. Aborting."); } if (\Civi\Test::execute($query3) === FALSE) { throw new RuntimeException("Cannot load test_data.mysql. Aborting."); } if (\Civi\Test::execute($query4) === FALSE) { throw new RuntimeException("Cannot load test_data.mysql. Aborting."); } unset($query, $query2, $query3); \Civi\Test::schema()->setStrict(TRUE); // Rebuild triggers civicrm_api('system', 'flush', array('version' => 3, 'triggers' => 1)); \CRM_Core_BAO_ConfigSetting::setEnabledComponents(array('CiviEvent', 'CiviContribute', 'CiviMember', 'CiviMail', 'CiviReport', 'CiviPledge')); return TRUE; }
/** * @return array */ public function truncateAll() { $tables = \Civi\Test::schema()->getTables('BASE TABLE'); $truncates = array(); $drops = array(); foreach ($tables as $table) { // skip log tables if (substr($table, 0, 4) == 'log_') { continue; } // don't change list of installed extensions if ($table == 'civicrm_extension') { continue; } if (substr($table, 0, 14) == 'civicrm_value_') { $drops[] = 'DROP TABLE ' . $table . ';'; } elseif (substr($table, 0, 9) == 'civitest_') { // ignore } else { $truncates[] = 'TRUNCATE ' . $table . ';'; } } \Civi\Test::schema()->setStrict(FALSE); $queries = array_merge($truncates, $drops); foreach ($queries as $query) { if (\Civi\Test::execute($query) === FALSE) { throw new RuntimeException("Query failed: {$query}"); } } \Civi\Test::schema()->setStrict(TRUE); return $this; }