hn-8.x-1.x-dev/tests/src/Functional/HnPathsTest.php
tests/src/Functional/HnPathsTest.php
<?php namespace Drupal\Tests\hn\Functional; use Drupal\redirect\Entity\Redirect; /** * Provides some basic tests with permissions of the HN module. * * @group hn */ class HnPathsTest extends HnFunctionalTestBase { public static $modules = [ 'hn_test', ]; /** * Test a path alias. */ public function testPathAlias() { /** @var \Drupal\Core\Path\AliasStorageInterface $alias_storage */ $alias_storage = \Drupal::service('path.alias_storage'); $alias_storage->save('/node/1', '/test'); $response = $this->getHnJsonResponse('/test'); $this->assertFalse(empty($response['paths'][base_path() . 'test'])); $response = $this->getHnJsonResponse('/node/1'); $this->assertFalse(empty($response['paths'][base_path() . 'test'])); } /** * Test if redirects are handled correctly. */ public function testRedirect() { // Set up two redirects: // - test-1 ==> node/1 // - test-2 ==> node/2 ==> node-2 (redirect + alias) Redirect::create([ 'redirect_source' => 'test-1', 'redirect_redirect' => 'internal:/node/1', 'language' => 'und', 'status_code' => '301', ])->save(); Redirect::create([ 'redirect_source' => 'test-2', 'redirect_redirect' => 'internal:/node/2', 'language' => 'und', 'status_code' => '301', ])->save(); /** @var \Drupal\Core\Path\AliasStorageInterface $alias_storage */ $alias_storage = \Drupal::service('path.alias_storage'); $alias_storage->save('/node/2', '/node-2'); // Test both redirects, with and without a / in front. foreach ([1 => base_path() . 'node/1', 2 => base_path() . 'node-2'] as $testNr => $pathResult) { foreach ([TRUE, FALSE] as $withSlashBeforePath) { $path = ($withSlashBeforePath ? '/' : '') . 'test-' . $testNr; $response = $this->getHnJsonResponse($path); $this->assertNotEmpty($response['paths'][$path]); $this->assertEquals($response['paths'][$path], $response['paths'][$pathResult]); $nodeResponse = $response['data'][$response['paths'][$path]]; $this->assertEquals($nodeResponse['__hn']['url'], $pathResult); $this->assertEquals(301, $nodeResponse['__hn']['status']); $this->assertEquals(hn_test_node_base($testNr)['title'], $nodeResponse['title']); } } } /** * Test the response of a 404 page. */ public function test404() { $path = '/this-path-does-not-exist'; // First, test without setting a 404 page. See issue #2930544. $response = $this->getHnResponse($path); $this->assertContains('The 404 page can't be loaded.', $response); // Set /node/1 as 404 page. \Drupal::configFactory()->getEditable('system.site')->set('page.404', '/node/1')->save(); $pathResult = base_path() . 'node/1'; $response = $this->getHnJsonResponse($path); $this->assertNotEmpty($response['paths'][$path]); $this->assertEquals($response['paths'][$path], $response['paths'][$pathResult]); $nodeResponse = $response['data'][$response['paths'][$path]]; $this->assertEquals($nodeResponse['__hn']['url'], $pathResult); $this->assertEquals(404, $nodeResponse['__hn']['status']); $this->assertEquals(hn_test_node_base(1)['title'], $nodeResponse['title']); } }