diff --git a/api/v3/utils.php b/api/v3/utils.php index cc2ee37cad274c0dc91476dce26804b0dd56e1f5..d3d6c882a71c8bd2fcad23e8495da158263b4655 100644 --- a/api/v3/utils.php +++ b/api/v3/utils.php @@ -2078,9 +2078,14 @@ function _civicrm_api3_validate_integer(&$params, $fieldName, &$fieldInfo, $enti $fieldValue = NULL; } } - if (!empty($fieldInfo['pseudoconstant']) || !empty($fieldInfo['options']) || $fieldName === 'campaign_id') { + if ( + (!empty($fieldInfo['pseudoconstant']) || !empty($fieldInfo['options']) || $fieldName === 'campaign_id') + // if it is already numeric AND it is an FK field we don't need to validate because + // sql will do that for us on insert (this also saves a big lookup) + && (!is_numeric($fieldValue) || empty($fieldInfo['FKClassName'])) + ) { $additional_lookup_params = []; - if (strtolower($entity) == 'address' && $fieldName == 'state_province_id') { + if (strtolower($entity) === 'address' && $fieldName == 'state_province_id') { $country_id = _civicrm_api3_resolve_country_id($params); if (!empty($country_id)) { $additional_lookup_params = ['country_id' => $country_id]; diff --git a/tests/phpunit/api/v3/ContributionTest.php b/tests/phpunit/api/v3/ContributionTest.php index 717ce48361d64c954253819c9adfc2766f4f8984..4918f332eeeef5f5af0a010e4ad03c1bcd487048 100644 --- a/tests/phpunit/api/v3/ContributionTest.php +++ b/tests/phpunit/api/v3/ContributionTest.php @@ -1204,10 +1204,10 @@ class api_v3_ContributionTest extends CiviUnitTestCase { * In the interests of removing financial type / contribution type checks from * legacy format function lets test that the api is doing this for us */ - public function testCreateInvalidFinancialType() { + public function testCreateInvalidFinancialType(): void { $params = $this->_params; $params['financial_type_id'] = 99999; - $this->callAPIFailure($this->entity, 'create', $params, "'99999' is not a valid option for field financial_type_id"); + $this->callAPIFailure($this->entity, 'create', $params); } /** diff --git a/tests/phpunit/api/v3/MembershipTest.php b/tests/phpunit/api/v3/MembershipTest.php index c23f5150d4b6eb538577757b487554cfdcfe9f76..9a62fa14add7ecc29de668731e4970579f1a405f 100644 --- a/tests/phpunit/api/v3/MembershipTest.php +++ b/tests/phpunit/api/v3/MembershipTest.php @@ -915,23 +915,6 @@ class api_v3_MembershipTest extends CiviUnitTestCase { ); } - public function testMembershipCreateWithInvalidStatus() { - $params = $this->_params; - $params['status_id'] = 999; - $this->callAPIFailure('membership', 'create', $params, - "'999' is not a valid option for field status_id" - ); - } - - public function testMembershipCreateWithInvalidType() { - $params = $this->_params; - $params['membership_type_id'] = 999; - - $this->callAPIFailure('membership', 'create', $params, - "'999' is not a valid option for field membership_type_id" - ); - } - /** * Check with complete array + custom field * Note that the test is written on purpose without any