AutorÃa | Ultima modificación | Ver Log |
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_courseformat;
/**
* Tests for course
*
* @package core_courseformat
* @category test
* @copyright 2025 Ferran Recio <ferran@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @covers \core_courseformat\activityoverviewbase
*/
final class activityoverviewbase_test extends \advanced_testcase {
#[\Override()]
public static function setUpBeforeClass(): void {
global $CFG;
require_once($CFG->libdir . '/completionlib.php');
require_once($CFG->dirroot . '/course/format/tests/fixtures/fake_activityoverview.php');
require_once($CFG->libdir . '/gradelib.php');
parent::setUpBeforeClass();
}
/**
* Test get_name_overview method.
*
* @covers ::get_name_overview
*/
public function test_get_name_overview(): void {
$this->resetAfterTest();
$this->setAdminUser();
$generator = $this->getDataGenerator();
$course = $generator->create_course();
$activity = $this->getDataGenerator()->create_module('assign', ['course' => $course->id, 'name' => 'Test!']);
$modinfo = get_fast_modinfo($course);
$cm = $modinfo->get_cm($activity->cmid);
$overview = new \core_courseformat\fake_activityoverview($cm);
$result = $overview->get_name_overview();
$this->assertEquals(get_string('name'), $result->get_name());
$this->assertEquals('Test!', $result->get_value());
$this->assertInstanceOf(\core_courseformat\output\local\overview\activityname::class, $result->get_content());
}
/**
* Test get_completion_overview method.
*
* @covers ::get_completion_overview
* @dataProvider provider_get_completion_overview
* @param int $setcompletion the completion status
*/
public function test_get_completion_overview(
int $setcompletion,
): void {
$this->resetAfterTest();
$this->setAdminUser();
$generator = $this->getDataGenerator();
$course = $generator->create_course(['enablecompletion' => 1]);
$user = $generator->create_user();
$generator->enrol_user($user->id, $course->id);
$this->setAdminUser();
$activity = $this->getDataGenerator()->create_module(
'assign',
['course' => $course->id, 'completion' => \COMPLETION_TRACKING_AUTOMATIC]
);
rebuild_course_cache($course->id, true);
$modinfo = get_fast_modinfo($course);
$cm = $modinfo->get_cm($activity->cmid);
$overview = new \core_courseformat\fake_activityoverview($cm);
$completion = (object) [
'coursemoduleid' => $cm->id,
'timemodified' => time(),
'viewed' => \COMPLETION_NOT_VIEWED,
'overrideby' => null,
'id' => 0,
'completionstate' => $setcompletion,
'userid' => $user->id,
];
$comletioninfo = new \completion_info($course);
$comletioninfo->internal_set_data($cm, $completion, true);
$this->setUser($user);
$result = $overview->get_completion_overview();
$this->assertEquals(get_string('completion_status', 'completion'), $result->get_name());
$this->assertEquals($setcompletion, $result->get_value());
$this->assertInstanceOf(\core_courseformat\output\local\content\cm\completion::class, $result->get_content());
}
/**
* Data provider for test_get_completion_overview.
*
* @return array the testing scenarios
*/
public static function provider_get_completion_overview(): array {
return [
'complet' => [
'setcompletion' => \COMPLETION_COMPLETE,
],
'incomplete' => [
'setcompletion' => \COMPLETION_INCOMPLETE,
],
'complete pass' => [
'setcompletion' => \COMPLETION_COMPLETE_PASS,
],
'complete fail' => [
'setcompletion' => \COMPLETION_COMPLETE_FAIL,
],
];
}
/**
* Test get_completion_overview method on an activity with no completion.
*
* @covers ::get_completion_overview
*/
public function test_get_completion_overview_no_completion(): void {
$this->resetAfterTest();
$this->setAdminUser();
$generator = $this->getDataGenerator();
$course = $generator->create_course(['enablecompletion' => 1]);
$user = $generator->create_user();
$generator->enrol_user($user->id, $course->id);
$this->setAdminUser();
$activity = $this->getDataGenerator()->create_module(
'assign',
['course' => $course->id]
);
rebuild_course_cache($course->id, true);
$modinfo = get_fast_modinfo($course);
$cm = $modinfo->get_cm($activity->cmid);
$overview = new \core_courseformat\fake_activityoverview($cm);
$this->setUser($user);
$result = $overview->get_completion_overview();
$this->assertEquals(get_string('completion_status', 'completion'), $result->get_name());
$this->assertEquals(null, $result->get_value());
$this->assertEquals('-', $result->get_content());
}
/**
* Test get_grades_overviews method.
*
* @covers ::get_grades_overviews
*/
public function test_get_grades_overviews(): void {
$this->resetAfterTest();
$this->setAdminUser();
$generator = $this->getDataGenerator();
$course = $this->getDataGenerator()->create_course();
$teacher = $this->getDataGenerator()->create_and_enrol($course, 'teacher');
$student = $this->getDataGenerator()->create_and_enrol($course, 'student');
// Create some modules.
$assign = $this->getDataGenerator()->create_module(
'assign',
['course' => $course->id]
);
$workshop = $this->getDataGenerator()->create_module(
'workshop',
['course' => $course->id],
['grade' => 100.0],
);
$page = $this->getDataGenerator()->create_module(
'page',
['course' => $course->id]
);
// Assignments have one grade item.
$assignitems = \grade_item::fetch_all([
'itemtype' => 'mod',
'itemmodule' => 'assign',
'iteminstance' => (int) $assign->id,
'courseid' => $course->id,
]);
$gradegrade = new \grade_grade();
$gradegrade->itemid = reset($assignitems)->id;
$gradegrade->userid = (int) $student->id;
$gradegrade->rawgrade = 88;
$gradegrade->finalgrade = 88;
$gradegrade->insert();
// Workshops have two grade items.
$workshopitems = array_values(
\grade_item::fetch_all([
'itemtype' => 'mod',
'itemmodule' => 'workshop',
'iteminstance' => (int) $workshop->id,
'courseid' => $course->id,
['grade' => 100.0],
])
);
$gradegrade = new \grade_grade();
$gradegrade->itemid = reset($workshopitems)->id;
$gradegrade->userid = (int) $student->id;
$gradegrade->rawgrade = 77;
$gradegrade->finalgrade = 77;
$gradegrade->insert();
// Validate student grades.
$this->setUser($student);
$modinfo = get_fast_modinfo($course);
// Validate assign gradeitems.
$cm = $modinfo->get_cm($assign->cmid);
$overview = new \core_courseformat\fake_activityoverview($cm);
$result = $overview->get_grades_overviews();
$this->assertCount(1, $result);
$this->assertEquals(get_string('gradenoun'), $result[0]->get_name());
$this->assertEquals(88, $result[0]->get_value());
$this->assertEquals('88.00', $result[0]->get_content());
// Validate workshop gradeitems (having two grade, they should return an empty array).
$cm = $modinfo->get_cm($workshop->cmid);
$overview = new \core_courseformat\fake_activityoverview($cm);
$result = $overview->get_grades_overviews();
$this->assertEmpty($result);
// Validate page has no gradeitems.
$cm = $modinfo->get_cm($page->cmid);
$overview = new \core_courseformat\fake_activityoverview($cm);
$result = $overview->get_grades_overviews();
$this->assertEmpty($result);
// Validate teacher does not has grade overiviews items.
$this->setUser($teacher);
$modinfo = get_fast_modinfo($course);
// Validate assign gradeitems.
$cm = $modinfo->get_cm($assign->cmid);
$overview = new \core_courseformat\fake_activityoverview($cm);
$result = $overview->get_grades_overviews();
$this->assertEmpty($result);;
// Validate workshop gradeitems (having two grade, they should return an empty array).
$cm = $modinfo->get_cm($workshop->cmid);
$overview = new \core_courseformat\fake_activityoverview($cm);
$result = $overview->get_grades_overviews();
$this->assertEmpty($result);
// Validate page has no gradeitems.
$cm = $modinfo->get_cm($page->cmid);
$overview = new \core_courseformat\fake_activityoverview($cm);
$result = $overview->get_grades_overviews();
$this->assertEmpty($result);
}
/**
* Test get_grades_overviews when the grade item is hidden.
*
* @covers ::get_grades_overviews
*/
/**
* Test get_grades_overviews method.
*
* @covers ::get_grades_overviews
*/
public function test_get_grades_overviews_hidden(): void {
$this->resetAfterTest();
$this->setAdminUser();
$generator = $this->getDataGenerator();
$course = $this->getDataGenerator()->create_course();
$student = $this->getDataGenerator()->create_and_enrol($course, 'student');
// Create some modules.
$assign = $this->getDataGenerator()->create_module(
'assign',
['course' => $course->id]
);
// Assignments have one grade item.
$assignitems = \grade_item::fetch_all([
'itemtype' => 'mod',
'itemmodule' => 'assign',
'iteminstance' => (int) $assign->id,
'courseid' => $course->id,
]);
$gradeitem = reset($assignitems);
$gradegrade = new \grade_grade();
$gradegrade->itemid = $gradeitem->id;
$gradegrade->userid = (int) $student->id;
$gradegrade->rawgrade = 88;
$gradegrade->finalgrade = 88;
$gradegrade->insert();
// Hide some grades.
$gradeitem->set_hidden(1, true);
// Validate student grades.
$this->setUser($student);
$modinfo = get_fast_modinfo($course);
// Validate assign gradeitems.
$cm = $modinfo->get_cm($assign->cmid);
$overview = new \core_courseformat\fake_activityoverview($cm);
$result = $overview->get_grades_overviews();
$this->assertCount(1, $result);
$this->assertEquals(get_string('gradenoun'), $result[0]->get_name());
$this->assertEquals('-', $result[0]->get_value());
$this->assertEquals('-', $result[0]->get_content());
}
}