redirect.test 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. /**
  3. * @file
  4. * Redirect module tests for the File (Field) Paths module.
  5. */
  6. /**
  7. * Class FileFieldPathsRedirectTestCase
  8. */
  9. class FileFieldPathsRedirectTestCase extends FileFieldPathsTestCase {
  10. /**
  11. * @inheritdoc
  12. */
  13. function setUp() {
  14. // Setup required modules.
  15. parent::setUp(array('redirect'));
  16. }
  17. /**
  18. * @inheritdoc
  19. */
  20. public static function getInfo() {
  21. return array(
  22. 'name' => 'Redirect module integration',
  23. 'description' => 'Test redirect module integration.',
  24. 'group' => 'File (Field) Paths',
  25. );
  26. }
  27. /**
  28. * Test File (Field) Paths Redirect UI.
  29. */
  30. public function testUI() {
  31. // Create a File field.
  32. $field_name = drupal_strtolower($this->randomName());
  33. $this->createFileField($field_name, $this->content_type);
  34. // Ensure File (Field) Paths Pathauto settings are present and available.
  35. $this->drupalGet("admin/structure/types/manage/{$this->content_type}/fields/{$field_name}");
  36. $this->assertField('instance[settings][filefield_paths][redirect]', t('Redirect checkbox is present in File (Field) Path settings.'));
  37. $element = $this->xpath('//input[@name=:name]/@disabled', array(':name' => 'instance[settings][filefield_paths][redirect]'));
  38. $this->assert(empty($element), t('Redirect checkbox is not disabled.'));
  39. }
  40. /**
  41. * Test File (Field) Paths Redirect functionality.
  42. */
  43. public function testRedirect() {
  44. global $base_path;
  45. $langcode = LANGUAGE_NONE;
  46. // Create a File field with a random File path.
  47. $field_name = drupal_strtolower($this->randomName());
  48. $instance_settings['filefield_paths']['file_path']['value'] = $this->randomName();
  49. $this->createFileField($field_name, $this->content_type, array(), $instance_settings);
  50. // Create a node with a test file.
  51. $test_file = $this->getTestFile('text');
  52. $nid = $this->uploadNodeFile($test_file, $field_name, $this->content_type);
  53. // Get processed source file uri.
  54. $node = node_load($nid, NULL, TRUE);
  55. $source = $node->{$field_name}[$langcode][0]['uri'];
  56. // Update file path and create redirect.
  57. $edit = array(
  58. 'instance[settings][filefield_paths][file_path][value]' => $this->randomName(),
  59. 'instance[settings][filefield_paths][redirect]' => TRUE,
  60. 'instance[settings][filefield_paths][retroactive_update]' => TRUE,
  61. );
  62. $this->drupalPost("admin/structure/types/manage/{$this->content_type}/fields/{$field_name}", $edit, t('Save settings'));
  63. // Get processed destination file uri.
  64. $node = node_load($nid, NULL, TRUE);
  65. $destination = $node->{$field_name}[$langcode][0]['uri'];
  66. // Ensure that the source uri redirects to the destination uri.
  67. $parsed_source = parse_url(file_create_url($source), PHP_URL_PATH);
  68. $redirect_source = drupal_substr(urldecode($parsed_source), drupal_strlen($base_path));
  69. $parsed_destination = parse_url(file_create_url($destination), PHP_URL_PATH);
  70. $redirect_destination = drupal_substr(urldecode($parsed_destination), drupal_strlen($base_path));
  71. $redirect = redirect_load_by_source($redirect_source);
  72. $this->assert(is_object($redirect) && $redirect->redirect == $redirect_destination, t('Redirect created for relocated file.'));
  73. }
  74. }