mirror of
https://github.com/moodle/moodle.git
synced 2025-04-15 13:33:52 +02:00
MDL-76842 enrol_lti: test confirming the erroneous user_updated events
This test will fail until the fix - only updating users when data has changed - is put in place in the following commit.
This commit is contained in:
parent
d9fbe7c866
commit
b1e550a229
@ -31,9 +31,10 @@ class user_repository_test extends \advanced_testcase {
|
||||
* Helper to generate a new user instance.
|
||||
*
|
||||
* @param int $mockresourceid used to spoof a published resource, to which this user is associated.
|
||||
* @param array $userfields user information like city, timezone which would normally come from the tool configuration.
|
||||
* @return user a user instance
|
||||
*/
|
||||
protected function generate_user(int $mockresourceid = 1): user {
|
||||
protected function generate_user(int $mockresourceid = 1, array $userfields = []): user {
|
||||
global $CFG;
|
||||
$registration = application_registration::create(
|
||||
'Test',
|
||||
@ -63,16 +64,35 @@ class user_repository_test extends \advanced_testcase {
|
||||
$savedcontext->get_id());
|
||||
$savedresourcelink = $resourcelinkrepo->save($resourcelink);
|
||||
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
// Create a user using the DB defaults to simulate what would have occurred during an auth_lti user auth.
|
||||
$user = $this->getDataGenerator()->create_user([
|
||||
'city' => '',
|
||||
'country' => '',
|
||||
'institution' => '',
|
||||
'timezone' => '99',
|
||||
'maildisplay' => 2,
|
||||
'lang' => 'en'
|
||||
]);
|
||||
|
||||
$userdefaultvalues = [
|
||||
'lang' => $CFG->lang,
|
||||
'city' => '',
|
||||
'country' => '',
|
||||
'institution' => '',
|
||||
'timezone' => '99',
|
||||
'maildisplay' => 2
|
||||
];
|
||||
if (empty($userfields)) {
|
||||
// If userfields is omitted, assume the tool default configuration values (as if 'User default values' are unchanged).
|
||||
$userfields = $userdefaultvalues;
|
||||
} else {
|
||||
// If they have been provided, merge and override the defaults.
|
||||
$userfields = array_merge($userdefaultvalues, $userfields);
|
||||
}
|
||||
$ltiuser = $savedresourcelink->add_user(
|
||||
$user->id,
|
||||
'source-id-123',
|
||||
$CFG->lang,
|
||||
'Perth',
|
||||
'AU',
|
||||
'An Example Institution',
|
||||
'99',
|
||||
2,
|
||||
...array_values($userfields)
|
||||
);
|
||||
|
||||
$ltiuser->set_lastgrade(67.33333333);
|
||||
@ -141,19 +161,45 @@ class user_repository_test extends \advanced_testcase {
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests adding a user to the store.
|
||||
* Tests adding a user to the store, assuming that the user has been created using the default 'user default values'.
|
||||
*
|
||||
* @covers ::save
|
||||
*/
|
||||
public function test_save_new() {
|
||||
public function test_save_new_unchanged_user_defaults() {
|
||||
$this->resetAfterTest();
|
||||
$user = $this->generate_user();
|
||||
$userrepo = new user_repository();
|
||||
$sink = $this->redirectEvents();
|
||||
$saveduser = $userrepo->save($user);
|
||||
$events = $sink->get_events();
|
||||
$sink->close();
|
||||
|
||||
$this->assertIsInt($saveduser->get_id());
|
||||
$this->assert_same_user_values($user, $saveduser, true);
|
||||
$this->assert_user_db_values($saveduser);
|
||||
// No change to underlying user: city, etc. take on default values matching those of the existing user record.
|
||||
$this->assertEmpty($events);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests adding a user to the store, assuming that the user has been created using modified 'user default values'.
|
||||
*
|
||||
* @covers ::save
|
||||
*/
|
||||
public function test_save_new_changed_user_defaults() {
|
||||
$this->resetAfterTest();
|
||||
$user = $this->generate_user(1, ['city' => 'Perth']);
|
||||
$userrepo = new user_repository();
|
||||
$sink = $this->redirectEvents();
|
||||
$saveduser = $userrepo->save($user);
|
||||
$events = $sink->get_events();
|
||||
$sink->close();
|
||||
|
||||
$this->assertIsInt($saveduser->get_id());
|
||||
$this->assert_same_user_values($user, $saveduser, true);
|
||||
$this->assert_user_db_values($saveduser);
|
||||
// The underlying user record will change: city ('Perth') differs from that of the existing user ('').
|
||||
$this->assertInstanceOf(\core\event\user_updated::class, $events[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -165,16 +211,25 @@ class user_repository_test extends \advanced_testcase {
|
||||
$this->resetAfterTest();
|
||||
$user = $this->generate_user();
|
||||
$userrepo = new user_repository();
|
||||
$sink = $this->redirectEvents();
|
||||
$saveduser = $userrepo->save($user);
|
||||
$events = $sink->get_events();
|
||||
$sink->close();
|
||||
$this->assertEmpty($events); // No event for the first save, since the underlying user record is unchanged.
|
||||
|
||||
$saveduser->set_city('New City');
|
||||
$saveduser->set_country('NZ');
|
||||
$saveduser->set_lastgrade(99.99999999);
|
||||
$sink = $this->redirectEvents();
|
||||
$saveduser2 = $userrepo->save($saveduser);
|
||||
$events = $sink->get_events();
|
||||
$sink->close();
|
||||
|
||||
$this->assertEquals($saveduser->get_id(), $saveduser2->get_id());
|
||||
$this->assert_same_user_values($saveduser, $saveduser2, true);
|
||||
$this->assert_user_db_values($saveduser2);
|
||||
// The underlying user record will change now, since city and country have changed.
|
||||
$this->assertInstanceOf(\core\event\user_updated::class, $events[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user