File
- core/modules/simpletest/tests/file.test, line 1030
- This provides SimpleTests for the core file handling functionality.
These include FileValidateTest and FileSaveTest.
Class
- FileUploadTransliterationTest
- Tests transliterating files on upload and subsequent bulk updating.
Code
function testTransliteration() {
$original_filename = 'üФайл Ä fàü.txt';
$file = $this->createFile($original_filename, 'Sample text');
$config = config('system.core');
$upload_options = array(
'file_test_replace' => FILE_EXISTS_RENAME,
'extensions' => 'txt',
'is_image_file' => FALSE,
'files[file_test_upload]' => backdrop_realpath($file->uri),
);
$this->backdropPost('file-test/upload', $upload_options, t('Submit'));
$first_fid = db_query("SELECT MAX(fid) FROM {file_managed}")->fetchField();
$first_file = file_load($first_fid);
debug($first_file);
$this->assertIdentical($first_file->filename, $original_filename, 'File name not transliterated or modified to lowercase.');
$this->assertIdentical($first_file->uri, 'temporary://ufail_a_fau.txt', 'File name has been transliterated upon upload.');
$this->assertTrue(file_exists($first_file->uri), 'Transliterated file exists at expected path.');
$first_file->delete();
$config->set('file_transliterate_lowercase', 1);
$config->set('file_transliterate_uploads_display_name', 1);
$config->save();
$this->backdropPost('file-test/upload', $upload_options, t('Submit'));
$second_fid = db_query("SELECT MAX(fid) FROM {file_managed}")->fetchField();
$second_file = file_load($second_fid);
debug($second_file);
$this->assertIdentical($second_file->filename, 'ufail_a_fau.txt', 'File display name transliterated and converted to lowercase.');
$this->assertIdentical($second_file->uri, 'temporary://ufail_a_fau.txt', 'File name has been transliterated and lowercased.');
$this->assertTrue(file_exists($second_file->uri), 'Transliterated file exists at expected path.');
$second_file->delete();
$config->set('file_transliterate_uploads', 0);
$config->save();
$this->backdropPost('file-test/upload', $upload_options, t('Submit'));
$non_transliterated_fid = db_query("SELECT MAX(fid) FROM {file_managed}")->fetchField();
$non_transliterated_file = file_load($non_transliterated_fid);
$this->assertIdentical($non_transliterated_file->filename, $original_filename, 'File display name not transliterated or modified to lowercase.');
$this->assertIdentical($non_transliterated_file->uri, 'temporary://' . $original_filename, 'File name has not been modified in any way.');
$this->assertTrue(file_exists($non_transliterated_file->uri), 'Non-transliterated file exists at expected path.');
$this->backdropGet('admin/config/media/file-system/transliteration');
$this->assertText('File transliteration is not yet enabled.');
$config->set('file_transliterate_uploads', 1);
$config->set('file_transliterate_lowercase', 0);
$config->set('file_transliterate_uploads_display_name', 0);
$config->save();
$this->backdropGet('admin/config/media/file-system/transliteration');
$table_rows = $this->xpath('//*[@id="system-transliteration-retroactive"]//tbody//tr');
$this->assertEqual(count($table_rows), 2, 'Two files available for transliteration.');
$this->backdropPost(NULL, array(), t('Transliterate'));
$this->assertText('2 file names have been successfully transliterated.');
entity_get_controller('file')->resetCache();
$now_transliterated_file = file_load($non_transliterated_fid);
$this->assertIdentical($now_transliterated_file->filename, $non_transliterated_file->filename, 'File display name not transliterated or modified to lowercase.');
$this->assertIdentical($now_transliterated_file->uri, 'temporary://uFail_A_fau.txt', 'File name transliterated after bulk updating.');
$this->backdropGet('admin/config/media/file-system/transliteration');
$this->assertText('Transliteration is not required.');
$config->set('file_transliterate_lowercase', 1);
$config->set('file_transliterate_uploads_display_name', 1);
$config->save();
$this->backdropGet('admin/config/media/file-system/transliteration');
$table_rows = $this->xpath('//*[@id="system-transliteration-retroactive"]//tbody//tr');
$this->assertEqual(count($table_rows), 2, 'Two files available for transliteration.');
$this->backdropPost(NULL, array(), t('Transliterate'));
$this->assertText('2 file names have been successfully transliterated.');
entity_get_controller('file')->resetCache();
$now_transliterated_file = file_load($non_transliterated_fid);
$this->assertIdentical($now_transliterated_file->filename, $non_transliterated_file->filename, 'File display name not transliterated or modified to lowercase.');
$this->assertIdentical($now_transliterated_file->uri, 'temporary://ufail_a_fau.txt', 'File name transliterated and lower case after bulk updating.');
}