diff options
Diffstat (limited to 'engine/tests/api')
| -rw-r--r-- | engine/tests/api/helpers.php | 58 | 
1 files changed, 54 insertions, 4 deletions
| diff --git a/engine/tests/api/helpers.php b/engine/tests/api/helpers.php index 43244636b..06ef55138 100644 --- a/engine/tests/api/helpers.php +++ b/engine/tests/api/helpers.php @@ -578,16 +578,14 @@ class ElggCoreHelpersTest extends ElggCoreUnitTest {  		$this->assertEqual(11, $j);  	} -	public function testElggBatchHandlesBrokenEntities() { +	public function testElggBatchReadHandlesBrokenEntities() {  		$num_test_entities = 6;  		$guids = array(); -		$now = time();  		for ($i = $num_test_entities; $i > 0; $i--) {  			$entity = new ElggObject();  			$entity->type = 'object';  			$entity->subtype = 'test_5357_subtype';  			$entity->access_id = ACCESS_PUBLIC; -			$entity->time_created = ($now - $i);  			$entity->save();  			$guids[] = $entity->guid;  			_elgg_invalidate_cache_for_entity($entity->guid); @@ -604,11 +602,12 @@ class ElggCoreHelpersTest extends ElggCoreUnitTest {  		$options = array(  			'type' => 'object',  			'subtype' => 'test_5357_subtype', -			'order_by' => 'e.time_created ASC', +			'order_by' => 'e.guid',  		);  		$entities_visited = array();  		$batch = new ElggBatch('elgg_get_entities', $options, null, 2); +		/* @var ElggEntity[] $batch */  		foreach ($batch as $entity) {  			$entities_visited[] = $entity->guid;  		} @@ -629,6 +628,57 @@ class ElggCoreHelpersTest extends ElggCoreUnitTest {  		delete_data("DELETE FROM {$db_prefix}objects_entity WHERE guid IN (" . implode(',', $guids) . ")");  	} +	public function testElggBatchDeleteHandlesBrokenEntities() { +		$num_test_entities = 6; +		$guids = array(); +		for ($i = $num_test_entities; $i > 0; $i--) { +			$entity = new ElggObject(); +			$entity->type = 'object'; +			$entity->subtype = 'test_5357_subtype'; +			$entity->access_id = ACCESS_PUBLIC; +			$entity->save(); +			$guids[] = $entity->guid; +			_elgg_invalidate_cache_for_entity($entity->guid); +		} + +		// break entities such that the first fetch has one incomplete +		// and the second fetch has only incompletes! +		$db_prefix = elgg_get_config('dbprefix'); +		delete_data(" +			DELETE FROM {$db_prefix}objects_entity +			WHERE guid IN ({$guids[1]}, {$guids[2]}, {$guids[3]}) +		"); + +		$options = array( +			'type' => 'object', +			'subtype' => 'test_5357_subtype', +			'order_by' => 'e.guid', +		); + +		$entities_visited = array(); +		$batch = new ElggBatch('elgg_get_entities', $options, null, 2, false); +		/* @var ElggEntity[] $batch */ +		foreach ($batch as $entity) { +			$entities_visited[] = $entity->guid; +			$entity->delete(); +		} + +		// The broken entities should not have been visited +		$this->assertEqual($entities_visited, array($guids[0], $guids[4], $guids[5])); + +		// cleanup (including leftovers from previous tests) +		$entity_rows = elgg_get_entities(array_merge($options, array( +			'callback' => '', +			'limit' => false, +		))); +		$guids = array(); +		foreach ($entity_rows as $row) { +			$guids[] = $row->guid; +		} +		delete_data("DELETE FROM {$db_prefix}entities WHERE guid IN (" . implode(',', $guids) . ")"); +		delete_data("DELETE FROM {$db_prefix}objects_entity WHERE guid IN (" . implode(',', $guids) . ")"); +	} +  	static function elgg_batch_callback_test($options, $reset = false) {  		static $count = 1; | 
