Transactions don't work for custom field tests because schema alterations can't be inside transactions.
This moves the "implements TransactionalInterface" declaration from the base class to the test classes
so each one can opt-in individually.
namespace api\v4\Action;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class AbstractActionFunctionTest extends UnitTestCase {
+class AbstractActionFunctionTest extends Api4TestBase implements TransactionalInterface {
public function testUndefinedParamException(): void {
$this->expectException('API_Exception');
namespace api\v4\Action;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\MockBasicEntity;
use Civi\Api4\Utils\CoreUtil;
use Civi\Core\Event\GenericHookEvent;
use Civi\Test\HookInterface;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class BasicActionsTest extends UnitTestCase implements HookInterface {
+class BasicActionsTest extends Api4TestBase implements HookInterface, TransactionalInterface {
/**
* Listens for civi.api4.entityTypes event to manually add this nonstandard entity
namespace api\v4\Action;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Activity;
use Civi\Api4\Contact;
use Civi\Api4\CustomField;
use Civi\Api4\CustomGroup;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class ChainTest extends UnitTestCase {
+class ChainTest extends Api4TestBase implements TransactionalInterface {
public function tearDown(): void {
CustomField::delete()
namespace api\v4\Action;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Activity;
use Civi\Api4\Contact;
use Civi\Test\CiviEnvBuilder;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
* This class tests a series of complex query situations described in the
* initial APIv4 specification
*/
-class ComplexQueryTest extends UnitTestCase {
+class ComplexQueryTest extends Api4TestBase implements TransactionalInterface {
public function setUpHeadless(): CiviEnvBuilder {
$this->loadDataSet('DefaultDataSet');
namespace api\v4\Action;
+use api\v4\Api4TestBase;
use Civi\Api4\Contact;
use Civi\Api4\Email;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class ContactApiKeyTest extends \api\v4\UnitTestCase {
+class ContactApiKeyTest extends Api4TestBase implements TransactionalInterface {
public function testGetApiKey() {
\CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviCRM', 'add contacts', 'edit api keys', 'view all contacts', 'edit all contacts'];
namespace api\v4\Action;
+use api\v4\Api4TestBase;
use Civi\Api4\Contact;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class ContactChecksumTest extends \api\v4\UnitTestCase {
+class ContactChecksumTest extends Api4TestBase implements TransactionalInterface {
public function testGetChecksum() {
$contact = Contact::create(FALSE)
namespace api\v4\Action;
+use api\v4\Api4TestBase;
use Civi\Api4\Contact;
use Civi\Api4\Relationship;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class ContactGetTest extends \api\v4\UnitTestCase {
+class ContactGetTest extends Api4TestBase implements TransactionalInterface {
public function testGetDeletedContacts() {
$last_name = uniqid('deleteContactTest');
namespace api\v4\Action;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class ContactIsDeletedTest extends UnitTestCase {
+class ContactIsDeletedTest extends Api4TestBase implements TransactionalInterface {
public function setUpHeadless() {
$relatedTables = [
namespace api\v4\Action;
use Civi\Api4\Relationship;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Contact;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class CurrentFilterTest extends UnitTestCase {
+class CurrentFilterTest extends Api4TestBase implements TransactionalInterface {
public function testCurrentRelationship() {
$cid1 = Contact::create()->addValue('first_name', 'Bob1')->execute()->first()['id'];
use Civi\Api4\Contact;
use Civi\Api4\Contribution;
use Civi\Api4\Relationship;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class DateTest extends UnitTestCase {
+class DateTest extends Api4TestBase implements TransactionalInterface {
public function testRelationshipDate() {
$c1 = Contact::create()
namespace api\v4\Action;
use Civi\Api4\MockBasicEntity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class EvaluateConditionTest extends UnitTestCase {
+class EvaluateConditionTest extends Api4TestBase implements TransactionalInterface {
public function testEvaluateCondition() {
$action = MockBasicEntity::get();
* @copyright CiviCRM LLC https://civicrm.org/licensing
*/
+use api\v4\Api4TestBase;
use Civi\Api4\Event;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class EventTest extends \api\v4\UnitTestCase {
+class EventTest extends Api4TestBase implements TransactionalInterface {
/**
* Test that the event api filters out templates by default.
namespace api\v4\Action;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Activity;
use Civi\Api4\CiviCase;
use Civi\Api4\Contact;
use Civi\Api4\Phone;
use Civi\Api4\Relationship;
use Civi\Api4\Tag;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class FkJoinTest extends UnitTestCase {
+class FkJoinTest extends Api4TestBase implements TransactionalInterface {
public function setUpHeadless() {
$this->loadDataSet('DefaultDataSet');
namespace api\v4\Action;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Activity;
use Civi\Api4\Address;
use Civi\Api4\Contact;
use Civi\Api4\Tag;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class GetExtraFieldsTest extends UnitTestCase {
+class GetExtraFieldsTest extends Api4TestBase implements TransactionalInterface {
public function testGetFieldsByContactType() {
$getFields = Contact::getFields(FALSE)->addSelect('name')->addWhere('type', '=', 'Field');
namespace api\v4\Action;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Activity;
use Civi\Api4\Campaign;
use Civi\Api4\Contact;
use Civi\Api4\Contribution;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class GetFieldsTest extends UnitTestCase {
+class GetFieldsTest extends Api4TestBase implements TransactionalInterface {
public function testOptionsAreReturned() {
$fields = Contact::getFields(FALSE)
namespace api\v4\Action;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\MockArrayEntity;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class GetFromArrayTest extends UnitTestCase {
+class GetFromArrayTest extends Api4TestBase implements TransactionalInterface {
public function testArrayGetWithLimit() {
$result = MockArrayEntity::get()
namespace api\v4\Action;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class IndexTest extends UnitTestCase {
+class IndexTest extends Api4TestBase implements TransactionalInterface {
public function testIndex() {
// Results indexed by name
use Civi\Api4\Phone;
use Civi\Api4\Address;
use Civi\Api4\OpenID;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class IsPrimaryTest extends UnitTestCase {
+class IsPrimaryTest extends Api4TestBase implements TransactionalInterface {
/**
* Test that creating a location entity or deleting one re-assigns is_primary correctly.
use Civi\Api4\Activity;
use Civi\Api4\Contact;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class NullValueTest extends UnitTestCase {
+class NullValueTest extends Api4TestBase implements TransactionalInterface {
public function setUpHeadless() {
$format = '{contact.first_name}{ }{contact.last_name}';
namespace api\v4\Action;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Activity;
use Civi\Api4\RecentItem;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class RecentItemsTest extends UnitTestCase {
+class RecentItemsTest extends Api4TestBase implements TransactionalInterface {
public function testAddDeleteActivity(): void {
$cid = $this->createLoggedInUser();
use Civi\Api4\CustomValue;
use Civi\Api4\Email;
use api\v4\Traits\TableDropperTrait;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Contact;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class ReplaceTest extends UnitTestCase {
+class ReplaceTest extends Api4TestBase implements TransactionalInterface {
use TableDropperTrait;
/**
namespace api\v4\Action;
use Civi\Api4\Event;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class RequiredFieldTest extends UnitTestCase {
+class RequiredFieldTest extends Api4TestBase implements TransactionalInterface {
public function testRequired() {
$msg = '';
namespace api\v4\Action;
use Civi\Api4\Contact;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class ResultTest extends UnitTestCase {
+class ResultTest extends Api4TestBase implements TransactionalInterface {
public function testJsonSerialize() {
$result = Contact::getFields(FALSE)->addWhere('type', '=', 'Field')->execute();
namespace api\v4\Action;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Contact;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class SaveTest extends UnitTestCase {
+class SaveTest extends Api4TestBase implements TransactionalInterface {
/**
* @dataProvider getMatchingCriteriaDataProvider
namespace api\v4\Action;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Contact;
use Civi\Api4\Email;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class SqlExpressionTest extends UnitTestCase {
+class SqlExpressionTest extends Api4TestBase implements TransactionalInterface {
public function testSelectNull() {
Contact::create()->addValue('first_name', 'bob')->setCheckPermissions(FALSE)->execute();
namespace api\v4\Action;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Activity;
use Civi\Api4\Contact;
use Civi\Api4\Contribution;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class SqlFunctionTest extends UnitTestCase {
+class SqlFunctionTest extends Api4TestBase implements TransactionalInterface {
public function testGetFunctions() {
$functions = array_column(\CRM_Api4_Page_Api4Explorer::getSqlFunctions(), NULL, 'name');
namespace api\v4\Action;
use Civi\Api4\Contact;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* Class UpdateContactTest
* @package api\v4\Action
* @group headless
*/
-class UpdateContactTest extends UnitTestCase {
+class UpdateContactTest extends Api4TestBase implements TransactionalInterface {
public function testUpdateWithIdInWhere() {
$contactId = Contact::create(FALSE)
use api\v4\Traits\TestDataLoaderTrait;
use Civi\Api4\UFMatch;
use Civi\Test\HeadlessInterface;
-use Civi\Test\TransactionalInterface;
require_once 'api/Exception.php';
/**
* @group headless
*/
-class UnitTestCase extends \PHPUnit\Framework\TestCase implements HeadlessInterface, TransactionalInterface {
+class Api4TestBase extends \PHPUnit\Framework\TestCase implements HeadlessInterface {
use TestDataLoaderTrait;
*/
-namespace api\v4\Action;
+namespace api\v4\Custom;
use Civi\Api4\Contact;
use Civi\Api4\CustomField;
/**
* @group headless
*/
-class BasicCustomFieldTest extends BaseCustomValueTest {
+class BasicCustomFieldTest extends CustomTestBase {
public function tearDown(): void {
FinancialType::delete(FALSE)
*/
-namespace api\v4\Entity;
+namespace api\v4\Custom;
use Civi\Api4\Contact;
use Civi\Api4\CustomGroup;
use Civi\Api4\CustomField;
-use api\v4\Action\BaseCustomValueTest;
/**
* @group headless
*/
-class ContactCustomJoinTest extends BaseCustomValueTest {
+class ContactCustomJoinTest extends CustomTestBase {
/**
* Add test to ensure that in the very unusual and not really supported situation where there is a space in the
*/
-namespace api\v4\Utils;
+namespace api\v4\Custom;
-use api\v4\UnitTestCase;
use Civi\Api4\CustomField;
use Civi\Api4\CustomGroup;
use Civi\Api4\Utils\CoreUtil;
/**
* @group headless
*/
-class CoreUtilTest extends UnitTestCase {
+class CoreUtilTest extends CustomTestBase {
/**
*/
*/
-namespace api\v4\Action;
+namespace api\v4\Custom;
use Civi\Api4\CustomField;
use Civi\Api4\CustomGroup;
/**
* @group headless
*/
-class CreateCustomValueTest extends BaseCustomValueTest {
+class CreateCustomValueTest extends CustomTestBase {
public function testGetWithCustomData() {
$optionValues = ['r' => 'Red', 'g' => 'Green', 'b' => 'Blue'];
*/
-namespace api\v4\Action;
+namespace api\v4\Custom;
use Civi\Api4\CustomField;
use Civi\Api4\CustomGroup;
/**
* @group headless
*/
-class CreateWithOptionGroupTest extends BaseCustomValueTest {
+class CreateWithOptionGroupTest extends CustomTestBase {
public function testGetWithCustomData() {
$group = uniqid('fava');
*/
-namespace api\v4\Action;
+namespace api\v4\Custom;
use Civi\Api4\Contact;
use Civi\Api4\CustomField;
/**
* @group headless
*/
-class CustomContactRefTest extends BaseCustomValueTest {
+class CustomContactRefTest extends CustomTestBase {
public function testGetWithJoin() {
$firstName = uniqid('fav');
*/
-namespace api\v4\Action;
+namespace api\v4\Custom;
use Civi\Api4\Activity;
use Civi\Api4\CustomField;
/**
* @group headless
*/
-class CustomFieldAlterTest extends BaseCustomValueTest {
+class CustomFieldAlterTest extends CustomTestBase {
public function testChangeSerialize() {
$contact = $this->createEntity(['type' => 'Individual']);
*/
-namespace api\v4\Action;
+namespace api\v4\Custom;
use Civi\Api4\ACL;
use Civi\Api4\Contact;
/**
* @group headless
*/
-class CustomGroupACLTest extends BaseCustomValueTest {
+class CustomGroupACLTest extends CustomTestBase {
public function tearDown(): void {
parent::tearDown();
*/
-namespace api\v4\Action;
+namespace api\v4\Custom;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\CustomGroup;
use Civi\Api4\CustomField;
-abstract class BaseCustomValueTest extends UnitTestCase {
+/**
+ * Use this base class for any APIv4 tests which create custom groups/fields,
+ * to ensure they get cleaned up properly.
+ *
+ * Note: The TransactionalInterface won't work with custom fields because of adding/dropping tables.
+ * So these tests have to do their own cleanup of any contacts or other entities created.
+ * The recommended way is to override the `tearDown` function and calling `parent::tearDown()`.
+ */
+abstract class CustomTestBase extends Api4TestBase {
/**
* Delete all created options groups.
*/
-namespace api\v4\Action;
+namespace api\v4\Custom;
use Civi\Api4\Contact;
use Civi\Api4\CustomField;
/**
* @group headless
*/
-class CustomValuePerformanceTest extends BaseCustomValueTest {
+class CustomValuePerformanceTest extends CustomTestBase {
use QueryCounterTrait;
*/
-namespace api\v4\Action;
+namespace api\v4\Custom;
use Civi\Api4\CustomField;
use Civi\Api4\CustomGroup;
/**
* @group headless
*/
-class CustomValueTest extends BaseCustomValueTest {
+class CustomValueTest extends CustomTestBase {
protected $contactID;
*/
-namespace api\v4\Action;
+namespace api\v4\Custom;
use Civi\Api4\Contact;
use Civi\Api4\CustomField;
/**
* @group headless
*/
-class ExtendFromIndividualTest extends BaseCustomValueTest {
+class ExtendFromIndividualTest extends CustomTestBase {
public function testGetWithNonStandardExtends() {
*/
-namespace api\v4\Action;
+namespace api\v4\Custom;
use Civi\Api4\Address;
use Civi\Api4\Campaign;
/**
* @group headless
*/
-class PseudoconstantTest extends BaseCustomValueTest {
+class PseudoconstantTest extends CustomTestBase {
public function testOptionValue() {
$cid = Contact::create(FALSE)->addValue('first_name', 'bill')->execute()->first()['id'];
*/
-namespace api\v4\Action;
+namespace api\v4\Custom;
use Civi\Api4\Contact;
use Civi\Api4\CustomField;
/**
* @group headless
*/
-class UpdateCustomValueTest extends BaseCustomValueTest {
+class UpdateCustomValueTest extends CustomTestBase {
public function testGetWithCustomData() {
namespace api\v4\Entity;
use Civi\Api4\Contact;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Activity;
use Civi\Api4\ActivityContact;
use Civi\Test\TransactionalInterface;
*
* @group headless
*/
-class ActivityTest extends UnitTestCase implements TransactionalInterface {
+class ActivityTest extends Api4TestBase implements TransactionalInterface {
public function testActivityUpdate() {
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Address;
use Civi\Api4\Contact;
use Civi\Test\TransactionalInterface;
*
* @group headless
*/
-class AddressTest extends UnitTestCase implements TransactionalInterface {
+class AddressTest extends Api4TestBase implements TransactionalInterface {
/**
* Check that 2 addresses for the same contact can't both be primary
namespace api\v4\Entity;
use Civi\Api4\CiviCase;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Relationship;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class CaseTest extends UnitTestCase {
+class CaseTest extends Api4TestBase implements TransactionalInterface {
public function setUp(): void {
parent::setUp();
use Civi\Api4\CustomField;
use Civi\Api4\CustomGroup;
use Civi\Api4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Event\ValidateValuesEvent;
use Civi\Api4\Service\Spec\CustomFieldSpec;
use Civi\Api4\Service\Spec\FieldSpec;
use Civi\Core\Event\PostEvent;
use Civi\Core\Event\PreEvent;
use Civi\Test\HookInterface;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class ConformanceTest extends UnitTestCase implements HookInterface {
+class ConformanceTest extends Api4TestBase implements HookInterface, TransactionalInterface {
use CheckAccessTrait;
use TableDropperTrait;
use Civi\Api4\ActivityContact;
use Civi\Api4\Contact;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Test\TransactionalInterface;
/**
*
* @group headless
*/
-class ContactInterchangeTest extends UnitTestCase implements TransactionalInterface {
+class ContactInterchangeTest extends Api4TestBase implements TransactionalInterface {
public function getExamples() {
$apiWriters = [
use Civi\Api4\Contact;
use Civi\Api4\OptionValue;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class ContactJoinTest extends UnitTestCase {
+class ContactJoinTest extends Api4TestBase implements TransactionalInterface {
public function setUpHeadless() {
$relatedTables = [
namespace api\v4\Entity;
use Civi\Api4\Contact;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\ContactType;
use Civi\Api4\Email;
use Civi\Api4\Navigation;
/**
* @group headless
*/
-class ContactTypeTest extends UnitTestCase implements TransactionalInterface {
+class ContactTypeTest extends Api4TestBase implements TransactionalInterface {
public function testMenuItemWillBeCreatedAndDeleted() {
ContactType::create(FALSE)
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Domain;
use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class DomainTest extends UnitTestCase implements TransactionalInterface {
+class DomainTest extends Api4TestBase implements TransactionalInterface {
public function testActiveDomain() {
Domain::create(FALSE)
use Civi\API\Exception\NotImplementedException;
use Civi\Api4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class EntityTest extends UnitTestCase {
+class EntityTest extends Api4TestBase implements TransactionalInterface {
public function testEntityGet() {
\CRM_Core_BAO_ConfigSetting::enableComponent('CiviEvent');
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class ExampleDataTest extends UnitTestCase {
+class ExampleDataTest extends Api4TestBase implements TransactionalInterface {
/**
* Basic canary test fetching a specific example.
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Extension;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class ExtensionTest extends UnitTestCase {
+class ExtensionTest extends Api4TestBase implements TransactionalInterface {
public function testGet() {
$moduleTest = Extension::get(FALSE)
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\GroupContact;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class GroupContactTest extends UnitTestCase {
+class GroupContactTest extends Api4TestBase implements TransactionalInterface {
public function testCreate() {
$contact = $this->createEntity(['type' => 'Individual']);
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Domain;
use Civi\Api4\Group;
use Civi\Api4\Managed;
/**
* @group headless
*/
-class ManagedEntityTest extends UnitTestCase implements TransactionalInterface, HookInterface {
+class ManagedEntityTest extends Api4TestBase implements TransactionalInterface, HookInterface {
/**
* @var array[]
*/
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Contact;
use Civi\Api4\Domain;
use Civi\Api4\MembershipType;
/**
* @group headless
*/
-class MembershipTest extends UnitTestCase implements TransactionalInterface {
+class MembershipTest extends Api4TestBase implements TransactionalInterface {
public function testUpdateWeights() {
$getValues = function($domain) {
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Test\DbTestTrait;
use Civi\Test\GenericAssertionsTrait;
use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class MessageTemplateTest extends UnitTestCase implements TransactionalInterface {
+class MessageTemplateTest extends Api4TestBase implements TransactionalInterface {
use GenericAssertionsTrait;
use DbTestTrait;
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Navigation;
use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class NavigationTest extends UnitTestCase implements TransactionalInterface {
+class NavigationTest extends Api4TestBase implements TransactionalInterface {
public function testCreate() {
$created = Navigation::create(FALSE)
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Note;
use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class NoteTest extends UnitTestCase implements TransactionalInterface {
+class NoteTest extends Api4TestBase implements TransactionalInterface {
public function testDeleteWithChildren() {
$c1 = $this->createEntity(['type' => 'Individual']);
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\OptionGroup;
use Civi\Api4\OptionValue;
use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class OptionValueTest extends UnitTestCase implements TransactionalInterface {
+class OptionValueTest extends Api4TestBase implements TransactionalInterface {
public function testNullDefault() {
OptionGroup::create(FALSE)
namespace api\v4\Entity;
use Civi\Api4\Participant;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class ParticipantTest extends UnitTestCase {
+class ParticipantTest extends Api4TestBase implements TransactionalInterface {
public function setUp(): void {
parent::setUp();
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\RecentItem;
use Civi\Api4\Contact;
use Civi\Test\TransactionalInterface;
*
* @group headless
*/
-class RecentItemTest extends UnitTestCase implements TransactionalInterface {
+class RecentItemTest extends Api4TestBase implements TransactionalInterface {
/**
*
namespace api\v4\Entity;
use Civi\Api4\Contact;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Relationship;
use Civi\Api4\RelationshipCache;
use Civi\Test\TransactionalInterface;
*
* @group headless
*/
-class RelationshipTest extends UnitTestCase implements TransactionalInterface {
+class RelationshipTest extends Api4TestBase implements TransactionalInterface {
public function testRelCacheCount() {
$c1 = Contact::create(FALSE)->addValue('first_name', '1')->execute()->first()['id'];
namespace api\v4\Entity;
use Civi\Api4\Route;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
/**
* @group headless
*/
-class RouteTest extends UnitTestCase {
+class RouteTest extends Api4TestBase {
public function testGet() {
$result = Route::get()->addWhere('path', '=', 'civicrm/admin')->execute();
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Contact;
use Civi\Api4\Email;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class SavedSearchTest extends UnitTestCase {
+class SavedSearchTest extends Api4TestBase implements TransactionalInterface {
/**
* @throws \API_Exception
namespace api\v4\Entity;
use Civi\Api4\Setting;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class SettingTest extends UnitTestCase {
+class SettingTest extends Api4TestBase implements TransactionalInterface {
public function testSettingASetting() {
$setting = Setting::set()->addValue('menubar_position', 'above-crm-container')->setCheckPermissions(FALSE)->execute()->first();
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Crypto\CryptoTestTrait;
+use Civi\Test\TransactionalInterface;
use Psr\Log\LoggerInterface;
/**
* @group headless
*/
-class RotateKeyTest extends UnitTestCase {
+class RotateKeyTest extends Api4TestBase implements TransactionalInterface {
use CryptoTestTrait;
use Civi\Api4\Setting;
use Civi\Api4\StatusPreference;
use Civi\Api4\System;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class SystemTest extends UnitTestCase {
+class SystemTest extends Api4TestBase implements TransactionalInterface {
public function testSystemCheck() {
$origEnv = \CRM_Core_Config::environment();
namespace api\v4\Entity;
use Civi\Api4\Contact;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\EntityTag;
use Civi\Api4\Tag;
use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class TagTest extends UnitTestCase implements TransactionalInterface {
+class TagTest extends Api4TestBase implements TransactionalInterface {
public function testTagFilter() {
$conTag = Tag::create(FALSE)
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class TranslationTest extends UnitTestCase {
+class TranslationTest extends Api4TestBase implements TransactionalInterface {
protected $ids = [];
namespace api\v4\Entity;
use Civi\Api4\Contact;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Event\ValidateValuesEvent;
use Civi\Test\TransactionalInterface;
*
* @group headless
*/
-class ValidateValuesTest extends UnitTestCase implements TransactionalInterface {
+class ValidateValuesTest extends Api4TestBase implements TransactionalInterface {
private $lastValidator;
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class WordReplacementTest extends UnitTestCase {
+class WordReplacementTest extends Api4TestBase implements TransactionalInterface {
public function testDefaults() {
$create = \Civi\Api4\WordReplacement::create(FALSE)
namespace api\v4\Entity;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\WorkflowMessage;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class WorkflowMessageTest extends UnitTestCase {
+class WorkflowMessageTest extends Api4TestBase implements TransactionalInterface {
public function testGet() {
$result = \Civi\Api4\WorkflowMessage::get(0)
use Civi\API\Request;
use Civi\Api4\Query\Api4SelectQuery;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class Api4SelectQueryTest extends UnitTestCase {
+class Api4SelectQueryTest extends Api4TestBase implements TransactionalInterface {
public function setUpHeadless() {
$relatedTables = [
namespace api\v4\Query;
use Civi\Api4\Contact;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* Class OneToOneJoinTest
* @package api\v4\Query
* @group headless
*/
-class OneToOneJoinTest extends UnitTestCase {
+class OneToOneJoinTest extends Api4TestBase implements TransactionalInterface {
public function testOneToOneJoin() {
$armenianContact = Contact::create()
namespace api\v4\Query;
use Civi\Api4\Query\Api4SelectQuery;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class OptionValueJoinTest extends UnitTestCase {
+class OptionValueJoinTest extends Api4TestBase implements TransactionalInterface {
public function setUpHeadless() {
$relatedTables = [
namespace api\v4\Query;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\API\Exception\UnauthorizedException;
use Civi\Api4\Contact;
use Civi\Api4\Event;
use Civi\Api4\Participant;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class PermissionCheckTest extends UnitTestCase {
+class PermissionCheckTest extends Api4TestBase implements TransactionalInterface {
/**
* Clean up after test.
namespace api\v4\Query;
use Civi\Api4\Email;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* Class SelectQueryMultiJoinTest
* @package api\v4\Query
* @group headless
*/
-class SelectQueryMultiJoinTest extends UnitTestCase {
+class SelectQueryMultiJoinTest extends Api4TestBase implements TransactionalInterface {
public function setUpHeadless() {
$this->cleanup(['tablesToTruncate' => ['civicrm_contact', 'civicrm_email']]);
namespace api\v4\Query;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Query\SqlExpression;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class SqlExpressionParserTest extends UnitTestCase {
+class SqlExpressionParserTest extends Api4TestBase implements TransactionalInterface {
public function aggregateFunctions() {
return [
use Civi\Api4\Service\Schema\Joinable\Joinable;
use Civi\Api4\Service\Schema\SchemaMap;
use Civi\Api4\Service\Schema\Table;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
+use Civi\Test\TransactionalInterface;
/**
* @group headless
*/
-class SchemaMapperTest extends UnitTestCase {
+class SchemaMapperTest extends Api4TestBase implements TransactionalInterface {
public function testWillHaveNoPathWithNoTables() {
$map = new SchemaMap();
use Civi\Api4\Service\Spec\FieldSpec;
use Civi\Api4\Service\Spec\RequestSpec;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
/**
* @group headless
*/
-class RequestSpecTest extends UnitTestCase {
+class RequestSpecTest extends Api4TestBase {
public function testRequiredFieldFetching() {
$spec = new RequestSpec('Contact', 'get');
use Civi\Api4\Service\Spec\CustomFieldSpec;
use Civi\Api4\Service\Spec\SpecFormatter;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
/**
* @group headless
*/
-class SpecFormatterTest extends UnitTestCase {
+class SpecFormatterTest extends Api4TestBase {
/**
* @dataProvider arrayFieldSpecProvider
use Civi\Api4\Service\Spec\Provider\Generic\SpecProviderInterface;
use Civi\Api4\Service\Spec\SpecGatherer;
use api\v4\Traits\OptionCleanupTrait;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\CustomField;
use Civi\Api4\CustomGroup;
use api\v4\Traits\TableDropperTrait;
/**
* @group headless
*/
-class SpecGathererTest extends UnitTestCase {
+class SpecGathererTest extends Api4TestBase {
use TableDropperTrait;
use OptionCleanupTrait;
namespace api\v4\Utils;
use Civi\Api4\Utils\ArrayInsertionUtil;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
/**
* @group headless
*/
-class ArrayInsertionServiceTest extends UnitTestCase {
+class ArrayInsertionServiceTest extends Api4TestBase {
public function testInsertWillWork() {
$arr = [];
use Civi\Api4\Utils\ReflectionUtils;
use api\v4\Mock\MockV4ReflectionGrandchild;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
/**
* @group headless
*/
-class ReflectionUtilsTest extends UnitTestCase {
+class ReflectionUtilsTest extends Api4TestBase {
/**
* Test that class annotations are returned across @inheritDoc
namespace api\v4\Utils;
-use api\v4\UnitTestCase;
+use api\v4\Api4TestBase;
use Civi\Api4\Utils\SelectUtil;
/**
* @group headless
*/
-class SelectUtilTest extends UnitTestCase {
+class SelectUtilTest extends Api4TestBase {
private $emailFieldNames = [
'id',