MDL-46878 blocklib: Testing blocks_delete_instances()

This commit is contained in:
Frederic Massart 2015-08-28 17:41:44 +08:00
parent 080707079d
commit d569c0dae2

View File

@ -478,6 +478,70 @@ class core_blocklib_testcase extends advanced_testcase {
$expected = array('user-profile', 'user-profile-*', 'user-*', '*');
$this->assertEquals($expected, array_values(matching_page_type_patterns_from_pattern($pattern)));
}
public function test_delete_instances() {
global $DB;
$this->purge_blocks();
$this->setAdminUser();
$regionname = 'a-region';
$blockname = $this->get_a_known_block_type();
$context = context_system::instance();
list($page, $blockmanager) = $this->get_a_page_and_block_manager(array($regionname),
$context, 'page-type');
$blockmanager->add_blocks(array($regionname => array($blockname, $blockname, $blockname)), null, null, false, 3);
$blockmanager->load_blocks();
$blocks = $blockmanager->get_blocks_for_region($regionname);
$blockids = array();
$preferences = array();
// Create block related data.
foreach ($blocks as $block) {
$instance = $block->instance;
$pref = 'block' . $instance->id . 'hidden';
set_user_preference($pref, '123', 123);
$preferences[] = $pref;
$pref = 'docked_block_instance_' . $instance->id;
set_user_preference($pref, '123', 123);
$preferences[] = $pref;
blocks_set_visibility($instance, $page, 1);
$blockids[] = $instance->id;
}
// Confirm what has been set.
$this->assertCount(3, $blockids);
list($insql, $inparams) = $DB->get_in_or_equal($blockids);
$this->assertEquals(3, $DB->count_records_select('block_positions', "blockinstanceid $insql", $inparams));
list($insql, $inparams) = $DB->get_in_or_equal($preferences);
$this->assertEquals(6, $DB->count_records_select('user_preferences', "name $insql", $inparams));
// Keep a block on the side.
$allblockids = $blockids;
$tokeep = array_pop($blockids);
// Delete and confirm what should have happened.
blocks_delete_instances($blockids);
// Reload the manager.
list($page, $blockmanager) = $this->get_a_page_and_block_manager(array($regionname),
$context, 'page-type');
$blockmanager->load_blocks();
$blocks = $blockmanager->get_blocks_for_region($regionname);
$this->assertCount(1, $blocks);
list($insql, $inparams) = $DB->get_in_or_equal($allblockids);
$this->assertEquals(1, $DB->count_records_select('block_positions', "blockinstanceid $insql", $inparams));
list($insql, $inparams) = $DB->get_in_or_equal($preferences);
$this->assertEquals(2, $DB->count_records_select('user_preferences', "name $insql", $inparams));
$this->assertFalse(context_block::instance($blockids[0], IGNORE_MISSING));
$this->assertFalse(context_block::instance($blockids[1], IGNORE_MISSING));
context_block::instance($tokeep); // Would throw an exception if it was deleted.
}
}
/**