TransactionTest.php
1.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
/**
 * @package framework
 * @subpackage tests
 */
class TransactionTest extends SapphireTest {
	
	protected $extraDataObjects = array(
		'TransactionTest_Object'
	);
	public function testCreateWithTransaction() {
		if(DB::getConn()->supportsTransactions()==true){
			DB::getConn()->transactionStart();
			$obj=new TransactionTest_Object();
			$obj->Title='First page';
			$obj->write();
			$obj=new TransactionTest_Object();
			$obj->Title='Second page';
			$obj->write();
			//Create a savepoint here:
			DB::getConn()->transactionSavepoint('rollback');
			$obj=new TransactionTest_Object();
			$obj->Title='Third page';
			$obj->write();
			$obj=new TransactionTest_Object();
			$obj->Title='Fourth page';
			$obj->write();
			//Revert to a savepoint:
			DB::getConn()->transactionRollback('rollback');
			DB::getConn()->transactionEnd();
			$first=DataObject::get('TransactionTest_Object', "\"Title\"='First page'");
			$second=DataObject::get('TransactionTest_Object', "\"Title\"='Second page'");
			$third=DataObject::get('TransactionTest_Object', "\"Title\"='Third page'");
			$fourth=DataObject::get('TransactionTest_Object', "\"Title\"='Fourth page'");
			//These pages should be in the system
			$this->assertTrue(is_object($first) && $first->exists());
			$this->assertTrue(is_object($second) && $second->exists());
			//These pages should NOT exist, we reverted to a savepoint:
			$this->assertFalse(is_object($third) && $third->exists());
			$this->assertFalse(is_object($fourth) && $fourth->exists());
		} else {
			$this->markTestSkipped('Current database does not support transactions');
		}
	}
}
class TransactionTest_Object extends DataObject implements TestOnly {
	private static $db = array(
		'Title' => 'Varchar(255)'
	);
}