From e4ddfbe0f827a88690b07b39c0929de3c0dc9b4f Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Fri, 31 May 2013 16:11:17 +0800 Subject: [PATCH] MDL-39536 completion: Unit tests for get_activities and has_activities --- lib/tests/completionlib_advanced_test.php | 91 +++++++++++++++++++++++ lib/tests/completionlib_test.php | 25 ------- 2 files changed, 91 insertions(+), 25 deletions(-) create mode 100644 lib/tests/completionlib_advanced_test.php diff --git a/lib/tests/completionlib_advanced_test.php b/lib/tests/completionlib_advanced_test.php new file mode 100644 index 00000000000..e259554baca --- /dev/null +++ b/lib/tests/completionlib_advanced_test.php @@ -0,0 +1,91 @@ +. + +/** + * Completion lib advanced test case. + * + * This file contains the advanced test suite for completion lib. + * + * @package core_completion + * @category phpunit + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; +require_once($CFG->libdir.'/completionlib.php'); + +class completionlib_advanced_testcase extends advanced_testcase { + + function test_get_activities() { + global $DB; + $this->resetAfterTest(true); + + // Create a course with mixed auto completion data. + $course = $this->getDataGenerator()->create_course(); + $completionauto = array('completion' => COMPLETION_TRACKING_AUTOMATIC); + $completionmanual = array('completion' => COMPLETION_TRACKING_MANUAL); + $completionnone = array('completion' => COMPLETION_TRACKING_NONE); + $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id), $completionauto); + $page = $this->getDataGenerator()->create_module('page', array('course' => $course->id), $completionauto); + $data = $this->getDataGenerator()->create_module('data', array('course' => $course->id), $completionmanual); + + $forum2 = $this->getDataGenerator()->create_module('forum', array('course' => $course->id), $completionnone); + $page2 = $this->getDataGenerator()->create_module('page', array('course' => $course->id), $completionnone); + $data2 = $this->getDataGenerator()->create_module('data', array('course' => $course->id), $completionnone); + + // Create data in another course to make sure it's not considered. + $course2 = $this->getDataGenerator()->create_course(); + $c2forum = $this->getDataGenerator()->create_module('forum', array('course' => $course2->id), $completionauto); + $c2page = $this->getDataGenerator()->create_module('page', array('course' => $course2->id), $completionmanual); + $c2data = $this->getDataGenerator()->create_module('data', array('course' => $course2->id), $completionnone); + + $c = new completion_info($course); + $activities = $c->get_activities(); + $this->assertEquals(3, count($activities)); + $this->assertTrue(isset($activities[$forum->cmid])); + $this->assertEquals($activities[$forum->cmid]->name, $forum->name); + $this->assertTrue(isset($activities[$page->cmid])); + $this->assertEquals($activities[$page->cmid]->name, $page->name); + $this->assertTrue(isset($activities[$data->cmid])); + $this->assertEquals($activities[$data->cmid]->name, $data->name); + + $this->assertFalse(isset($activities[$forum2->cmid])); + $this->assertFalse(isset($activities[$page2->cmid])); + $this->assertFalse(isset($activities[$data2->cmid])); + } + + function test_has_activities() { + global $DB; + $this->resetAfterTest(true); + + // Create a course with mixed auto completion data. + $course = $this->getDataGenerator()->create_course(); + $course2 = $this->getDataGenerator()->create_course(); + $completionauto = array('completion' => COMPLETION_TRACKING_AUTOMATIC); + $completionnone = array('completion' => COMPLETION_TRACKING_NONE); + $c1forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id), $completionauto); + $c2forum = $this->getDataGenerator()->create_module('forum', array('course' => $course2->id), $completionnone); + + $c1 = new completion_info($course); + $c2 = new completion_info($course2); + + $this->assertTrue($c1->has_activities()); + $this->assertFalse($c2->has_activities()); + } +} diff --git a/lib/tests/completionlib_test.php b/lib/tests/completionlib_test.php index 50928315d01..2298460830d 100644 --- a/lib/tests/completionlib_test.php +++ b/lib/tests/completionlib_test.php @@ -514,31 +514,6 @@ WHERE $c->internal_set_data($cm, $data); } - function test_get_activities() { - global $DB; - - $c = new completion_info((object)array('id'=>42)); - - // Try with no activities - $DB->expects($this->at(0)) - ->method('get_records_select') - ->with('course_modules', 'course=42 AND completion<>'.COMPLETION_TRACKING_NONE) - ->will($this->returnValue(array())); - $result = $c->get_activities(); - $this->assertEquals(array(), $result); - - // Try with an activity (need to fake up modinfo for it as well) - $DB->expects($this->at(0)) - ->method('get_records_select') - ->with('course_modules', 'course=42 AND completion<>'.COMPLETION_TRACKING_NONE) - ->will($this->returnValue(array(13=>(object)array('id'=>13)))); - $modinfo = new stdClass; - $modinfo->sections = array(array(1, 2, 3), array(12, 13, 14)); - $modinfo->cms[13] = (object)array('modname'=>'frog', 'name'=>'kermit'); - $result = $c->get_activities($modinfo); - $this->assertEquals(array(13=>(object)array('id'=>13, 'modname'=>'frog', 'name'=>'kermit')), $result); - } - // get_tracked_users() cannot easily be tested because it uses // get_role_users, so skipping that