multiversion-8.x-1.0-beta34/tests/src/Functional/PathAliasTest.php
tests/src/Functional/PathAliasTest.php
<?php
namespace Drupal\Tests\multiversion\Functional;
use Drupal\multiversion\Entity\Workspace;
use Drupal\multiversion\Entity\WorkspaceType;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\user\Traits\UserCreationTrait;
/**
* @group multiversion
*/
class PathAliasTest extends BrowserTestBase {
use UserCreationTrait;
/**
* {@inheritdoc}
*/
protected static $modules = ['system', 'path', 'multiversion', 'key_value', 'serialization', 'user', 'node'];
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
if ($this->profile != 'standard') {
$this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
$this->drupalCreateContentType(['type' => 'page', 'name' => 'Page']);
}
// Create test user and log in.
$web_user = $this->drupalCreateUser(['administer url aliases', 'create url aliases', 'administer workspaces']);
$this->drupalLogin($web_user);
}
/**
* Test creating, loading, updating and deleting aliases.
*/
public function testPathAlias() {
/** @var \Drupal\Core\Path\AliasStorageInterface $alias_storage */
$alias_storage = \Drupal::service('path.alias_storage');
// Create a test workspace type.
WorkspaceType::create([
'id' => 'test',
'label' => 'Test',
])->save();
// Create a live (default) and stage workspace.
$live = Workspace::create([
'type' => 'test',
'machine_name' => 'live',
'label' => 'Live',
]);
$live->save();
$stage = Workspace::create([
'type' => 'test',
'machine_name' => 'stage',
'label' => 'Stage',
]);
$stage->save();
// Set live as the active workspace.
\Drupal::service('workspace.manager')->setActiveWorkspace($live);
$alias = '/foo';
$node1 = $this->drupalCreateNode();
$node1->get('path')->alias = $alias;
$node1->save();
$this->assertEquals($alias, $node1->get('path')->alias);
$stored_alias = $alias_storage->lookupPathAlias('/' . $node1->toUrl()->getInternalPath(), $node1->language()->getId());
$this->assertEquals($alias, $stored_alias);
// Set stage as the active workspace.
\Drupal::service('workspace.manager')->setActiveWorkspace($stage);
$stored_alias = $alias_storage->lookupPathAlias('/' . $node1->toUrl()->getInternalPath(), $node1->language()->getId());
$this->assertFalse($stored_alias);
// Create a new node on stage workspace with the same alias.
$node2 = $this->drupalCreateNode();
$node2->get('path')->alias = $alias;
$node2->save();
$this->assertEquals($alias, $node2->get('path')->alias);
$stored_alias = $alias_storage->lookupPathAlias('/' . $node2->toUrl()->getInternalPath(), $node2->language()->getId());
$this->assertEquals($alias, $stored_alias);
$this->drupalGet($alias);
$web_assert = $this->assertSession();
$web_assert->statusCodeEquals(200);
$web_assert->pageTextNotContains($node1->label());
$web_assert->pageTextContains($node2->label());
$this->drupalGet('admin/config/search/path');
$web_assert->statusCodeEquals(200);
$web_assert->pageTextNotContains('/node/' . $node1->id());
$web_assert->pageTextContains('/node/' . $node2->id());
// Set live as the active workspace.
\Drupal::service('workspace.manager')->setActiveWorkspace($live);
$this->drupalGet($alias);
$web_assert->statusCodeEquals(200);
$web_assert->pageTextNotContains($node2->label());
$web_assert->pageTextContains($node1->label());
$this->drupalGet('admin/config/search/path');
$web_assert->statusCodeEquals(200);
$web_assert->pageTextNotContains('/node/' . $node2->id());
$web_assert->pageTextContains('/node/' . $node1->id());
// Delete node1.
$node1->delete();
$this->drupalGet($alias);
$web_assert->statusCodeEquals(404);
$this->drupalGet('admin/config/search/path');
$web_assert->statusCodeEquals(200);
$web_assert->pageTextNotContains('/node/' . $node2->id());
$web_assert->pageTextNotContains('/node/' . $node1->id());
// Set stage as the active workspace.
\Drupal::service('workspace.manager')->setActiveWorkspace($stage);
$this->drupalGet($alias);
$web_assert = $this->assertSession();
$web_assert->statusCodeEquals(200);
$web_assert->pageTextNotContains($node1->label());
$web_assert->pageTextContains($node2->label());
$this->drupalGet('admin/config/search/path');
$web_assert->statusCodeEquals(200);
$web_assert->pageTextNotContains('/node/' . $node1->id());
$web_assert->pageTextContains('/node/' . $node2->id());
//Set a new alias for node2.
$alias2 = '/bar';
$node2->get('path')->alias = $alias2;
$node2->save();
$this->assertEquals($alias2, $node2->get('path')->alias);
$stored_alias = $alias_storage->lookupPathAlias('/' . $node2->toUrl()->getInternalPath(), $node2->language()->getId());
$this->assertEquals($alias2, $stored_alias);
$this->drupalGet('admin/config/search/path');
$web_assert->statusCodeEquals(200);
$web_assert->pageTextNotContains('/node/' . $node1->id());
$web_assert->pageTextContains('/node/' . $node2->id());
$web_assert->pageTextContains($alias2);
$session = $this->getSession();
$page = $session->getPage();
$page->clickLink('Delete');
$web_assert->pageTextContains('Are you sure you want to delete path alias ' . $alias2 . '?');
$page->pressButton('Confirm');
$this->drupalGet($alias2);
$web_assert = $this->assertSession();
$web_assert->statusCodeEquals(404);
$this->drupalGet('admin/config/search/path');
$web_assert->statusCodeEquals(200);
$web_assert->pageTextNotContains('/node/' . $node2->id());
$web_assert->pageTextNotContains('/node/' . $node1->id());
$stored_alias = $alias_storage->lookupPathAlias('/' . $node2->toUrl()->getInternalPath(), $node2->language()->getId());
$this->assertFalse($stored_alias);
// Set live as the active workspace.
\Drupal::service('workspace.manager')->setActiveWorkspace($live);
// Add an alias that should be accessible from all workspaces.
$alias3 = '/aliases';
$edit = [
'source' => '/admin/config/search/path',
'alias' => $alias3,
];
$this->drupalPostForm('admin/config/search/path/add', $edit, t('Save'));
$this->drupalGet('admin/config/search/path');
$web_assert->statusCodeEquals(200);
$web_assert->pageTextContains($alias3);
// Set stage as the active workspace.
\Drupal::service('workspace.manager')->setActiveWorkspace($stage);
$this->drupalGet('admin/config/search/path');
$web_assert->statusCodeEquals(200);
$web_assert->pageTextContains($alias3);
// Delete alias3.
$session = $this->getSession();
$page = $session->getPage();
$page->clickLink('Delete');
$web_assert->pageTextContains('Are you sure you want to delete path alias ' . $alias3 . '?');
$page->pressButton('Confirm');
$this->drupalGet('admin/config/search/path');
$web_assert->statusCodeEquals(200);
$web_assert->pageTextNotContains($alias3);
// Set live as the active workspace.
\Drupal::service('workspace.manager')->setActiveWorkspace($live);
$this->drupalGet('admin/config/search/path');
$web_assert->statusCodeEquals(200);
$web_assert->pageTextNotContains($alias3);
}
}
