MDL-38700 course: add tests for moveto_module()
* Test visibility when moving around hidden sections * Test for visiblity changes when moving around in the same sections.
This commit is contained in:
@@ -535,4 +535,137 @@ class courselib_testcase extends advanced_testcase {
|
||||
$pagetypelist = course_page_type_list($pagetype, null, null);
|
||||
$this->assertEquals($pagetypelist, $testpagetypelist1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests moving a module between hidden/visible sections and
|
||||
* verifies that the course/module visiblity seettings are
|
||||
* retained.
|
||||
*/
|
||||
public function test_moveto_module_between_hidden_sections() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$course = $this->getDataGenerator()->create_course(array('numsections' => 4), array('createsections' => true));
|
||||
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
||||
$page = $this->getDataGenerator()->create_module('page', array('course' => $course->id));
|
||||
$quiz= $this->getDataGenerator()->create_module('quiz', array('course' => $course->id));
|
||||
|
||||
// Set the page as hidden
|
||||
set_coursemodule_visible($page->cmid, 0);
|
||||
|
||||
// Set sections 3 as hidden.
|
||||
set_section_visible($course->id, 3, 0);
|
||||
|
||||
$modinfo = get_fast_modinfo($course);
|
||||
|
||||
$hiddensection = $modinfo->get_section_info(3);
|
||||
// New section is definitely not visible:
|
||||
$this->assertEquals($hiddensection->visible, 0);
|
||||
|
||||
$forumcm = $modinfo->cms[$forum->cmid];
|
||||
$pagecm = $modinfo->cms[$page->cmid];
|
||||
|
||||
// Move the forum and the page to a hidden section.
|
||||
moveto_module($forumcm, $hiddensection);
|
||||
moveto_module($pagecm, $hiddensection);
|
||||
|
||||
// Reset modinfo cache.
|
||||
get_fast_modinfo(0, 0, true);
|
||||
|
||||
$modinfo = get_fast_modinfo($course);
|
||||
|
||||
// Verify that forum and page have been moved to the hidden section and quiz has not.
|
||||
$this->assertContains($forum->cmid, $modinfo->sections[3]);
|
||||
$this->assertContains($page->cmid, $modinfo->sections[3]);
|
||||
$this->assertNotContains($quiz->cmid, $modinfo->sections[3]);
|
||||
|
||||
// Verify that forum has been made invisible.
|
||||
$forumcm = $modinfo->cms[$forum->cmid];
|
||||
$this->assertEquals($forumcm->visible, 0);
|
||||
// Verify that old state has been retained.
|
||||
$this->assertEquals($forumcm->visibleold, 1);
|
||||
|
||||
// Verify that page has stayed invisible.
|
||||
$pagecm = $modinfo->cms[$page->cmid];
|
||||
$this->assertEquals($pagecm->visible, 0);
|
||||
// Verify that old state has been retained.
|
||||
$this->assertEquals($pagecm->visibleold, 0);
|
||||
|
||||
// Verify that quiz has been unaffected.
|
||||
$quizcm = $modinfo->cms[$quiz->cmid];
|
||||
$this->assertEquals($quizcm->visible, 1);
|
||||
|
||||
// Move forum and page back to visible section.
|
||||
$visiblesection = $modinfo->get_section_info(2);
|
||||
moveto_module($forumcm, $visiblesection);
|
||||
moveto_module($pagecm, $visiblesection);
|
||||
|
||||
// Reset modinfo cache.
|
||||
get_fast_modinfo(0, 0, true);
|
||||
$modinfo = get_fast_modinfo($course);
|
||||
|
||||
// Verify that forum has been made visible.
|
||||
$forumcm = $modinfo->cms[$forum->cmid];
|
||||
$this->assertEquals($forumcm->visible, 1);
|
||||
|
||||
// Verify that page has stayed invisible.
|
||||
$pagecm = $modinfo->cms[$page->cmid];
|
||||
$this->assertEquals($pagecm->visible, 0);
|
||||
|
||||
// Move the page in the same section (this is what mod duplicate does_
|
||||
moveto_module($pagecm, $visiblesection, $forumcm);
|
||||
|
||||
// Reset modinfo cache.
|
||||
get_fast_modinfo(0, 0, true);
|
||||
|
||||
// Verify that the the page is still hidden
|
||||
$modinfo = get_fast_modinfo($course);
|
||||
$pagecm = $modinfo->cms[$page->cmid];
|
||||
$this->assertEquals($pagecm->visible, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests moving a module around in the same section. moveto_module()
|
||||
* is called this way in modduplicate.
|
||||
*/
|
||||
public function test_moveto_module_in_same_section() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$course = $this->getDataGenerator()->create_course(array('numsections' => 3), array('createsections' => true));
|
||||
$page = $this->getDataGenerator()->create_module('page', array('course' => $course->id));
|
||||
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
||||
|
||||
// Simulate inconsistent visible/visibleold values (MDL-38713).
|
||||
$cm = $DB->get_record('course_modules', array('id' => $page->cmid), '*', MUST_EXIST);
|
||||
$cm->visible = 0;
|
||||
$cm->visibleold = 1;
|
||||
$DB->update_record('course_modules', $cm);
|
||||
|
||||
$modinfo = get_fast_modinfo($course);
|
||||
$forumcm = $modinfo->cms[$forum->cmid];
|
||||
$pagecm = $modinfo->cms[$page->cmid];
|
||||
|
||||
// Verify that page is hidden.
|
||||
$this->assertEquals($pagecm->visible, 0);
|
||||
|
||||
// Verify section 0 is where all mods added.
|
||||
$section = $modinfo->get_section_info(0);
|
||||
$this->assertEquals($section->id, $forumcm->section);
|
||||
$this->assertEquals($section->id, $pagecm->section);
|
||||
|
||||
|
||||
// Move the forum and the page to a hidden section.
|
||||
moveto_module($pagecm, $section, $forumcm);
|
||||
|
||||
// Reset modinfo cache.
|
||||
get_fast_modinfo(0, 0, true);
|
||||
|
||||
// Verify that the the page is still hidden
|
||||
$modinfo = get_fast_modinfo($course);
|
||||
$pagecm = $modinfo->cms[$page->cmid];
|
||||
$this->assertEquals($pagecm->visible, 0);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user