MDL-63465 blocks: New WS core_blocks_get_dashboard_blocks

This commit is contained in:
Juan Leyva 2018-10-09 16:38:43 +02:00
parent 3cced42eb3
commit 0f8b26043f
5 changed files with 295 additions and 33 deletions

View file

@ -29,6 +29,7 @@ defined('MOODLE_INTERNAL') || die();
global $CFG;
require_once($CFG->dirroot . '/webservice/tests/helpers.php');
require_once($CFG->dirroot . '/my/lib.php');
/**
* External block functions unit tests
@ -138,4 +139,140 @@ class core_block_externallib_testcase extends externallib_advanced_testcase {
}
/**
* Test user get default dashboard blocks.
*/
public function test_get_dashboard_blocks_default_dashboard() {
global $PAGE, $DB;
$this->resetAfterTest(true);
$user = $this->getDataGenerator()->create_user();
$PAGE->set_url('/my/index.php'); // Need this because some internal API calls require the $PAGE url to be set.
// Get the expected default blocks.
$alldefaultblocksordered = $DB->get_records_menu('block_instances',
array('pagetypepattern' => 'my-index'), 'defaultregion, defaultweight ASC', 'id, blockname');
$this->setUser($user);
// Check for the default blocks.
$result = core_block_external::get_dashboard_blocks($user->id);
// We need to execute the return values cleaning process to simulate the web service server.
$result = external_api::clean_returnvalue(core_block_external::get_dashboard_blocks_returns(), $result);
// Expect all blogs except learning plans one (no learning plans to show).
$this->assertCount(count($alldefaultblocksordered) - 1, $result['blocks']);
$returnedblocks = array();
foreach ($result['blocks'] as $block) {
// Check all the returned blocks are in the expected blocks array.
$this->assertContains($block['name'], $alldefaultblocksordered);
$returnedblocks[] = $block['name'];
}
// Remove lp block.
array_shift($alldefaultblocksordered);
// Check that we received the blocks in the expected order.
$this->assertEquals(array_values($alldefaultblocksordered), $returnedblocks);
}
/**
* Test user get default dashboard blocks including a sticky block.
*/
public function test_get_dashboard_blocks_default_dashboard_including_sticky_block() {
global $PAGE, $DB;
$this->resetAfterTest(true);
$user = $this->getDataGenerator()->create_user();
$PAGE->set_url('/my/index.php'); // Need this because some internal API calls require the $PAGE url to be set.
// Get the expected default blocks.
$alldefaultblocks = $DB->get_records_menu('block_instances', array('pagetypepattern' => 'my-index'), '', 'id, blockname');
// Now, add a sticky block.
$page = new moodle_page();
$page->set_context(context_system::instance());
$page->set_pagetype('my-index');
$page->set_url(new moodle_url('/'));
$page->blocks->add_region('side-pre');
$page->blocks->load_blocks();
$page->blocks->add_block('myprofile', 'side-pre', 0, true, '*');
$this->setUser($user);
// Check for the default blocks plus the sticky.
$result = core_block_external::get_dashboard_blocks($user->id);
// We need to execute the return values cleaning process to simulate the web service server.
$result = external_api::clean_returnvalue(core_block_external::get_dashboard_blocks_returns(), $result);
// Expect all blogs plus sticky one except learning plans one (no learning plans to show).
$this->assertCount(count($alldefaultblocks), $result['blocks']);
$found = false;
foreach ($result['blocks'] as $block) {
if ($block['name'] == 'myprofile') {
$this->assertEquals('side-pre', $block['region']);
$found = true;
continue;
}
// Check that the block is in the expected blocks array.
$this->assertContains($block['name'], $alldefaultblocks);
}
$this->assertTrue($found);
}
/**
* Test admin get user's custom dashboard blocks.
*/
public function test_get_dashboard_blocks_custom_user_dashboard() {
global $PAGE, $DB;
$this->resetAfterTest(true);
$user = $this->getDataGenerator()->create_user();
$PAGE->set_url('/my/index.php'); // Need this because some internal API calls require the $PAGE url to be set.
// Get the expected default blocks.
$alldefaultblocks = $DB->get_records_menu('block_instances', array('pagetypepattern' => 'my-index'), '', 'id, blockname');
// Add a custom block.
$page = new moodle_page();
$page->set_context(context_user::instance($user->id));
$page->set_pagelayout('mydashboard');
$page->set_pagetype('my-index');
$page->blocks->add_region('content');
$currentpage = my_get_page($user->id, MY_PAGE_PRIVATE);
$page->set_subpage($currentpage->id);
$page->blocks->load_blocks();
$page->blocks->add_block('myprofile', 'content', 0, false);
$this->setAdminUser();
// Check for the new block as admin for a user.
$result = core_block_external::get_dashboard_blocks($user->id);
// We need to execute the return values cleaning process to simulate the web service server.
$result = external_api::clean_returnvalue(core_block_external::get_dashboard_blocks_returns(), $result);
// Expect all default blogs plys the one we added except learning plans one (no learning plans to show).
$this->assertCount(count($alldefaultblocks), $result['blocks']);
$found = false;
foreach ($result['blocks'] as $block) {
if ($block['name'] == 'myprofile') {
$this->assertEquals('content', $block['region']);
$found = true;
continue;
}
// Check that the block is in the expected blocks array.
$this->assertContains($block['name'], $alldefaultblocks);
}
$this->assertTrue($found);
}
/**
* Test user tries to get other user blocks not having permission.
*/
public function test_get_dashboard_blocks_other_user_missing_permissions() {
$this->resetAfterTest(true);
$user1 = $this->getDataGenerator()->create_user();
$user2 = $this->getDataGenerator()->create_user();
$this->setUser($user1);
$this->expectException('moodle_exception');
core_block_external::get_dashboard_blocks($user2->id);
}
}