示例#1
0
 /**
  * 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;
 }
示例#2
0
 /**
  * @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;
 }
示例#3
0
 /**
  * @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;
 }