MDL-74076 reportbuilder: deterministic ordering of schedule users.

Now that we have consistent ordering we can also revert 898f3d0a.
This commit is contained in:
Paul Holden
2022-03-04 15:25:22 +00:00
parent 1d99ba19a2
commit ad7583cd33
3 changed files with 29 additions and 20 deletions
@@ -119,10 +119,12 @@ class schedule {
// Now convert audiences to SQL for user retrieval.
[$wheres, $params] = audience::user_audience_sql($audiences);
[$userorder] = users_order_by_sql('u');
$sql = 'SELECT u.*
FROM {user} u
WHERE ' . implode(' OR ', $wheres);
WHERE ' . implode(' OR ', $wheres) . '
ORDER BY ' . $userorder;
return $DB->get_records_sql($sql, $params);
}
@@ -189,13 +189,13 @@ class schedule_test extends advanced_testcase {
// Create cohort, with some members.
$cohort = $this->getDataGenerator()->create_cohort();
$cohortuserone = $this->getDataGenerator()->create_user();
$cohortuserone = $this->getDataGenerator()->create_user(['firstname' => 'Zoe', 'lastname' => 'Zebra']);
cohort_add_member($cohort->id, $cohortuserone->id);
$cohortusertwo = $this->getDataGenerator()->create_user();
$cohortusertwo = $this->getDataGenerator()->create_user(['firstname' => 'Henrietta', 'lastname' => 'Hamster']);
cohort_add_member($cohort->id, $cohortusertwo->id);
// Create a third user, to be added manually.
$manualuserone = $this->getDataGenerator()->create_user();
$manualuserone = $this->getDataGenerator()->create_user(['firstname' => 'Bob', 'lastname' => 'Badger']);
$audiencecohort = $generator->create_audience([
'reportid' => $report->get('id'),
@@ -220,11 +220,11 @@ class schedule_test extends advanced_testcase {
]);
$users = schedule::get_schedule_report_users($schedule);
$this->assertEqualsCanonicalizing([
$cohortuserone->id,
$cohortusertwo->id,
$manualuserone->id,
], array_keys($users));
$this->assertEquals([
'Bob',
'Henrietta',
'Zoe',
], array_column($users, 'firstname'));
}
/**
+18 -11
View File
@@ -72,8 +72,18 @@ class send_schedule_test extends advanced_testcase {
$this->resetAfterTest();
$this->setAdminUser();
$userone = $this->getDataGenerator()->create_user(['username' => 'userone', 'email' => '[email protected]']);
$usertwo = $this->getDataGenerator()->create_user(['username' => 'usertwo', 'email' => '[email protected]']);
$userone = $this->getDataGenerator()->create_user([
'username' => 'userone',
'email' => '[email protected]',
'firstname' => 'Zoe',
'lastname' => 'Zebra',
]);
$usertwo = $this->getDataGenerator()->create_user([
'username' => 'usertwo',
'email' => '[email protected]',
'firstname' => 'Henrietta',
'lastname' => 'Hamster',
]);
/** @var core_reportbuilder_generator $generator */
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
@@ -106,20 +116,17 @@ class send_schedule_test extends advanced_testcase {
'audiences' => json_encode([$audience->get_persistent()->get('id')]),
]);
// Send the schedule, catch emails in sink.
// Send the schedule, catch emails in sink (noting the users are sorted alphabetically).
$sink = $this->redirectEmails();
ob_start();
$this->expectOutputRegex("/^Sending schedule: My schedule\n" .
" Sending to: " . fullname($usertwo) . "\n" .
" Sending to: " . fullname($userone) . "\n" .
"Sending schedule complete\n/"
);
$sendschedule = new send_schedule();
$sendschedule->set_custom_data(['reportid' => $report->get('id'), 'scheduleid' => $schedule->get('id')]);
$sendschedule->execute();
$output = ob_get_clean();
// Assert the output contains the following messages.
$this->assertStringContainsString("Sending schedule: My schedule", $output);
$this->assertStringContainsString("Sending to: " . fullname($userone), $output);
$this->assertStringContainsString("Sending to: " . fullname($usertwo), $output);
$this->assertStringContainsString("Sending schedule complete", $output);
$messages = $sink->get_messages();
$this->assertCount(2, $messages);