From 2b726e9f3a214536cbaae1f9b582141fb510b2d6 Mon Sep 17 00:00:00 2001 From: nicolasconnault Date: Mon, 20 Apr 2009 13:10:42 +0000 Subject: [PATCH] MDL-15931 More unit tests of file_info_* classes --- lib/file/file_browser.php | 2 - lib/simpletest/testfilelib.php | 195 ++++++++++++++++++++++++++++++--- 2 files changed, 182 insertions(+), 15 deletions(-) diff --git a/lib/file/file_browser.php b/lib/file/file_browser.php index cf0894824e..c697b83fc7 100644 --- a/lib/file/file_browser.php +++ b/lib/file/file_browser.php @@ -34,8 +34,6 @@ class file_browser { * @return object file_info object or null if not found or access not allowed */ public function get_file_info($context, $filearea=null, $itemid=null, $filepath=null, $filename=null) { - global $USER, $CFG, $DB, $COURSE; - switch ($context->contextlevel) { case CONTEXT_SYSTEM: return $this->get_file_info_system($context, $filearea, $itemid, $filepath, $filename); diff --git a/lib/simpletest/testfilelib.php b/lib/simpletest/testfilelib.php index 946cdfdf64..abc29de955 100644 --- a/lib/simpletest/testfilelib.php +++ b/lib/simpletest/testfilelib.php @@ -92,6 +92,7 @@ require_once($CFG->libdir.'/file/file_browser.php'); * I suggest a rethink of the design, and a jolly good refactoring. */ class file_browser_test extends UnitTestCase { + public function test_encodepath() { global $CFG; $fb = new file_browser(); @@ -112,24 +113,192 @@ class file_browser_test extends UnitTestCase { } } +class file_info_test extends UnitTestCase { + protected $course; + protected $section; + protected $coursecat; + protected $user; + protected $module; + + /** + * Setup the DB fixture data + */ + public function setup() { + global $DB, $CFG; + // Create a coursecat + $newcategory = new stdClass(); + $newcategory->name = 'test category'; + $newcategory->sortorder = 999; + if (!$newcategory->id = $DB->insert_record('course_categories', $newcategory)) { + print_error('cannotcreatecategory', '', '', format_string($newcategory->name)); + } + $newcategory->context = get_context_instance(CONTEXT_COURSECAT, $newcategory->id); + mark_context_dirty($newcategory->context->path); + fix_course_sortorder(); // Required to build course_categories.depth and .path. + $this->coursecat = $DB->get_record('course_categories', array('id' => $newcategory->id)); + + // Create a course + $coursedata = new stdClass(); + $coursedata->category = $newcategory->id; + $coursedata->shortname = 'testcourse'; + $coursedata->fullname = 'Test Course'; + + try { + $this->course = create_course($coursedata); + } catch (moodle_exception $e) { + // Most likely the result of an aborted unit test: the test course was not correctly deleted + $this->course = $DB->get_record('course', array('shortname' => $coursedata->shortname)); + } + + $this->coursecat->coursecount++; + + // Create a user + require_once($CFG->dirroot.'/user/lib.php'); + $this->user = new stdClass(); + $this->user->username = 'testuser09987654321'; + $this->user->password = 'password'; + $this->user->firstname = 'TestUser'; + $this->user->lastname = 'TestUser'; + $this->user->email = 'fakeemail@fake.org'; + try { + $this->user->id = create_user($this->user); + } catch (moodle_exception $e) { + // Most likely the result of an aborted unit test: the test user was not correctly deleted + $this->user->id = $DB->get_field('user', 'id', array('username' => $this->user->username)); + } + + // Create a module + $module = new stdClass(); + $module->description = 'Assignment used for testing filelib API'; + $module->assignmenttype = 'online'; + $module->timedue = time(); + $module->grade = 100; + $module->course = $this->course->id; + $module->name = 'Test Assignment'; + $this->section = get_course_section(1, $this->course->id); + $module->section = $this->section->id; + $module->module = $DB->get_field('modules', 'id', array('name' => 'assignment')); + $module->modulename = 'assignment'; + $module->add = 'assignment'; + $module->cmidnumber = ''; + $module->coursemodule = add_course_module($module); + + add_mod_to_section($module); + + $module->cmidnumber = set_coursemodule_idnumber($module->coursemodule, ''); + rebuild_course_cache($this->course->id); + $module_instance = $DB->get_field('course_modules', 'instance', array('id' => $module->coursemodule)); + $this->module= $DB->get_record('assignment', array('id' => $module_instance)); + $this->module->instance = $module_instance; + + // Update local copy of course + $this->course = $DB->get_record('course', array('id' => $this->course->id)); + } + + public function teardown() { + global $DB; + + // Delete module + delete_course_module($this->module->instance); + + // Delete course + delete_course($this->course, false); + + // Delete category + $DB->delete_records('course_categories', array('id' => $this->coursecat->id)); + + // Delete user + delete_user($this->user); + } + +} require_once($CFG->libdir.'/file/file_info_course.php'); -/** - * Tests for file_info_course class - * TODO we need a test course for this - */ -class test_file_info_course extends UnitTestCase { - public function test_get_params_rawencoded() { +class test_file_info_system extends file_info_test { + public function test_get_children() { $context = get_context_instance(CONTEXT_SYSTEM); - $course = new stdClass(); - $course->id = 999999999; - $course->fullname = 'Test course'; - $fic = new file_info_course(new file_browser(), $context, $course); + $fis = new file_info_system(new file_browser(), $context); + $children = $fis->get_children(); + + $found_coursecat = false; + $context_coursecat = get_context_instance(CONTEXT_COURSECAT, $this->coursecat->id); + $file_info_coursecat = new file_info_coursecat(new file_browser(), $context_coursecat, $this->coursecat); + + foreach ($children as $child) { + if ($child == $file_info_coursecat) { + $found_coursecat = true; + } + } + $this->assertTrue($found_coursecat); + } +} + +class test_file_info_coursecat extends file_info_test { + private $fileinfo; + + public function setup() { + parent::setup(); + $context = get_context_instance(CONTEXT_COURSECAT, $this->coursecat->id); + $this->fileinfo = new file_info_coursecat(new file_browser(), $context, $this->coursecat); + } + + public function test_get_children() { + $children = $this->fileinfo->get_children(); + $this->assertEqual(2, count($children)); + + $this->assertEqual('Category introduction', $children[0]->get_visible_name()); + $this->assertEqual('', $children[0]->get_url()); + $this->assertEqual('file_info_stored', get_class($children[0])); + + $context_course = get_context_instance(CONTEXT_COURSE, $this->course->id); + $fic = new file_info_course(new file_browser(), $context_course, $this->course); + $this->assertEqual($fic, $children[1]); + } + + public function test_get_parent() { + $context = get_context_instance(CONTEXT_SYSTEM); + $fis = new file_info_system(new file_browser(), $context); + $parent = $this->fileinfo->get_parent(); + $this->assertEqual($parent, $fis); + } +} + +class test_file_info_course extends file_info_test { + private $fileinfo; + + public function setup() { + parent::setup(); + $context = get_context_instance(CONTEXT_COURSE, $this->course->id); + $this->fileinfo = new file_info_course(new file_browser(), $context, $this->course); + } + + public function test_get_children() { + $children = $this->fileinfo->get_children(); + $this->assertEqual(4, count($children)); + + $this->assertEqual('Course introduction', $children[0]->get_visible_name()); + $this->assertEqual('', $children[0]->get_url()); + $this->assertEqual('file_info_stored', get_class($children[0])); + + $context_course = get_context_instance(CONTEXT_COURSE, $this->course->id); + $fics = new file_info_coursesection(new file_browser(), $context_course, $this->course); + $this->assertEqual($fics, $children[1]); + + $this->assertEqual('Backups', $children[2]->get_visible_name()); + $this->assertEqual('', $children[2]->get_url()); + $this->assertEqual('file_info_stored', get_class($children[2])); + + $this->assertEqual('Course files', $children[3]->get_visible_name()); + $this->assertEqual('', $children[3]->get_url()); + $this->assertEqual('file_info_coursefile', get_class($children[3])); + } - $this->assertEqual($course->fullname, $fic->get_visible_name()); - $this->assertEqual(array(), $fic->get_children()); - $this->assertEqual(array(), $fic->get_parent()); + public function test_get_parent() { + $context = get_context_instance(CONTEXT_COURSECAT, $this->coursecat->id); + $fic = new file_info_coursecat(new file_browser(), $context, $this->coursecat); + $parent = $this->fileinfo->get_parent(); + $this->assertEqual($parent, $fic); } } -- 2.39.5