]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-15931 More unit tests of file_info_* classes
authornicolasconnault <nicolasconnault>
Mon, 20 Apr 2009 13:10:42 +0000 (13:10 +0000)
committernicolasconnault <nicolasconnault>
Mon, 20 Apr 2009 13:10:42 +0000 (13:10 +0000)
lib/file/file_browser.php
lib/simpletest/testfilelib.php

index cf0894824e2bed638cebac01c4244bea174ad932..c697b83fc759c890b24a93867da5894757aea0a1 100644 (file)
@@ -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);
index 946cdfdf64a10ccc3e5b8a02bab32f80af11bb45..abc29de955076726ab2222be6681a37b551ada51 100644 (file)
@@ -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); 
     }
 }