MDL-81437 files: fix SQL LIKE comparison, improve test coding style.

This commit is contained in:
Paul Holden 2025-03-31 17:58:24 +01:00
parent ff9ea3fe6d
commit 0a51669668
No known key found for this signature in database
GPG Key ID: A81A96D6045F6164
2 changed files with 18 additions and 14 deletions

View File

@ -21,7 +21,7 @@ use core\task\adhoc_task;
/**
* Ad-hoc task that performs asynchronous upgrades of a given file type.
*
* This ad-hoc taks is used during core upgrades.
* This ad-hoc task can be scheduled during core upgrades.
*
* @package core_files
* @copyright 2025 Daniel Ziegenberg
@ -37,14 +37,13 @@ class asynchronous_mimetype_upgrade_task extends adhoc_task {
// Upgrade mime type for existing files.
$customdata = $this->get_custom_data();
foreach ($customdata->extensions as $extension) {
mtrace("Updating mime type for files with extension *.{$extension} to {$customdata->mimetype}");
$condition = $DB->sql_like('filename', ":extension", false);
$select = "{$condition} AND mimetype <> :mimetype";
$params = [
'extension' => $DB->sql_like_escape("%.$extension"),
'extension' => '%' . $DB->sql_like_escape(".{$extension}"),
'mimetype' => $customdata->mimetype,
];

View File

@ -23,7 +23,7 @@ namespace core_files\task;
* @category test
* @copyright 2025 Daniel Ziegenberg
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @covers \core_files\task\asynchronous_mimetype_upgrade_task::execute
* @covers \core_files\task\asynchronous_mimetype_upgrade_task
*/
final class asynchronous_mimetype_upgrade_task_test extends \advanced_testcase {
@ -104,8 +104,14 @@ final class asynchronous_mimetype_upgrade_task_test extends \advanced_testcase {
* @param string $mimetype
* @param array $extensions
*/
public function test_upgrade_mimetype(array $files, string $mimetype, array $extensions): void {
public function test_execute(
array $files,
string $mimetype,
array $extensions,
): void {
global $DB;
$this->resetAfterTest();
// Create files with different extensions.
@ -124,30 +130,29 @@ final class asynchronous_mimetype_upgrade_task_test extends \advanced_testcase {
}
// Create and run the upgrade task.
$upgardetask = new asynchronous_mimetype_upgrade_task();
$upgardetask->set_custom_data([
$task = new asynchronous_mimetype_upgrade_task();
$task->set_custom_data([
'mimetype' => $mimetype,
'extensions' => $extensions,
]);
ob_start();
$upgardetask->execute();
$task->execute();
$output = ob_get_clean();
// Check that the task output is correct.
foreach ($extensions as $extension) {
$this->assertStringContainsString(
"Updating mime type for files with extension *.{$extension} to {$mimetype}",
$output
$output,
);
$countfiles = count(array_filter(
array_keys($files),
function ($filename) use ($extension) {
return str_ends_with($filename, $extension);
}
fn($filename) => str_ends_with($filename, $extension),
));
$this->assertStringContainsString(
"Updated {$countfiles} files with extension *.{$extension} to {$mimetype}",
$output
$output,
);
}
@ -156,7 +161,7 @@ final class asynchronous_mimetype_upgrade_task_test extends \advanced_testcase {
$mimetypedb = $DB->get_field(
table: 'files',
return: 'mimetype',
conditions: ['filename' => $filename]
conditions: ['filename' => $filename],
);
$this->assertEquals(expected: $exptectedmimetype, actual: $mimetypedb);
}