Ir a la última revisión | Autoría | Comparar con el anterior | 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/>.
/**
* Privacy provider tests.
*
* @package mod_bigbluebuttonbn
* @copyright 2018 - present, Blindside Networks Inc
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @author Jesus Federico (jesus [at] blindsidenetworks [dt] com)
*/
namespace mod_bigbluebuttonbn\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\userlist;
/**
* Privacy provider tests class.
*
* @package mod_bigbluebuttonbn
* @copyright 2018 - present, Blindside Networks Inc
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @author Jesus Federico (jesus [at] blindsidenetworks [dt] com)
* @covers \mod_bigbluebuttonbn\privacy\provider
*/
class provider_test extends \core_privacy\tests\provider_testcase {
/**
* Test for provider::get_metadata().
*/
public function test_get_metadata() {
$this->resetAfterTest(true);
$collection = new collection('mod_bigbluebuttonbn');
$newcollection = provider::get_metadata($collection);
$itemcollection = $newcollection->get_collection();
$this->assertCount(4, $itemcollection);
$instancetable = array_shift($itemcollection);
$this->assertEquals('bigbluebuttonbn', $instancetable->get_name());
$instancelogstable = array_shift($itemcollection);
$this->assertEquals('bigbluebuttonbn_logs', $instancelogstable->get_name());
$recordings = array_shift($itemcollection);
$this->assertEquals('bigbluebuttonbn_recordings', $recordings->get_name());
$bigbluebuttonserver = array_shift($itemcollection);
$this->assertEquals('bigbluebutton', $bigbluebuttonserver->get_name());
$privacyfields = $instancetable->get_privacy_fields();
$this->assertArrayHasKey('participants', $privacyfields);
$this->assertEquals('privacy:metadata:bigbluebuttonbn', $instancetable->get_summary());
$privacyfields = $instancelogstable->get_privacy_fields();
$this->assertArrayHasKey('userid', $privacyfields);
$this->assertArrayHasKey('timecreated', $privacyfields);
$this->assertArrayHasKey('meetingid', $privacyfields);
$this->assertArrayHasKey('log', $privacyfields);
$this->assertArrayHasKey('meta', $privacyfields);
$this->assertEquals('privacy:metadata:bigbluebuttonbn_logs', $instancelogstable->get_summary());
$privacyfields = $bigbluebuttonserver->get_privacy_fields();
$this->assertArrayHasKey('userid', $privacyfields);
$this->assertArrayHasKey('fullname', $privacyfields);
$this->assertEquals('privacy:metadata:bigbluebutton', $bigbluebuttonserver->get_summary());
}
/**
* Test for provider::get_contexts_for_userid().
*/
public function test_get_contexts_for_userid() {
$this->resetAfterTest();
$e = $this->get_bigbluebuttonbn_environemnt();
$bigbluebuttonbn = $e['instance'];
$course = $e['course'];
// Another bigbluebuttonbn activity that has no user activity.
$this->getDataGenerator()->create_module('bigbluebuttonbn', ['course' => $course]);
// Create a user which will make a submission.
$user = $this->getDataGenerator()->create_user();
$this->getDataGenerator()->get_plugin_generator('mod_bigbluebuttonbn')
->create_log(['bigbluebuttonbnid' => $bigbluebuttonbn->id, 'userid' => $user->id]);
// Check the contexts supplied are correct.
$contextlist = provider::get_contexts_for_userid($user->id);
$this->assertCount(1, $contextlist);
$contextformodule = $contextlist->current();
$cmcontext = context_module::instance($bigbluebuttonbn->cmid);
$this->assertEquals($cmcontext->id, $contextformodule->id);
}
/**
* Test for provider::export_user_data().
*/
public function test_export_for_context_logs() {
$this->resetAfterTest();
$e = $this->get_bigbluebuttonbn_environemnt();
$bigbluebuttonbn = $e['instance'];
// Create users which will make submissions.
$user1 = $this->getDataGenerator()->create_user();
$user2 = $this->getDataGenerator()->create_user();
$this->getDataGenerator()->get_plugin_generator('mod_bigbluebuttonbn')
->create_log(['bigbluebuttonbnid' => $bigbluebuttonbn->id, 'userid' => $user1->id]);
$this->getDataGenerator()->get_plugin_generator('mod_bigbluebuttonbn')
->create_log(['bigbluebuttonbnid' => $bigbluebuttonbn->id, 'userid' => $user1->id]);
$this->getDataGenerator()->get_plugin_generator('mod_bigbluebuttonbn')
->create_log(['bigbluebuttonbnid' => $bigbluebuttonbn->id, 'userid' => $user2->id]);
// Export all of the data for the context for user 1.
$cmcontext = context_module::instance($bigbluebuttonbn->cmid);
$this->export_context_data_for_user($user1->id, $cmcontext, 'mod_bigbluebuttonbn');
$writer = \core_privacy\local\request\writer::with_context($cmcontext);
$this->assertTrue($writer->has_any_data());
$data = $writer->get_data();
$this->assertCount(2, $data->logs);
}
/**
* Test that only users with relevant contexts are fetched.
*/
public function test_get_users_in_context() {
// For backward compatibility with old versions of Moodle.
if (!class_exists('\core_privacy\local\request\userlist')) {
return;
}
$this->resetAfterTest();
$e = $this->get_bigbluebuttonbn_environemnt();
$bigbluebuttonbn = $e['instance'];
// Users which will make submissions.
$user1 = $e['users'][0];
$user2 = $e['users'][1];
$this->getDataGenerator()->get_plugin_generator('mod_bigbluebuttonbn')
->create_log(['bigbluebuttonbnid' => $bigbluebuttonbn->id, 'userid' => $user1->id]);
$this->getDataGenerator()->get_plugin_generator('mod_bigbluebuttonbn')
->create_log(['bigbluebuttonbnid' => $bigbluebuttonbn->id, 'userid' => $user1->id]);
$this->getDataGenerator()->get_plugin_generator('mod_bigbluebuttonbn')
->create_log(['bigbluebuttonbnid' => $bigbluebuttonbn->id, 'userid' => $user2->id]);
// Export all of the data for the context for user 1.
$cmcontext = context_module::instance($bigbluebuttonbn->cmid);
$userlist = new userlist($cmcontext, 'mod_bigbluebuttonbn');
provider::get_users_in_context($userlist);
// Ensure correct users are found in relevant contexts.
$this->assertCount(2, $userlist);
$expected = [intval($user1->id), intval($user2->id)];
$actual = $userlist->get_userids();
$this->assertEquals(sort($expected), sort($actual));
}
/**
* Test for provider::delete_data_for_all_users_in_context().
*/
public function test_delete_data_for_all_users_in_context() {
global $DB;
$this->resetAfterTest();
$e = $this->get_bigbluebuttonbn_environemnt();
// Before deletion, we should have 3 responses, 1 Add event and 2 Create events (1 per user).
$count = $DB->count_records('bigbluebuttonbn_logs', ['bigbluebuttonbnid' => $e['instance']->id]);
$this->assertEquals(3, $count);
// Delete data based on context.
$cmcontext = context_module::instance($e['instance']->cmid);
provider::delete_data_for_all_users_in_context($cmcontext);
// After deletion, the bigbluebuttonbn logs for that activity should have been deleted.
$count = $DB->count_records('bigbluebuttonbn_logs', ['bigbluebuttonbnid' => $e['instance']->id]);
$this->assertEquals(0, $count);
}
/**
* Test for provider::delete_data_for_user().
*/
public function test_delete_data_for_user() {
global $DB;
$this->resetAfterTest();
$e = $this->get_bigbluebuttonbn_environemnt();
// Delete data for the first user.
$context = \context_module::instance($e['instance']->cmid);
$contextlist = new approved_contextlist($e['users'][0], 'bigbluebuttonbn',
[$context->id]);
provider::delete_data_for_user($contextlist);
// After deletion the bigbluebuttonbn logs for the first user should have been deleted.
$count = $DB->count_records('bigbluebuttonbn_logs',
['bigbluebuttonbnid' => $e['instance']->id, 'userid' => $e['users'][0]->id]);
$this->assertEquals(0, $count);
// Check the logs for the other user is still there.
$count = $DB->count_records('bigbluebuttonbn_logs',
['bigbluebuttonbnid' => $e['instance']->id, 'userid' => $e['users'][1]->id]);
$this->assertEquals(1, $count);
}
/**
* Test that data for users in approved userlist is deleted.
*/
public function test_delete_data_for_users() {
global $DB;
// For backward compatibility with old versions of Moodle.
if (!class_exists('\core_privacy\local\request\approved_userlist')) {
return;
}
$this->resetAfterTest();
$e = $this->get_bigbluebuttonbn_environemnt();
// Delete user 1 and 2 data from chat 1 context only.
$context = \context_module::instance($e['instance']->cmid);
$approveduserids = [$e['users'][0]->id];
$approvedlist = new approved_userlist($context, 'mod_bigbluebuttonbn', $approveduserids);
provider::delete_data_for_users($approvedlist);
// After deletion the bigbluebuttonbn logs for the first user should have been deleted.
$count = $DB->count_records('bigbluebuttonbn_logs',
['bigbluebuttonbnid' => $e['instance']->id, 'userid' => $e['users'][0]->id]);
$this->assertEquals(0, $count);
// Check the logs for the other user is still there.
$count = $DB->count_records('bigbluebuttonbn_logs',
['bigbluebuttonbnid' => $e['instance']->id, 'userid' => $e['users'][1]->id]);
$this->assertEquals(1, $count);
}
/**
* Prepares the environment for testing.
*
* @return array $e
*/
protected function get_bigbluebuttonbn_environemnt() {
$e = [];
// Create a course.
$e['course'] = $this->getDataGenerator()->create_course();
// Create a bigbluebuttonbn instance.
$e['instance'] = $this->getDataGenerator()->create_module('bigbluebuttonbn',
['course' => $e['course']->id]);
// Create users that will use the bigbluebuttonbn instance.
$e['users'][] = $this->getDataGenerator()->create_user();
$e['users'][] = $this->getDataGenerator()->create_user();
// Create the bigbluebuttonbn logs.
$this->getDataGenerator()->get_plugin_generator('mod_bigbluebuttonbn')
->create_log(['bigbluebuttonbnid' => $e['instance']->id, 'userid' => $e['users'][0]->id]);
$this->getDataGenerator()->get_plugin_generator('mod_bigbluebuttonbn')
->create_log(['bigbluebuttonbnid' => $e['instance']->id, 'userid' => $e['users'][1]->id]);
return $e;
}
}