2 namespace Civi\API\Subscriber
;
4 require_once 'CiviTest/CiviUnitTestCase.php';
8 class TransactionSubscriberTest
extends \CiviUnitTestCase
{
10 public function transactionOptions() {
12 // $r[] = array(string $entity, string $action, array $params, bool $isTransactional, bool $isForceRollback, bool $isNested);
14 $r[] = array(3, 'Widget', 'get', array(), FALSE, FALSE, FALSE);
15 $r[] = array(3, 'Widget', 'create', array(), TRUE, FALSE, FALSE);
16 $r[] = array(3, 'Widget', 'delete', array(), TRUE, FALSE, FALSE);
17 $r[] = array(3, 'Widget', 'submit', array(), TRUE, FALSE, FALSE);
19 $r[] = array(3, 'Widget', 'get', array('is_transactional' => TRUE), TRUE, FALSE, FALSE);
20 $r[] = array(3, 'Widget', 'get', array('is_transactional' => FALSE), FALSE, FALSE, FALSE);
21 $r[] = array(3, 'Widget', 'get', array('is_transactional' => 'nest'), TRUE, FALSE, TRUE);
23 $r[] = array(3, 'Widget', 'create', array('is_transactional' => TRUE), TRUE, FALSE, FALSE);
24 $r[] = array(3, 'Widget', 'create', array('is_transactional' => FALSE), FALSE, FALSE, FALSE);
25 $r[] = array(3, 'Widget', 'create', array('is_transactional' => 'nest'), TRUE, FALSE, TRUE);
27 $r[] = array(3, 'Widget', 'create', array('options' => array('force_rollback' => TRUE)), TRUE, TRUE, TRUE);
28 $r[] = array(3, 'Widget', 'create', array('options' => array('force_rollback' => FALSE)), TRUE, FALSE, FALSE);
30 $r[] = array(3, 'Widget', 'create', array('is_transactional' => TRUE, 'options' => array('force_rollback' => TRUE)), TRUE, TRUE, TRUE);
31 $r[] = array(3, 'Widget', 'create', array('is_transactional' => TRUE, 'options' => array('force_rollback' => FALSE)), TRUE, FALSE, FALSE);
32 $r[] = array(3, 'Widget', 'create', array('is_transactional' => FALSE, 'options' => array('force_rollback' => TRUE)), TRUE, TRUE, TRUE);
33 $r[] = array(3, 'Widget', 'create', array('is_transactional' => FALSE, 'options' => array('force_rollback' => FALSE)), FALSE, FALSE, FALSE);
35 $r[] = array(4, 'Widget', 'get', array(), FALSE, FALSE, FALSE);
36 $r[] = array(4, 'Widget', 'create', array(), TRUE, FALSE, FALSE);
38 $r[] = array(4, 'Widget', 'create', array('is_transactional' => TRUE), TRUE, FALSE, FALSE);
39 $r[] = array(4, 'Widget', 'create', array('is_transactional' => FALSE), FALSE, FALSE, FALSE);
40 $r[] = array(4, 'Widget', 'create', array('is_transactional' => 'nest'), TRUE, FALSE, TRUE);
42 $r[] = array(4, 'Widget', 'create', array('options' => array('force_rollback' => TRUE)), TRUE, TRUE, TRUE);
43 $r[] = array(4, 'Widget', 'create', array('options' => array('force_rollback' => FALSE)), TRUE, FALSE, FALSE);
49 * Ensure that API parameters "is_transactional" and "force_rollback" are parsed correctly
50 * @dataProvider transactionOptions
52 public function testTransactionOptions($version, $entity, $action, $params, $isTransactional, $isForceRollback, $isNested) {
53 $txs = new TransactionSubscriber();
56 $params['version'] = $version;
57 $apiRequest = \Civi\API\Request
::create($entity, $action, $params, array());
59 $this->assertEquals($isTransactional, $txs->isTransactional($apiProvider, $apiRequest), 'check isTransactional');
60 $this->assertEquals($isForceRollback, $txs->isForceRollback($apiProvider, $apiRequest), 'check isForceRollback');
61 $this->assertEquals($isNested, $txs->isNested($apiProvider, $apiRequest), 'check isNested');
64 public function testForceRollback() {
65 $result = $this->callAPISuccess('contact', 'create', array(
66 'contact_type' => 'Individual',
68 'last_name' => 'Myself',
70 'force_rollback' => TRUE,
73 $this->assertTrue(is_numeric($result['id']));
74 $this->assertDBQuery(0, 'SELECT count(*) FROM civicrm_contact WHERE id = %1', array(
75 1 => array($result['id'], 'Integer'),