forked from moodle/moodle
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDL-63865 tool_dataprivacy: unit test for plugin privacy provider.
- Loading branch information
1 parent
f2fc4a9
commit a11e3d9
Showing
1 changed file
with
187 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,187 @@ | ||
<?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/>. | ||
|
||
/** | ||
* Tests for the plugin privacy provider | ||
* | ||
* @package tool_dataprivacy | ||
* @copyright 2020 Paul Holden <[email protected]> | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
|
||
defined('MOODLE_INTERNAL') || die(); | ||
|
||
use core_privacy\local\request\userlist; | ||
use core_privacy\local\request\writer; | ||
use core_privacy\tests\provider_testcase; | ||
use tool_dataprivacy\api; | ||
use tool_dataprivacy\local\helper; | ||
use tool_dataprivacy\privacy\provider; | ||
|
||
/** | ||
* Privacy provider tests | ||
* | ||
* @package tool_dataprivacy | ||
* @copyright 2020 Paul Holden <[email protected]> | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
class tool_dataprivacy_privacy_provider_testcase extends provider_testcase { | ||
|
||
/** | ||
* Test provider get_contexts_for_userid method | ||
* | ||
* @return void | ||
*/ | ||
public function test_get_contexts_for_userid() { | ||
$this->resetAfterTest(); | ||
|
||
$user = $this->getDataGenerator()->create_user(); | ||
$context = context_user::instance($user->id); | ||
|
||
// Returned context list should contain a single item. | ||
$contextlist = $this->get_contexts_for_userid($user->id, 'tool_dataprivacy'); | ||
$this->assertCount(1, $contextlist); | ||
|
||
// We should have the user context of our test user. | ||
$this->assertSame($context, $contextlist->current()); | ||
} | ||
|
||
/** | ||
* Test provider get_users_in_context method | ||
* | ||
* @return void | ||
*/ | ||
public function test_get_users_in_context() { | ||
$this->resetAfterTest(); | ||
|
||
$user = $this->getDataGenerator()->create_user(); | ||
$context = context_user::instance($user->id); | ||
|
||
$userlist = new userlist($context, 'tool_dataprivacy'); | ||
provider::get_users_in_context($userlist); | ||
|
||
$this->assertEquals([$user->id], $userlist->get_userids()); | ||
} | ||
|
||
/** | ||
* Test provider get_users_in_context method for a non-user context | ||
* | ||
* @return void | ||
*/ | ||
public function test_get_users_in_context_non_user_context() { | ||
$context = context_system::instance(); | ||
|
||
$userlist = new userlist($context, 'tool_dataprivacy'); | ||
provider::get_users_in_context($userlist); | ||
|
||
$this->assertEmpty($userlist); | ||
} | ||
|
||
/** | ||
* Test provider export_user_data method | ||
* | ||
* @return void | ||
*/ | ||
public function test_export_user_data() { | ||
$this->resetAfterTest(); | ||
|
||
$user = $this->getDataGenerator()->create_user(); | ||
$context = context_user::instance($user->id); | ||
|
||
$this->setUser($user); | ||
|
||
// Create an export request, approve it. | ||
$requestexport = api::create_data_request($user->id, api::DATAREQUEST_TYPE_EXPORT, | ||
'Please export my stuff'); | ||
api::update_request_status($requestexport->get('id'), api::DATAREQUEST_STATUS_APPROVED); | ||
|
||
// Create a deletion request, reject it. | ||
$requestdelete = api::create_data_request($user->id, api::DATAREQUEST_TYPE_DELETE); | ||
api::update_request_status($requestdelete->get('id'), api::DATAREQUEST_STATUS_REJECTED, 0, 'Nope'); | ||
|
||
$this->export_context_data_for_user($user->id, $context, 'tool_dataprivacy'); | ||
|
||
/** @var \core_privacy\tests\request\content_writer $writer */ | ||
$writer = writer::with_context($context); | ||
$this->assertTrue($writer->has_any_data()); | ||
|
||
/** @var stdClass[] $data */ | ||
$data = (array) $writer->get_data([ | ||
get_string('privacyandpolicies', 'admin'), | ||
get_string('datarequests', 'tool_dataprivacy'), | ||
]); | ||
|
||
$this->assertCount(2, $data); | ||
|
||
$strs = get_strings(['requesttypeexportshort', 'requesttypedeleteshort', | ||
'statusapproved', 'statusrejected', 'creationmanual'], 'tool_dataprivacy'); | ||
|
||
// First item is the approved export request. | ||
$this->assertEquals($strs->requesttypeexportshort, $data[0]->type); | ||
$this->assertEquals($strs->statusapproved, $data[0]->status); | ||
$this->assertEquals($strs->creationmanual, $data[0]->creationmethod); | ||
$this->assertEquals($requestexport->get('comments'), $data[0]->comments); | ||
$this->assertEmpty($data[0]->dpocomment); | ||
$this->assertNotEmpty($data[0]->timecreated); | ||
|
||
// Next is the rejected deletion request. | ||
$this->assertEquals($strs->requesttypedeleteshort, $data[1]->type); | ||
$this->assertEquals($strs->statusrejected, $data[1]->status); | ||
$this->assertEquals($strs->creationmanual, $data[1]->creationmethod); | ||
$this->assertEmpty($data[1]->comments); | ||
$this->assertContains('Nope', $data[1]->dpocomment); | ||
$this->assertNotEmpty($data[1]->timecreated); | ||
} | ||
|
||
/** | ||
* Test class export_user_preferences method | ||
* | ||
* @return void | ||
*/ | ||
public function test_export_user_preferences() { | ||
$this->resetAfterTest(); | ||
|
||
$user = $this->getDataGenerator()->create_user(); | ||
$this->setUser($user); | ||
|
||
// Set filters preference. | ||
$filters = [ | ||
helper::FILTER_TYPE . ':' . api::DATAREQUEST_TYPE_EXPORT, | ||
helper::FILTER_STATUS . ':' . api::DATAREQUEST_STATUS_PENDING, | ||
]; | ||
set_user_preference(helper::PREF_REQUEST_FILTERS, json_encode($filters), $user); | ||
|
||
// Set paging preference. | ||
set_user_preference(helper::PREF_REQUEST_PERPAGE, 6, $user); | ||
|
||
provider::export_user_preferences($user->id); | ||
|
||
/** @var \core_privacy\tests\request\content_writer $writer */ | ||
$writer = writer::with_context(context_system::instance()); | ||
$this->assertTrue($writer->has_any_data()); | ||
|
||
/** @var stdClass[] $preferences */ | ||
$preferences = (array) $writer->get_user_preferences('tool_dataprivacy'); | ||
$this->assertCount(2, $preferences); | ||
|
||
$this->assertEquals((object) [ | ||
'value' => '1:1, 2:0', | ||
'description' => 'Type: Export, Status: Pending', | ||
], $preferences[helper::PREF_REQUEST_FILTERS]); | ||
|
||
$this->assertEquals(6, $preferences[helper::PREF_REQUEST_PERPAGE]->value); | ||
} | ||
} |