X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=tests%2Fphpunit%2FCiviTest%2FCiviUnitTestCase.php;h=c92568aeb02d973ef74e2d373c846947c44e706b;hb=728bbd5bbad0b5269dcd0a4cb70384291d309e70;hp=c7de801ff3ab92b8c4dedec871904389f6c7a52b;hpb=31d369b2133bae81303f656ec557cedc6b777f92;p=civicrm-core.git diff --git a/tests/phpunit/CiviTest/CiviUnitTestCase.php b/tests/phpunit/CiviTest/CiviUnitTestCase.php old mode 100755 new mode 100644 index c7de801ff3..c92568aeb0 --- a/tests/phpunit/CiviTest/CiviUnitTestCase.php +++ b/tests/phpunit/CiviTest/CiviUnitTestCase.php @@ -28,20 +28,9 @@ use Civi\Payment\System; -/** - * Include configuration - */ -define('CIVICRM_SETTINGS_PATH', __DIR__ . '/civicrm.settings.dist.php'); -define('CIVICRM_SETTINGS_LOCAL_PATH', __DIR__ . '/civicrm.settings.local.php'); - -if (file_exists(CIVICRM_SETTINGS_LOCAL_PATH)) { - require_once CIVICRM_SETTINGS_LOCAL_PATH; -} -require_once CIVICRM_SETTINGS_PATH; /** * Include class definitions */ -require_once 'tests/phpunit/Utils.php'; require_once 'api/api.php'; require_once 'CRM/Financial/BAO/FinancialType.php'; define('API_LATEST_VERSION', 3); @@ -100,11 +89,6 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { */ protected $tempDirs; - /** - * @var Utils instance - */ - public static $utils; - /** * @var boolean populateOnce allows to skip db resets in setUp * @@ -169,19 +153,7 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { // we need full error reporting error_reporting(E_ALL & ~E_NOTICE); - if (!empty($GLOBALS['mysql_db'])) { - self::$_dbName = $GLOBALS['mysql_db']; - } - else { - self::$_dbName = 'civicrm_tests_dev'; - } - - // create test database - self::$utils = new Utils($GLOBALS['mysql_host'], - $GLOBALS['mysql_port'], - $GLOBALS['mysql_user'], - $GLOBALS['mysql_pass'] - ); + self::$_dbName = self::getDBName(); // also load the class loader require_once 'CRM/Core/ClassLoader.php'; @@ -220,7 +192,12 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { * @return string */ public static function getDBName() { - $dbName = !empty($GLOBALS['mysql_db']) ? $GLOBALS['mysql_db'] : 'civicrm_tests_dev'; + static $dbName = NULL; + if ($dbName === NULL) { + require_once "DB.php"; + $dsninfo = DB::parseDSN(CIVICRM_DSN); + $dbName = $dsninfo['database']; + } return $dbName; } @@ -243,7 +220,8 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { self::$dbInit = TRUE; } - return $this->createDefaultDBConnection(self::$utils->pdo, $dbName); + + return $this->createDefaultDBConnection(Civi\Test::pdo(), $dbName); } /** @@ -259,6 +237,9 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { * TRUE if the populate logic runs; FALSE if it is skipped */ protected static function _populateDB($perClass = FALSE, &$object = NULL) { + if (CIVICRM_UF !== 'UnitTests') { + throw new \RuntimeException("_populateDB requires CIVICRM_UF=UnitTests"); + } if ($perClass || $object == NULL) { $dbreset = TRUE; @@ -272,95 +253,7 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { } self::$populateOnce = NULL; - $dbName = self::getDBName(); - $pdo = self::$utils->pdo; - // only consider real tables and not views - $tables = $pdo->query("SELECT table_name FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_SCHEMA = '{$dbName}' AND TABLE_TYPE = 'BASE TABLE'"); - - $truncates = array(); - $drops = array(); - foreach ($tables as $table) { - // skip log tables - if (substr($table['table_name'], 0, 4) == 'log_') { - continue; - } - - // don't change list of installed extensions - if ($table['table_name'] == 'civicrm_extension') { - continue; - } - - if (substr($table['table_name'], 0, 14) == 'civicrm_value_') { - $drops[] = 'DROP TABLE ' . $table['table_name'] . ';'; - } - else { - $truncates[] = 'TRUNCATE ' . $table['table_name'] . ';'; - } - } - - $queries = array( - "USE {$dbName};", - "SET foreign_key_checks = 0", - // SQL mode needs to be strict, that's our standard - "SET SQL_MODE='STRICT_ALL_TABLES';", - "SET global innodb_flush_log_at_trx_commit = 2;", - ); - $queries = array_merge($queries, $truncates); - $queries = array_merge($queries, $drops); - foreach ($queries as $query) { - if (self::$utils->do_query($query) === FALSE) { - // failed to create test database - echo "failed to create test db."; - exit; - } - } - - // initialize test database - $sql_file2 = dirname(dirname(dirname(dirname(__FILE__)))) . "/sql/civicrm_data.mysql"; - $sql_file3 = dirname(dirname(dirname(dirname(__FILE__)))) . "/sql/test_data.mysql"; - $sql_file4 = dirname(dirname(dirname(dirname(__FILE__)))) . "/sql/test_data_second_domain.mysql"; - - $query2 = file_get_contents($sql_file2); - $query3 = file_get_contents($sql_file3); - $query4 = file_get_contents($sql_file4); - if (self::$utils->do_query($query2) === FALSE) { - echo "Cannot load civicrm_data.mysql. Aborting."; - exit; - } - if (self::$utils->do_query($query3) === FALSE) { - echo "Cannot load test_data.mysql. Aborting."; - exit; - } - if (self::$utils->do_query($query4) === FALSE) { - echo "Cannot load test_data.mysql. Aborting."; - exit; - } - - // done with all the loading, get transactions back - if (self::$utils->do_query("set global innodb_flush_log_at_trx_commit = 1;") === FALSE) { - echo "Cannot set global? Huh?"; - exit; - } - - if (self::$utils->do_query("SET foreign_key_checks = 1") === FALSE) { - echo "Cannot get foreign keys back? Huh?"; - exit; - } - - unset($query, $query2, $query3); - - // Rebuild triggers - civicrm_api('system', 'flush', array('version' => 3, 'triggers' => 1)); - - CRM_Core_BAO_ConfigSetting::setEnabledComponents(array( - 'CiviEvent', - 'CiviContribute', - 'CiviMember', - 'CiviMail', - 'CiviReport', - 'CiviPledge', - )); + Civi\Test::data()->populate(); return TRUE; } @@ -481,15 +374,6 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { return $contactID; } - public function cleanDB() { - self::$populateOnce = NULL; - $this->DBResetRequired = TRUE; - - $this->_dbconn = $this->getConnection(); - static::_populateDB(); - $this->tempDirs = array(); - } - /** * Create default domain contacts for the two domains added during test class. * database population. @@ -527,30 +411,6 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { $this->cleanTempDirs(); $this->unsetExtensionSystem(); - $this->clearOutputBuffer(); - } - - /** - * FIXME: Maybe a better way to do it - */ - public function foreignKeyChecksOff() { - self::$utils = new Utils($GLOBALS['mysql_host'], - $GLOBALS['mysql_port'], - $GLOBALS['mysql_user'], - $GLOBALS['mysql_pass'] - ); - $dbName = self::getDBName(); - $query = "USE {$dbName};" . "SET foreign_key_checks = 1"; - if (self::$utils->do_query($query) === FALSE) { - // fail happens - echo 'Cannot set foreign_key_checks = 0'; - exit(1); - } - return TRUE; - } - - public function foreignKeyChecksOn() { - // FIXME: might not be needed if previous fixme implemented } /** @@ -775,7 +635,7 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { $this->assertEquals($paramValue, $actualValues[$paramName], "Value Mismatch On $paramName - value 1 is " . print_r($paramValue, TRUE) . " value 2 is " . print_r($actualValues[$paramName], TRUE)); } else { - $this->fail("Attribute '$paramName' not present in actual array."); + $this->assertNull($expectedValues[$paramName], "Attribute '$paramName' not present in actual array and we expected it to be " . $expectedValues[$paramName]); } } } @@ -927,7 +787,6 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { ); $calls = new \Civi\API\ExternalBatch($defaultParams); - $calls->setSettingsPath("$civicrm_root/tests/phpunit/CiviTest/civicrm.settings.cli.php"); if (!$calls->isSupported()) { $this->markTestSkipped('The test relies on Civi\API\ExternalBatch. This is unsupported in the local environment.'); @@ -2566,7 +2425,9 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { } /** - * @param $tablesToTruncate + * Quick clean by emptying tables created for the test. + * + * @param array $tablesToTruncate * @param bool $dropCustomValueTables * @throws \Exception */ @@ -2575,6 +2436,12 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { throw new Exception("CiviUnitTestCase: quickCleanup() is not compatible with useTransaction()"); } if ($dropCustomValueTables) { + $optionGroupResult = CRM_Core_DAO::executeQuery('SELECT option_group_id FROM civicrm_custom_field'); + while ($optionGroupResult->fetch()) { + if (!empty($optionGroupResult->option_group_id)) { + CRM_Core_DAO::executeQuery('DELETE FROM civicrm_option_group WHERE id = ' . $optionGroupResult->option_group_id); + } + } $tablesToTruncate[] = 'civicrm_custom_group'; $tablesToTruncate[] = 'civicrm_custom_field'; } @@ -2782,7 +2649,6 @@ AND ( TABLE_NAME LIKE 'civicrm_value_%' ) * 'template_path' Set to TRUE to use the default, FALSE or "" to disable support, or a string path to use another path */ public function customDirectories($customDirs) { - require_once 'CRM/Core/Config.php'; $config = CRM_Core_Config::singleton(); if (empty($customDirs['php_path']) || $customDirs['php_path'] === FALSE) { @@ -3354,12 +3220,6 @@ AND ( TABLE_NAME LIKE 'civicrm_value_%' ) } } - public function clearOutputBuffer() { - while (ob_get_level() > 0) { - ob_end_clean(); - } - } - /** * Assert the attachment exists. * @@ -3439,4 +3299,107 @@ AND ( TABLE_NAME LIKE 'civicrm_value_%' ) )); } + /** + * Add participant with contribution + * + * @return array + */ + protected function createParticipantWithContribution() { + // creating price set, price field + $this->_contactId = Contact::createIndividual(); + $this->_eventId = Event::create($this->_contactId); + $eventParams = array( + 'id' => $this->_eventId, + 'financial_type_id' => 4, + 'is_monetary' => 1, + ); + $this->callAPISuccess('event', 'create', $eventParams); + $priceFields = $this->createPriceSet('event', $this->_eventId); + $participantParams = array( + 'financial_type_id' => 4, + 'event_id' => $this->_eventId, + 'role_id' => 1, + 'status_id' => 14, + 'fee_currency' => 'USD', + 'contact_id' => $this->_contactId, + ); + $participant = $this->callAPISuccess('Participant', 'create', $participantParams); + $contributionParams = array( + 'total_amount' => 150, + 'currency' => 'USD', + 'contact_id' => $this->_contactId, + 'financial_type_id' => 4, + 'contribution_status_id' => 1, + 'partial_payment_total' => 300.00, + 'partial_amount_pay' => 150, + 'contribution_mode' => 'participant', + 'participant_id' => $participant['id'], + ); + foreach ($priceFields['values'] as $key => $priceField) { + $lineItems[1][$key] = array( + 'price_field_id' => $priceField['price_field_id'], + 'price_field_value_id' => $priceField['id'], + 'label' => $priceField['label'], + 'field_title' => $priceField['label'], + 'qty' => 1, + 'unit_price' => $priceField['amount'], + 'line_total' => $priceField['amount'], + 'financial_type_id' => $priceField['financial_type_id'], + ); + } + $contributionParams['line_item'] = $lineItems; + $contribution = $this->callAPISuccess('Contribution', 'create', $contributionParams); + $paymentParticipant = array( + 'participant_id' => $participant['id'], + 'contribution_id' => $contribution['id'], + ); + $ids = array(); + $this->callAPISuccess('ParticipantPayment', 'create', $paymentParticipant); + return array($lineItems, $contribution); + } + + /** + * Create price set + * + * @param string $component + * @param int $componentId + * + * @return array + */ + protected function createPriceSet($component = 'contribution_page', $componentId = NULL) { + $paramsSet['title'] = 'Price Set'; + $paramsSet['name'] = CRM_Utils_String::titleToVar('Price Set'); + $paramsSet['is_active'] = TRUE; + $paramsSet['financial_type_id'] = 4; + $paramsSet['extends'] = 1; + $priceSet = $this->callAPISuccess('price_set', 'create', $paramsSet); + $priceSetId = $priceSet['id']; + //Checking for priceset added in the table. + $this->assertDBCompareValue('CRM_Price_BAO_PriceSet', $priceSetId, 'title', + 'id', $paramsSet['title'], 'Check DB for created priceset' + ); + $paramsField = array( + 'label' => 'Price Field', + 'name' => CRM_Utils_String::titleToVar('Price Field'), + 'html_type' => 'CheckBox', + 'option_label' => array('1' => 'Price Field 1', '2' => 'Price Field 2'), + 'option_value' => array('1' => 100, '2' => 200), + 'option_name' => array('1' => 'Price Field 1', '2' => 'Price Field 2'), + 'option_weight' => array('1' => 1, '2' => 2), + 'option_amount' => array('1' => 100, '2' => 200), + 'is_display_amounts' => 1, + 'weight' => 1, + 'options_per_line' => 1, + 'is_active' => array('1' => 1, '2' => 1), + 'price_set_id' => $priceSet['id'], + 'is_enter_qty' => 1, + 'financial_type_id' => CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_FinancialType', 'Event Fee', 'id', 'name'), + ); + $priceField = CRM_Price_BAO_PriceField::create($paramsField); + if ($componentId) { + CRM_Price_BAO_PriceSet::addTo('civicrm_' . $component, $componentId, $priceSetId); + } + return $this->callAPISuccess('PriceFieldValue', 'get', array('price_field_id' => $priceField->id)); + } + }