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 mod_zoom\privacy;
use context_module;
use core_privacy\local\metadata\collection;
use core_privacy\local\request\approved_contextlist;
use core_privacy\local\request\approved_userlist;
use core_privacy\local\request\deletion_criteria;
use core_privacy\local\request\userlist;
use core_privacy\local\request\writer;
use core_privacy\tests\provider_testcase;
use mod_zoom\privacy\provider;
/**
* Privacy provider tests class.
*
* @package mod_zoom
* @copyright 2022 Catalyst IT Australia Pty Ltd
* @author 2022 Ghaly Marc-Alexandre <marc-alexandreghaly@catalyst-ca.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @coversDefaultClass \mod_zoom\privacy\provider
*/
final class mod_zoom_provider_test extends provider_testcase {
/** @var object The zoom instance object. */
protected $zoominstance;
/** @var object The course object. */
protected $course;
/** @var object The student object. */
protected $student;
/** @var object The second student object. */
protected $student2;
/** @var object The course module object.*/
protected $cm;
/**
* {@inheritdoc}
*/
protected function setUp(): void {
$this->resetAfterTest();
$this->setAdminUser();
global $DB;
$generator = $this->getDataGenerator();
$course = $generator->create_course();
$params = [
'course' => $course->id,
'name' => 'First Zoom Activity',
'showpreview' => 0,
];
$plugingenerator = $generator->get_plugin_generator('mod_zoom');
// The zoom activity.
$zoom = $plugingenerator->create_instance($params);
// Create a student enrolled in zoom activity.
$student = $generator->create_user();
$student2 = $generator->create_user();
$studentrole = $DB->get_record('role', ['shortname' => 'student']);
$generator->enrol_user($student->id, $course->id, $studentrole->id);
$generator->enrol_user($student2->id, $course->id, $studentrole->id);
// Fill all related data tables.
$meeting = (object) [
'id' => 12345,
'meeting_id' => 12345,
'topic' => 'Some meeting',
'start_time' => 1646769060,
'end_time' => 1646715600,
'uuid' => 'someuuid',
'duration' => 60,
'participants' => 3,
'zoomid' => $zoom->id,
];
$zmid = $DB->insert_record('zoom_meeting_details', $meeting, true);
$participant = (object) [
'zoomuserid' => 9999,
'userid' => $student->id,
'join_time' => 1646769061,
'leave_time' => 1646769062,
'duration' => 60,
'name' => 'Michell',
'detailsid' => $zmid,
];
$participant2 = (object) [
'zoomuserid' => 9999,
'userid' => $student2->id,
'join_time' => 1646769061,
'leave_time' => 1646769062,
'duration' => 60,
'name' => 'John',
'detailsid' => $zmid,
];
$zmparticipantsid = $DB->insert_record('zoom_meeting_participants', $participant, true);
$zmparticipantsid2 = $DB->insert_record('zoom_meeting_participants', $participant2, true);
$meetingrecording = (object) [
'zoomid' => $zoom->id,
'meetinguuid' => 'meetinguuid',
'zoomrecordingid' => 'zoomrecordingid',
'name' => 'a zoom recording name',
'externalurl' => 'www.dummyurl.com',
'recordingtype' => 'recordingtype',
'recordingstart' => 1646769061,
'showrecording' => 1,
];
$meetingrecordingid = $DB->insert_record('zoom_meeting_recordings', $meetingrecording, true);
$meetingrecordingsview = (object) [
'recordingsid' => $meetingrecordingid,
'userid' => $student->id,
'viewed' => 1,
];
$meetingrecordingsview2 = (object) [
'recordingsid' => $meetingrecordingid,
'userid' => $student2->id,
'viewed' => 1,
];
$DB->insert_record('zoom_meeting_recordings_view', $meetingrecordingsview, true);
$DB->insert_record('zoom_meeting_recordings_view', $meetingrecordingsview2, true);
$cm = get_coursemodule_from_instance('zoom', $zoom->id);
$this->zoominstance = $zoom;
$this->course = $course;
$this->student = $student;
$this->student2 = $student2;
$this->cm = $cm;
}
/**
* Test for provider::get_metadata().
* @covers ::get_metadata
*/
public function test_get_metadata(): void {
$collection = new collection('mod_zoom');
$newcollection = provider::get_metadata($collection);
$itemcollection = $newcollection->get_collection();
$this->assertCount(4, $itemcollection);
$table = reset($itemcollection);
$table2 = $itemcollection[1];
$table3 = $itemcollection[2];
$table4 = $itemcollection[3];
$this->assertEquals('zoom_meeting_participants', $table->get_name());
$this->assertEquals('zoom_meeting_details', $table2->get_name());
$this->assertEquals('zoom_meeting_recordings_view', $table3->get_name());
$this->assertEquals('zoom_breakout_participants', $table4->get_name());
$privacyfields1 = $table->get_privacy_fields();
$this->assertArrayHasKey('name', $privacyfields1);
$this->assertArrayHasKey('user_email', $privacyfields1);
$this->assertArrayHasKey('join_time', $privacyfields1);
$this->assertArrayHasKey('leave_time', $privacyfields1);
$this->assertArrayHasKey('duration', $privacyfields1);
$this->assertEquals('privacy:metadata:zoom_meeting_participants', $table->get_summary());
$privacyfields2 = $table2->get_privacy_fields();
$this->assertArrayHasKey('topic', $privacyfields2);
$this->assertEquals('privacy:metadata:zoom_meeting_details', $table2->get_summary());
$privacyfields3 = $table3->get_privacy_fields();
$this->assertArrayHasKey('userid', $privacyfields3);
$this->assertEquals('privacy:metadata:zoom_meeting_view', $table3->get_summary());
$privacyfields4 = $table4->get_privacy_fields();
$this->assertArrayHasKey('userid', $privacyfields4);
$this->assertEquals('privacy:metadata:zoom_breakout_participants', $table4->get_summary());
}
/**
* Test for provider::get_contexts_for_userid().
* @covers ::get_contexts_for_userid
*/
public function test_get_contexts_for_userid(): void {
$contextlist = provider::get_contexts_for_userid($this->student->id);
$this->assertCount(1, $contextlist);
$contextforuser = $contextlist->current();
$cmcontext = context_module::instance($this->cm->id);
$this->assertEquals($cmcontext->id, $contextforuser->id);
$contextlist2 = provider::get_contexts_for_userid($this->student2->id);
$this->assertCount(1, $contextlist2);
$contextforuser2 = $contextlist2->current();
$cmcontext2 = context_module::instance($this->cm->id);
$this->assertEquals($cmcontext2->id, $contextforuser2->id);
}
/**
* Test for provider::get_users_in_context().
* @covers ::get_users_in_context
*/
public function test_get_users_in_context(): void {
$cmcontext = context_module::instance($this->cm->id);
$userlist = new userlist($cmcontext, 'mod_zoom');
provider::get_users_in_context($userlist);
$this->assertEquals([$this->student->id, $this->student2->id], $userlist->get_userids());
}
/**
* Test for provider::export_user_data().
* @covers ::export_user_data
*/
public function test_export_user_data(): void {
$cmcontext = context_module::instance($this->cm->id);
// Export all of the data for the context.
$this->export_context_data_for_user($this->student->id, $cmcontext, 'mod_zoom');
$writer = writer::with_context($cmcontext);
$this->assertTrue($writer->has_any_data());
}
/**
* Test for provider::delete_data_for_all_users_in_context().
* @covers ::delete_data_for_all_users_in_context
*/
public function test_delete_data_for_all_users_in_context(): void {
global $DB;
$zoommeetingcount = $DB->count_records('zoom_meeting_details');
$this->assertEquals(1, $zoommeetingcount);
$zmparticipants = $DB->count_records('zoom_meeting_participants');
$this->assertEquals(2, $zmparticipants);
$zmrecordingcount = $DB->count_records('zoom_meeting_recordings');
$this->assertEquals(1, $zmrecordingcount);
$zmrecordingviewcount = $DB->count_records('zoom_meeting_recordings_view');
$this->assertEquals(2, $zmrecordingviewcount);
// Delete data based on context.
$cmcontext = context_module::instance($this->cm->id);
provider::delete_data_for_all_users_in_context($cmcontext);
$newzoommeetingcount = $DB->count_records('zoom_meeting_details');
$this->assertEquals(0, $newzoommeetingcount);
$newzmparticipants = $DB->count_records('zoom_meeting_participants');
$this->assertEquals(0, $newzmparticipants);
$newzmrecordingcount = $DB->count_records('zoom_meeting_recordings');
$this->assertEquals(0, $newzmrecordingcount);
$newzmrecordingviewcount = $DB->count_records('zoom_meeting_recordings_view');
$this->assertEquals(0, $newzmrecordingviewcount);
}
/**
* Test for provider::delete_data_for_user().
* @covers ::delete_data_for_user
*/
public function test_delete_data_for_user(): void {
global $DB;
$zmparticipants = $DB->count_records('zoom_meeting_participants');
$this->assertEquals(2, $zmparticipants);
$zmrecordingviewcount = $DB->count_records('zoom_meeting_recordings_view');
$this->assertEquals(2, $zmrecordingviewcount);
// Delete data based on specific context.
$context = context_module::instance($this->cm->id);
$contextlist = new approved_contextlist($this->student, 'mod_zoom', [$context->id]);
provider::delete_data_for_user($contextlist);
$newzmparticipants = $DB->count_records('zoom_meeting_participants');
$this->assertEquals(1, $newzmparticipants);
$newzmrecordingviewcount = $DB->count_records('zoom_meeting_recordings_view');
$this->assertEquals(1, $newzmrecordingviewcount);
}
/**
* Test for provider::delete_data_for_users().
* @covers ::delete_data_for_users
*/
public function test_delete_data_for_users(): void {
global $DB;
$zmparticipants = $DB->count_records('zoom_meeting_participants');
$this->assertEquals(2, $zmparticipants);
$zmrecordingviewcount = $DB->count_records('zoom_meeting_recordings_view');
$this->assertEquals(2, $zmrecordingviewcount);
// Delete data based on specific context.
$context = context_module::instance($this->cm->id);
$approveduserlist = new approved_userlist(
$context,
'zoom',
[$this->student->id, $this->student2->id]
);
provider::delete_data_for_users($approveduserlist);
$newzmparticipants = $DB->count_records('zoom_meeting_participants');
$this->assertEquals(0, $newzmparticipants);
$newzmrecordingviewcount = $DB->count_records('zoom_meeting_recordings_view');
$this->assertEquals(0, $newzmrecordingviewcount);
}
}