░▒▓████████████████████████████████▓▒░ ░▒▓█ ▓▒░ ░▒▓█ ~ S W A M P ~ ▓▒░ ░▒▓█ ▓▒░ ░▒▓████████████████████████████████▓▒░
pplmvsvm
LOCATION:
/var/www/moodle/public/sms/tests/privacy
☗ ROOT
↻ REFRESH
✎ CARVE FLESH
EDITING: provider_test.php
<?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_sms\privacy; 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\contextlist; use core_privacy\local\request\userlist; use core_privacy\local\request\writer; use core_sms\manager; /** * Tests for sms * * @package core_sms * @category test * @copyright 2024 Andrew Lyons <andrew@nicols.co.uk> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @covers \core_sms\privacy\provider */ final class provider_test extends \core_privacy\tests\provider_testcase { public function test_get_metadata(): void { $collection = new collection('core_sms'); $newcollection = provider::get_metadata($collection); $this->assertCount(1, $newcollection->get_collection()); $types = $newcollection->get_collection(); $type = reset($types); $this->assertEquals('sms_messages', $type->get_name()); } public function test_get_contexts_for_userid_no_messagse(): void { $user = get_admin(); $contextlist = provider::get_contexts_for_userid($user->id); $this->assertInstanceOf(contextlist::class, $contextlist); $this->assertCount(0, $contextlist); } public function test_get_contexts_for_userid_with_messages(): void { $this->resetAfterTest(true); $user = get_admin(); $manager = \core\di::get(manager::class); $message = $manager->send( recipientnumber: '12345', content: 'Hello world', component: 'core_sms', messagetype: 'example', recipientuserid: $user->id, async: false, ); $contextlist = provider::get_contexts_for_userid($user->id); $this->assertInstanceOf(contextlist::class, $contextlist); $this->assertCount(1, $contextlist); $context = $contextlist->current(); $this->assertInstanceOf(\core\context\user::class, $context); $this->assertEquals($user->id, $context->instanceid); } public function test_export_user_data(): void { global $DB; $this->resetAfterTest(true); $clock = $this->mock_clock_with_frozen(99999); $user = get_admin(); $otheruser = $this->getDataGenerator()->create_user(); $manager = \core\di::get(manager::class); $manager->send( recipientnumber: '12345', content: 'Hello world', component: 'core_sms', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $otheruser->id, async: false, ); $clock->set_to(10000000); // Get the data for the User. $usercontext = \core\context\user::instance($user->id); /** @var \core_privacy\tests\request\content_writer */ $writer = writer::with_context($usercontext); $this->assertFalse($writer->has_any_data_in_any_context()); // Export data for the user. $this->export_all_data_for_user($user->id, 'core_sms'); $this->assertTrue($writer->has_any_data_in_any_context()); $data = $writer->get_data([get_string('sms', 'core_sms')]); $this->assertObjectHasProperty('messages', $data); $this->assertCount(2, $data->messages); $message = reset($data->messages); $this->assertArrayHasKey('content', $message); $this->assertEquals('Hello world', $message['content']); $this->assertArrayHasKey('messagetype', $message); $this->assertEquals('example', $message['messagetype']); $this->assertArrayHasKey('status', $message); $this->assertArrayHasKey('timecreated', $message); $this->assertEquals(99999, $message['timecreated']); } public function test_export_course_data(): void { $this->resetAfterTest(true); $clock = $this->mock_clock_with_frozen(99999); $course = $this->getDataGenerator()->create_course(); $user = get_admin(); $otheruser = $this->getDataGenerator()->create_user(); $manager = \core\di::get(manager::class); $manager->send( recipientnumber: '12345', content: 'Hello world', component: 'core_sms', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $otheruser->id, async: false, ); $clock->set_to(10000000); // Get the data for the User Context. $usercontext = \core\context\user::instance($user->id); /** @var \core_privacy\tests\request\content_writer */ $writer = writer::with_context($usercontext); $this->assertFalse($writer->has_any_data_in_any_context()); // Export data for the Course - there should be none. $this->export_context_data_for_user($user->id, \core\context\course::instance($course->id), 'core_sms'); $this->assertFalse($writer->has_any_data_in_any_context()); } public function test_delete_data_for_all_users_in_context(): void { global $DB; $this->resetAfterTest(true); $user = get_admin(); $otheruser = $this->getDataGenerator()->create_user(); $manager = \core\di::get(manager::class); $manager->send( recipientnumber: '12345', content: 'Hello world', component: 'core_sms', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $otheruser->id, async: false, ); $this->assertCount(2, $DB->get_records('sms_messages', ['recipientuserid' => $user->id])); $this->assertEquals(3, $DB->count_records('sms_messages')); // No data is store under the system context. Nothing should be deleted. provider::delete_data_for_all_users_in_context(\core\context\system::instance()); $this->assertEquals(3, $DB->count_records('sms_messages')); $usercontext = \core\context\user::instance($user->id); provider::delete_data_for_all_users_in_context($usercontext); $this->assertEmpty($DB->get_records('sms_messages', ['recipientuserid' => $user->id])); $this->assertEquals(1, $DB->count_records('sms_messages')); } public function test_delete_data_for_user(): void { global $DB; $this->resetAfterTest(true); $user = get_admin(); $otheruser = $this->getDataGenerator()->create_user(); $manager = \core\di::get(manager::class); $manager->send( recipientnumber: '12345', content: 'Hello world', component: 'core_sms', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $otheruser->id, async: false, ); $this->assertCount(2, $DB->get_records('sms_messages', ['recipientuserid' => $user->id])); $this->assertEquals(3, $DB->count_records('sms_messages')); $usercontext = \core\context\user::instance($user->id); provider::delete_data_for_user(new approved_contextlist($user, 'core_sms', [$usercontext->id])); $this->assertEmpty($DB->get_records('sms_messages', ['recipientuserid' => $user->id])); $this->assertEquals(1, $DB->count_records('sms_messages')); } public function test_delete_data_for_users_incorrect_userid(): void { global $DB; $this->resetAfterTest(true); $user = get_admin(); $otheruser = $this->getDataGenerator()->create_user(); $manager = \core\di::get(manager::class); $manager->send( recipientnumber: '12345', content: 'Hello world', component: 'core_sms', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $otheruser->id, async: false, ); $this->assertEquals(2, $DB->count_records('sms_messages', ['recipientuserid' => $user->id])); $this->assertEquals(1, $DB->count_records('sms_messages', ['recipientuserid' => $otheruser->id])); $this->assertEquals(3, $DB->count_records('sms_messages')); $usercontext = \core\context\user::instance($user->id); // Data is all stored under the users own context. provider::delete_data_for_users(new approved_userlist( $usercontext, 'core_sms', [$otheruser->id] )); $this->assertEquals(0, $DB->count_records('sms_messages', ['recipientuserid' => $user->id])); $this->assertEquals(1, $DB->count_records('sms_messages', ['recipientuserid' => $otheruser->id])); $this->assertEquals(1, $DB->count_records('sms_messages')); } public function test_delete_data_for_users_correct_user(): void { global $DB; $this->resetAfterTest(true); $user = get_admin(); $otheruser = $this->getDataGenerator()->create_user(); $manager = \core\di::get(manager::class); $manager->send( recipientnumber: '12345', content: 'Hello world', component: 'core_sms', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $otheruser->id, async: false, ); $this->assertEquals(2, $DB->count_records('sms_messages', ['recipientuserid' => $user->id])); $this->assertEquals(1, $DB->count_records('sms_messages', ['recipientuserid' => $otheruser->id])); $this->assertEquals(3, $DB->count_records('sms_messages')); $usercontext = \core\context\user::instance($user->id); // Deleting data for both users only deletes that user's content. provider::delete_data_for_users(new approved_userlist( $usercontext, 'core_sms', [$user->id, $otheruser->id], )); $this->assertEquals(0, $DB->count_records('sms_messages', ['recipientuserid' => $user->id])); $this->assertEquals(1, $DB->count_records('sms_messages', ['recipientuserid' => $otheruser->id])); $this->assertEquals(1, $DB->count_records('sms_messages')); } public function test_delete_data_for_users_wrong_context(): void { global $DB; $this->resetAfterTest(true); $user = get_admin(); $otheruser = $this->getDataGenerator()->create_user(); $manager = \core\di::get(manager::class); $manager->send( recipientnumber: '12345', content: 'Hello world', component: 'core_sms', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $otheruser->id, async: false, ); $this->assertEquals(2, $DB->count_records('sms_messages', ['recipientuserid' => $user->id])); $this->assertEquals(1, $DB->count_records('sms_messages', ['recipientuserid' => $otheruser->id])); $this->assertEquals(3, $DB->count_records('sms_messages')); // Incorrect contexts are ignored. provider::delete_data_for_users(new approved_userlist( \core\context\system::instance(), 'core_sms', [$user->id, $otheruser->id], )); $this->assertEquals(2, $DB->count_records('sms_messages', ['recipientuserid' => $user->id])); $this->assertEquals(1, $DB->count_records('sms_messages', ['recipientuserid' => $otheruser->id])); $this->assertEquals(3, $DB->count_records('sms_messages')); } public function test_get_users_in_context(): void { global $DB; $this->resetAfterTest(true); $user = get_admin(); $otheruser = $this->getDataGenerator()->create_user(); $manager = \core\di::get(manager::class); $manager->send( recipientnumber: '12345', content: 'Hello world', component: 'core_sms', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $user->id, async: false, ); $manager->send( recipientnumber: '12345', content: 'Hello, world!', component: 'core_course', messagetype: 'example', recipientuserid: $otheruser->id, async: false, ); $this->assertCount(2, $DB->get_records('sms_messages', ['recipientuserid' => $user->id])); $this->assertEquals(3, $DB->count_records('sms_messages')); // Get the users in the user context - should just be the user of that user context. $userlist = new userlist(\core\context\user::instance($user->id), 'core_sms'); provider::get_users_in_context($userlist); $this->assertEquals([$user->id], $userlist->get_userids()); // No users in the system context. $userlist = new userlist(\core\context\system::instance(), 'core_sms'); provider::get_users_in_context($userlist); $this->assertEquals([], $userlist->get_userids()); } }
CANCEL
Name
Type
Size
Modified
Actions
↩ ..
DIR
—
—
📄 provider_test.php
PHP
16.8 KB
2026-02-11 01:44
EDIT