From 8a5563445dcf65dcfe267c200027fe8ebea93bec Mon Sep 17 00:00:00 2001 From: Jake Dallimore Date: Thu, 12 Jan 2023 11:28:37 +0800 Subject: [PATCH] MDL-76862 user: Unit test for setting user home page preferences --- user/tests/externallib_test.php | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/user/tests/externallib_test.php b/user/tests/externallib_test.php index 95812a41bab..cbabc9d824b 100644 --- a/user/tests/externallib_test.php +++ b/user/tests/externallib_test.php @@ -1675,4 +1675,36 @@ class externallib_test extends externallib_advanced_testcase { $this->assertEquals('email', $user['extrafields'][0]['name']); } } + + /** + * Test verifying that update_user_preferences prevents changes to the default homepage for other users. + */ + public function test_update_user_preferences_homepage_permission_callback() { + global $DB; + $this->resetAfterTest(); + + $user = self::getDataGenerator()->create_user(); + $this->setUser($user); + $adminuser = get_admin(); + + // Allow user selection of the default homepage via preferences. + set_config('defaulthomepage', HOMEPAGE_USER); + + // Try to save another user's home page preference which uses the permissioncallback. + $preferences = [ + [ + 'name' => 'user_home_page_preference', + 'value' => '3', + 'userid' => $adminuser->id, + ] + ]; + $result = core_user_external::set_user_preferences($preferences); + $result = \external_api::clean_returnvalue(core_user_external::set_user_preferences_returns(), $result); + $this->assertCount(1, $result['warnings']); + $this->assertCount(0, $result['saved']); + + // Verify no change to the preference, checking from DB to avoid cache. + $this->assertEquals(null, $DB->get_field('user_preferences', 'value', + ['userid' => $adminuser->id, 'name' => 'user_home_page_preference'])); + } }