123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- <?php
- namespace Drupal\redirect_404\Tests;
- use Drupal\Component\Utility\UrlHelper;
- use Drupal\Core\Url;
- /**
- * UI tests for redirect_404 module.
- *
- * @group redirect_404
- */
- class Fix404RedirectUITest extends Redirect404TestBase {
- /**
- * Tests the fix 404 pages workflow.
- */
- public function testFix404Pages() {
- // Visit a non existing page to have the 404 redirect_error entry.
- $this->drupalGet('non-existing0');
- // Go to the "fix 404" page and check the listing.
- $this->drupalGet('admin/config/search/redirect/404');
- $this->assertText('non-existing0');
- $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();
- $expected_query = [
- 'destination' => $destination,
- 'language' => 'en',
- 'source' => 'non-existing0',
- ];
- $parsed_url = UrlHelper::parse($this->getUrl());
- $this->assertEqual(Url::fromRoute('redirect.add')->setAbsolute()->toString(), $parsed_url['path']);
- $this->assertEqual($expected_query, $parsed_url['query']);
- $this->assertFieldByName('redirect_source[0][path]', 'non-existing0');
- // 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->drupalGet('non-existing0');
- $this->assertUrl('node');
- // Test removing a redirect assignment, visit again the non existing page.
- $this->drupalGet('admin/config/search/redirect');
- $this->assertText('non-existing0');
- $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('non-existing0');
- $this->drupalGet('admin/config/search/redirect/404');
- $this->assertText('non-existing0');
- // Visit multiple non existing pages to test the Redirect 404 View.
- $this->drupalGet('non-existing0?test=1');
- $this->drupalGet('non-existing0?test=2');
- $this->drupalGet('non-existing1');
- $this->drupalGet('non-existing2');
- $this->drupalGet('admin/config/search/redirect/404');
- $this->assertText('non-existing0?test=1');
- $this->assertText('non-existing0?test=2');
- $this->assertText('non-existing0');
- $this->assertText('non-existing1');
- $this->assertText('non-existing2');
- // Test the Path view filter.
- $this->drupalGet('admin/config/search/redirect/404', ['query' => ['path' => 'test=']]);
- $this->assertText('non-existing0?test=1');
- $this->assertText('non-existing0?test=2');
- $this->assertNoText('non-existing1');
- $this->assertNoText('non-existing2');
- $this->drupalGet('admin/config/search/redirect/404', ['query' => ['path' => 'existing1']]);
- $this->assertNoText('non-existing0?test=1');
- $this->assertNoText('non-existing0?test=2');
- $this->assertNoText('non-existing0');
- $this->assertText('non-existing1');
- $this->assertNoText('non-existing2');
- $this->drupalGet('admin/config/search/redirect/404');
- $this->assertText('non-existing0?test=1');
- $this->assertText('non-existing0?test=2');
- $this->assertText('non-existing0');
- $this->assertText('non-existing1');
- $this->assertText('non-existing2');
- $this->drupalGet('admin/config/search/redirect/404', ['query' => ['path' => 'g2']]);
- $this->assertNoText('non-existing0?test=1');
- $this->assertNoText('non-existing0?test=2');
- $this->assertNoText('non-existing0');
- $this->assertNoText('non-existing1');
- $this->assertText('non-existing2');
- // Assign a redirect to 'non-existing2'.
- $this->clickLink('Add redirect');
- $expected_query = [
- 'source' => 'non-existing2',
- 'language' => 'en',
- 'destination' => $destination,
- ];
- $parsed_url = UrlHelper::parse($this->getUrl());
- $this->assertEqual(Url::fromRoute('redirect.add')->setAbsolute()->toString(), $parsed_url['path']);
- $this->assertEqual($expected_query, $parsed_url['query']);
- $this->assertFieldByName('redirect_source[0][path]', 'non-existing2');
- $this->drupalPostForm(NULL, $edit, t('Save'));
- $this->assertUrl('admin/config/search/redirect/404');
- $this->assertText('non-existing0?test=1');
- $this->assertText('non-existing0?test=2');
- $this->assertText('non-existing0');
- $this->assertText('non-existing1');
- $this->assertNoText('non-existing2');
- // Check if the redirect works as expected.
- $this->drupalGet('admin/config/search/redirect');
- $this->assertText('non-existing2');
- }
- /**
- * Tests the redirect ignore pages.
- */
- public function testIgnorePages() {
- // Create two nodes.
- $node1 = $this->drupalCreateNode(['type' => 'page']);
- $node2 = $this->drupalCreateNode(['type' => 'page']);
- // Set some pages to be ignored just for the test.
- $node_to_ignore = '/node/' . $node1->id() . '/test';
- $terms_to_ignore = '/term/*';
- $pages = $node_to_ignore . "\r\n" . $terms_to_ignore;
- \Drupal::configFactory()
- ->getEditable('redirect_404.settings')
- ->set('pages', $pages)
- ->save();
- // Visit ignored or non existing pages.
- $this->drupalGet('node/' . $node1->id() . '/test');
- $this->drupalGet('term/foo');
- $this->drupalGet('term/1');
- // Go to the "fix 404" page and check there are no 404 entries.
- $this->drupalGet('admin/config/search/redirect/404');
- $this->assertNoText('node/' . $node1->id() . '/test');
- $this->assertNoText('term/foo');
- $this->assertNoText('term/1');
- // Visit non existing but 'unignored' page.
- $this->drupalGet('node/' . $node2->id() . '/test');
- // Go to the "fix 404" page and check there is a 404 entry.
- $this->drupalGet('admin/config/search/redirect/404');
- $this->assertText('node/' . $node2->id() . '/test');
- // Add this 404 entry to the 'ignore path' list, assert it works properly.
- $path_to_ignore = '/node/' . $node2->id() . '/test';
- $destination = '&destination=admin/config/search/redirect/404';
- $this->clickLink('Ignore');
- $this->assertUrl('admin/config/search/redirect/settings?ignore=' . $path_to_ignore . $destination);
- $this->assertText('Resolved the path ' . $path_to_ignore . ' in the database. Please check the ignored list and save the settings.');
- $xpath = $this->xpath('//*[@id="edit-ignore-pages"]')[0]->asXML();
- $this->assertTrue(strpos($xpath, $node_to_ignore), $node_to_ignore . " in 'Path to ignore' found");
- $this->assertTrue(strpos($xpath, $terms_to_ignore), $terms_to_ignore . " in 'Path to ignore' found");
- $this->assertTrue(strpos($xpath, $path_to_ignore), $path_to_ignore . " in 'Path to ignore' found");
- // Save the path with wildcard, but omitting the leading slash.
- $nodes_to_ignore = 'node/*';
- $edit = ['ignore_pages' => $nodes_to_ignore . "\r\n" . $terms_to_ignore];
- $this->drupalPostForm(NULL, $edit, 'Save configuration');
- // Should redirect to 'Fix 404'. Check the 404 entry is not shown anymore.
- $this->assertUrl('admin/config/search/redirect/404');
- $this->assertText('Configuration was saved.');
- $this->assertNoText('node/' . $node2->id() . '/test');
- $this->assertText('There are no 404 errors to fix.');
- // Go back to the settings to check the 'Path to ignore' configurations.
- $this->drupalGet('admin/config/search/redirect/settings');
- $xpath = $this->xpath('//*[@id="edit-ignore-pages"]')[0]->asXML();
- // Check that the new page to ignore has been saved with leading slash.
- $this->assertTrue(strpos($xpath, '/' . $nodes_to_ignore), '/' . $nodes_to_ignore . " in 'Path to ignore' found");
- $this->assertTrue(strpos($xpath, $terms_to_ignore), $terms_to_ignore . " in 'Path to ignore' found");
- $this->assertFalse(strpos($xpath, $node_to_ignore), $node_to_ignore . " in 'Path to ignore' found");
- $this->assertFalse(strpos($xpath, $path_to_ignore), $path_to_ignore . " in 'Path to ignore' found");
- }
- }
|