Version 1
[yaffs-website] / web / modules / contrib / redirect / modules / redirect_404 / src / Tests / Fix404RedirectUILanguageTest.php
diff --git a/web/modules/contrib/redirect/modules/redirect_404/src/Tests/Fix404RedirectUILanguageTest.php b/web/modules/contrib/redirect/modules/redirect_404/src/Tests/Fix404RedirectUILanguageTest.php
new file mode 100644 (file)
index 0000000..31114d0
--- /dev/null
@@ -0,0 +1,203 @@
+<?php
+
+namespace Drupal\redirect_404\Tests;
+
+use Drupal\Core\Language\LanguageInterface;
+use Drupal\Core\Url;
+use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\redirect\Tests\AssertRedirectTrait;
+
+/**
+ * UI tests for redirect_404 module with language and content translation.
+ *
+ * This runs the exact same tests as Fix404RedirectUITest, but with both
+ * language and content translation modules enabled.
+ *
+ * @group redirect_404
+ */
+class Fix404RedirectUILanguageTest extends Redirect404TestBase {
+
+  use AssertRedirectTrait;
+
+  /**
+   * Additional modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['language'];
+
+  /**
+   * Admin user's permissions for this test.
+   *
+   * @var array
+   */
+  protected $adminPermissions = [
+    'administer redirects',
+    'administer redirect settings',
+    'access site reports',
+    'access content',
+    'bypass node access',
+    'create url aliases',
+    'administer url aliases',
+    'administer languages',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+
+    // Enable some languages for this test.
+    $language = ConfigurableLanguage::createFromLangcode('de');
+    $language->save();
+    $language = ConfigurableLanguage::createFromLangcode('es');
+    $language->save();
+    $language = ConfigurableLanguage::createFromLangcode('fr');
+    $language->save();
+  }
+
+  /**
+   * Tests the fix 404 pages workflow with language and content translation.
+   */
+  public function testFix404RedirectList() {
+    // Visit a non existing page to have the 404 redirect_error entry.
+    $this->drupalGet('fr/testing');
+
+    $redirect = \Drupal::database()->select('redirect_404')
+      ->fields('redirect_404')
+      ->condition('path', '/testing')
+      ->execute()
+      ->fetchAll();
+    if (count($redirect) == 0) {
+      $this->fail('No record was added');
+    }
+
+    // Go to the "fix 404" page and check the listing.
+    $this->drupalGet('admin/config/search/redirect/404');
+    $this->assertText('testing');
+    $this->assertLanguageInTableBody('French');
+    // Check the Language view filter uses the default language filter.
+    $this->assertOption('edit-langcode', 'All');
+    $this->assertOption('edit-langcode', 'en');
+    $this->assertOption('edit-langcode', 'de');
+    $this->assertOption('edit-langcode', 'es');
+    $this->assertOption('edit-langcode', 'fr');
+    $this->assertOption('edit-langcode', LanguageInterface::LANGCODE_NOT_SPECIFIED);
+    $this->clickLink(t('Add redirect'));
+
+    // Check if we generate correct Add redirect url and if the form is
+    // pre-filled.
+    $destination = Url::fromRoute('redirect_404.fix_404')->getInternalPath();
+    $options = [
+      'query' => [
+        'source' => 'testing',
+        'language' => 'fr',
+        'destination' => $destination,
+      ]
+    ];
+    $this->assertUrl('admin/config/search/redirect/add', $options);
+    $this->assertFieldByName('redirect_source[0][path]', 'testing');
+    $this->assertOptionSelected('edit-language-0-value', 'fr');
+    // Save the redirect.
+    $edit = ['redirect_redirect[0][uri]' => '/node'];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+    $this->assertUrl('admin/config/search/redirect/404');
+    $this->assertText('There are no 404 errors to fix.');
+    // Check if the redirect works as expected.
+    $this->assertRedirect('fr/testing', 'fr/node', 'HTTP/1.1 301 Moved Permanently');
+
+    // Test removing a redirect assignment, visit again the non existing page.
+    $this->drupalGet('admin/config/search/redirect');
+    $this->assertText('testing');
+    $this->assertLanguageInTableBody('French');
+    $this->clickLink('Delete', 0);
+    $this->drupalPostForm(NULL, [], 'Delete');
+    $this->assertUrl('admin/config/search/redirect');
+    $this->assertText('There is no redirect yet.');
+    $this->drupalGet('admin/config/search/redirect/404');
+    $this->assertText('There are no 404 errors to fix.');
+    // Should be listed again in the 404 overview.
+    $this->drupalGet('fr/testing');
+    $this->drupalGet('admin/config/search/redirect/404');
+    $this->assertLanguageInTableBody('French');
+    // Check the error path visit count.
+    $this->assertFieldByXPath('//table/tbody/tr/td[2]', 2);
+    $this->clickLink('Add redirect');
+    // Save the redirect with a different langcode.
+    $this->assertFieldByName('redirect_source[0][path]', 'testing');
+    $this->assertOptionSelected('edit-language-0-value', 'fr');
+    $edit['language[0][value]'] = 'es';
+    $this->drupalPostForm(NULL, $edit, 'Save');
+    $this->assertUrl('admin/config/search/redirect/404');
+    // Should still be listed, redirecting to another language does not resolve
+    // the path.
+    $this->assertLanguageInTableBody('French');
+    $this->drupalGet('admin/config/search/redirect');
+    $this->assertLanguageInTableBody('Spanish');
+    // Check if the redirect works as expected.
+    $this->assertRedirect('es/testing', 'es/node', 'HTTP/1.1 301 Moved Permanently');
+
+    // Visit multiple non existing pages to test the Redirect 404 View.
+    $this->drupalGet('testing1');
+    $this->drupalGet('de/testing2');
+    $this->drupalGet('de/testing2?test=1');
+    $this->drupalGet('de/testing2?test=2');
+    $this->drupalGet('admin/config/search/redirect/404');
+    $this->assertLanguageInTableBody('French');
+    $this->assertLanguageInTableBody('English');
+    $this->assertLanguageInTableBody('German');
+    $this->assertText('testing1');
+    $this->assertText('testing2');
+    $this->assertText('testing2?test=1');
+    $this->assertText('testing2?test=2');
+
+    // Test the Language view filter.
+    $this->drupalGet('admin/config/search/redirect/404', ['query' => ['langcode' => 'de']]);
+    $this->assertText('English');
+    $this->assertNoLanguageInTableBody('English');
+    $this->assertLanguageInTableBody('German');
+    $this->assertNoText('testing1');
+    $this->assertText('testing2');
+    $this->assertText('testing2?test=1');
+    $this->assertText('testing2?test=2');
+    $this->drupalGet('admin/config/search/redirect/404');
+    $this->assertLanguageInTableBody('English');
+    $this->assertLanguageInTableBody('German');
+    $this->assertText('testing1');
+    $this->assertText('testing2');
+    $this->assertText('testing2?test=1');
+    $this->assertText('testing2?test=2');
+    $this->drupalGet('admin/config/search/redirect/404', ['query' => ['langcode' => 'en']]);
+    $this->assertLanguageInTableBody('English');
+    $this->assertNoLanguageInTableBody('German');
+    $this->assertText('testing1');
+    $this->assertNoText('testing2');
+    $this->assertNoText('testing2?test=1');
+    $this->assertNoText('testing2?test=2');
+
+    // Assign a redirect to 'testing1'.
+    $this->clickLink('Add redirect');
+    $options = [
+      'query' => [
+        'source' => 'testing1',
+        'language' => 'en',
+        'destination' => $destination,
+      ]
+    ];
+    $this->assertUrl('admin/config/search/redirect/add', $options);
+    $this->assertFieldByName('redirect_source[0][path]', 'testing1');
+    $this->assertOptionSelected('edit-language-0-value', 'en');
+    $edit = ['redirect_redirect[0][uri]' => '/node'];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+    $this->assertUrl('admin/config/search/redirect/404');
+    $this->assertNoLanguageInTableBody('English');
+    $this->assertLanguageInTableBody('German');
+    $this->drupalGet('admin/config/search/redirect');
+    $this->assertLanguageInTableBody('Spanish');
+    $this->assertLanguageInTableBody('English');
+    // Check if the redirect works as expected.
+    $this->assertRedirect('/testing1', '/node', 'HTTP/1.1 301 Moved Permanently');
+  }
+
+}