FileFieldPathsRedirectTest.php in File (Field) Paths 8
File
tests/src/Functional/FileFieldPathsRedirectTest.php
View source
<?php
namespace Drupal\Tests\filefield_paths\Functional;
use Drupal\Core\StreamWrapper\PublicStream;
class FileFieldPathsRedirectTest extends FileFieldPathsTestBase {
protected static $modules = [
'filefield_paths_test',
'file_test',
'image',
'redirect',
'token',
];
protected $entityTypeManager;
protected function setUp() : void {
parent::setUp();
$this->entityTypeManager = $this->container
->get('entity_type.manager');
}
public function testUi() {
$field_name = mb_strtolower($this
->randomMachineName());
$this
->createFileField($field_name, 'node', $this->contentType);
$this
->drupalGet("admin/structure/types/manage/{$this->contentType}/fields/node.{$this->contentType}.{$field_name}");
$this
->assertSession()
->fieldExists('third_party_settings[filefield_paths][redirect]');
$element = $this
->xpath('//input[@name=:name]/@disabled', [
':name' => 'third_party_settings[filefield_paths][redirect]',
]);
$this
->assertEmpty($element, 'Redirect checkbox is not disabled.');
}
public function testRedirect() {
$public_path = PublicStream::basePath();
$source_dir = $this
->randomMachineName();
$field_name = mb_strtolower($this
->randomMachineName());
$third_party_settings['filefield_paths']['file_path']['value'] = $source_dir;
$this
->createFileField($field_name, 'node', $this->contentType, [], [], $third_party_settings);
$test_file = $this
->getTestFile('text');
$nid = $this
->uploadNodeFile($test_file, $field_name, $this->contentType);
$destination_dir = $this
->randomMachineName();
$edit = [
'third_party_settings[filefield_paths][file_path][value]' => $destination_dir,
'third_party_settings[filefield_paths][redirect]' => TRUE,
'third_party_settings[filefield_paths][retroactive_update]' => TRUE,
];
$this
->drupalGet("admin/structure/types/manage/{$this->contentType}/fields/node.{$this->contentType}.{$field_name}");
$this
->submitForm($edit, 'Save settings');
$this
->drupalGet("admin/structure/types/manage/{$this->contentType}/fields/node.{$this->contentType}.{$field_name}");
$expected_redirect_source = $public_path . '/' . $source_dir . '/text-0.txt';
$expected_redirect_destination = 'internal:/' . $public_path . '/' . $destination_dir . '/text-0.txt';
$redirects = redirect_repository()
->findBySourcePath($expected_redirect_source);
$redirect = reset($redirects);
$this
->assertSame($expected_redirect_destination, $redirect
->getRedirect()['uri'], 'Redirect created for relocated file.');
}
}