MDL-62601 core_privacy: Ensure providers can handle deleted users

This commit is contained in:
Andrew Nicols
2018-10-31 13:45:00 +08:00
parent 52a16f409d
commit 1760650216
+37
View File
@@ -178,6 +178,29 @@ class provider_testcase extends advanced_testcase {
$this->assertTrue($manager->component_is_compliant($component));
}
/**
* Ensure that providers do not throw an error when processing a deleted user.
*
* @dataProvider is_user_data_provider
* @param string $component
*/
public function test_component_understands_deleted_users($component) {
$this->resetAfterTest();
// Create a user.
$user = $this->getDataGenerator()->create_user();
// Delete the user and their context.
delete_user($user);
$usercontext = \context_user::instance($user->id);
$usercontext->delete();
$contextlist = manager::component_class_callback($component, \core_privacy\local\request\core_user_data_provider::class,
'get_contexts_for_userid', [$user->id]);
$this->assertInstanceOf(\core_privacy\local\request\contextlist::class, $contextlist);
}
/**
* Data provider for the metadata\provider tests.
*
@@ -192,6 +215,20 @@ class provider_testcase extends advanced_testcase {
});
}
/**
* List of providers which implement the core_user_data_provider.
*
* @return array
*/
public function is_user_data_provider() {
return array_filter($this->get_component_list(), function($component) {
return static::component_implements(
$component['classname'],
\core_privacy\local\request\core_user_data_provider::class
);
});
}
/**
* Checks whether the component's provider class implements the specified interface, either directly or as a grandchild.
*