AutorÃa | Ultima modificación | Ver Log |
<?php
// This file is part of the Zoom plugin for 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/>.
/**
* Unit tests for supporting advanced password requirements in Zoom.
*
* @package mod_zoom
* @copyright 2020 UC Regents
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace mod_zoom;
use advanced_testcase;
/**
* PHPunit testcase class.
*/
final class mod_zoom_grade_test extends advanced_testcase {
/**
* @var \stdClass Course record.
*/
private $course;
/**
* @var \stdClass User record for teacher.
*/
private $teacher;
/**
* @var \stdClass User record for student.
*/
private $student;
/**
* @var \mod_zoom_generator Plugin generator for tests.
*/
private $generator;
/**
* Setup to ensure that fixtures are loaded.
*/
public static function setUpBeforeClass(): void {
global $CFG;
require_once($CFG->dirroot . '/mod/zoom/lib.php');
require_once($CFG->dirroot . '/mod/zoom/locallib.php');
}
/**
* Setup before every test.
*/
public function setUp(): void {
$this->resetAfterTest();
$this->setAdminUser();
$this->course = $this->getDataGenerator()->create_course();
$this->teacher = $this->getDataGenerator()->create_and_enrol($this->course, 'teacher');
$this->student = $this->getDataGenerator()->create_and_enrol($this->course, 'student');
$this->generator = $this->getDataGenerator()->get_plugin_generator('mod_zoom');
}
/**
* Tests that Zoom grades can be added and updated in the gradebook.
* @covers ::zoom_grade_item_update
*/
public function test_grade_added(): void {
$params['course'] = $this->course->id;
$params['grade'] = 100;
$instance = $this->generator->create_instance($params);
$gradebook = grade_get_grades($this->course->id, 'mod', 'zoom', $instance->id);
// Gradebook should be empty.
$this->assertEquals(0, count($gradebook->items[0]->grades));
// Insert grade for student.
$studentgrade = ['userid' => $this->student->id, 'rawgrade' => 50];
zoom_grade_item_update($instance, $studentgrade);
// Gradebook should contain a grade for student.
$gradebook = grade_get_grades($this->course->id, 'mod', 'zoom', $instance->id, $this->student->id);
$this->assertEquals(1, count($gradebook->items[0]->grades));
$this->assertEquals(50, $gradebook->items[0]->grades[$this->student->id]->grade);
// Update grade for student.
$studentgrade = ['userid' => $this->student->id, 'rawgrade' => 75];
zoom_grade_item_update($instance, $studentgrade);
$gradebook = grade_get_grades($this->course->id, 'mod', 'zoom', $instance->id, $this->student->id);
// Verify grade has been updated.
$this->assertEquals(1, count($gradebook->items[0]->grades));
$this->assertEquals(75, $gradebook->items[0]->grades[$this->student->id]->grade);
}
/**
* Tests that the Zoom grade type cannot be changed to NONE if grades are already inputted.
* @covers ::zoom_grade_item_update
*/
public function test_grade_type_not_none(): void {
$params['course'] = $this->course->id;
$params['grade'] = 100;
$instance = $this->generator->create_instance($params);
$gradebook = grade_get_grades($this->course->id, 'mod', 'zoom', $instance->id);
// Gradebook should be empty.
$this->assertEquals(0, count($gradebook->items[0]->grades));
// Insert grade for student.
$studentgrade = ['userid' => $this->student->id, 'rawgrade' => 100];
zoom_grade_item_update($instance, $studentgrade);
// Gradebook should contain a grade for student.
$gradebook = grade_get_grades($this->course->id, 'mod', 'zoom', $instance->id, $this->student->id);
$this->assertEquals(1, count($gradebook->items[0]->grades));
// Try to change grade type to NONE.
$instance->grade = 0;
zoom_grade_item_update($instance);
$gradebook = grade_get_grades($this->course->id, 'mod', 'zoom', $instance->id);
// Verify grade type is not changed.
$this->assertEquals(100, $gradebook->items[0]->grademax);
}
/**
* Tests that the Zoom grades can be deleted.
* @covers ::zoom_grade_item_delete
*/
public function test_grade_delete(): void {
$params['course'] = $this->course->id;
$params['grade'] = 100;
$instance = $this->generator->create_instance($params);
$gradebook = grade_get_grades($this->course->id, 'mod', 'zoom', $instance->id);
// Gradebook should be empty.
$this->assertEquals(0, count($gradebook->items[0]->grades));
// Insert grade for student.
$studentgrade = ['userid' => $this->student->id, 'rawgrade' => 100];
zoom_grade_item_update($instance, $studentgrade);
// Gradebook should contain a grade for student.
$gradebook = grade_get_grades($this->course->id, 'mod', 'zoom', $instance->id, $this->student->id);
$this->assertEquals(1, count($gradebook->items[0]->grades));
// Delete the grade items.
zoom_grade_item_delete($instance);
$gradebook = grade_get_grades($this->course->id, 'mod', 'zoom', $instance->id);
// Verify gradebook is empty.
$this->assertEmpty($gradebook->items);
}
}