View source
<?php
namespace Drupal\Tests\menu_link_content\Functional\Update;
use Drupal\Core\Database\Database;
use Drupal\FunctionalTests\Update\UpdatePathTestBase;
use Drupal\user\Entity\User;
class MenuLinkContentUpdateTest extends UpdatePathTestBase {
protected function setDatabaseDumpFiles() {
$this->databaseDumpFiles = [
__DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz',
__DIR__ . '/../../../fixtures/update/drupal-8.menu-link-content-null-data-3056543.php',
];
}
public function testPublishedEntityKeyAddition() {
$this
->runUpdates();
$account = User::load(1);
$account->passRaw = 'drupal';
$this
->drupalLogin($account);
$assert_session = $this
->assertSession();
$this
->drupalGet('admin/structure/menu/item/1/edit');
$assert_session
->checkboxChecked('edit-enabled-value');
$storage = \Drupal::entityTypeManager()
->getStorage('menu_link_content');
$menu_link = $storage
->create([
'menu_name' => 'main',
'link' => 'route:user.page',
'title' => 'Pineapple',
]);
$menu_link
->save();
$menu_link = $storage
->loadUnchanged($menu_link
->id());
$this
->assertEquals('main', $menu_link
->getMenuName());
$this
->assertEquals('Pineapple', $menu_link
->label());
$this
->assertEquals('route:user.page', $menu_link->link->uri);
$this
->assertTrue($menu_link
->isPublished());
}
public function testConversionToRevisionable() {
$entity_type = \Drupal::entityDefinitionUpdateManager()
->getEntityType('menu_link_content');
$this
->assertFalse($entity_type
->isRevisionable());
drupal_rewrite_settings([
'settings' => [
'update_sql_batch_size' => (object) [
'value' => 1,
'required' => TRUE,
],
],
]);
$this
->assertMenuLinkTitle(997, '');
$this
->assertMenuLinkTitle(998, '');
$this
->assertMenuLinkTitle(999, 'menu_link_999-es');
$this
->runUpdates();
$this
->assertSession()
->pageTextContains('Custom menu links have been converted to be revisionable. 2 menu links with data integrity issues were restored. More details have been logged.');
$entity_type = \Drupal::entityDefinitionUpdateManager()
->getEntityType('menu_link_content');
$this
->assertTrue($entity_type
->isRevisionable());
$account = User::load(1);
$account->passRaw = 'drupal';
$this
->drupalLogin($account);
$assert_session = $this
->assertSession();
$this
->drupalGet('admin/structure/menu/item/1/edit');
$assert_session
->checkboxChecked('edit-enabled-value');
$storage = \Drupal::entityTypeManager()
->getStorage('menu_link_content');
$menu_link = $storage
->create([
'menu_name' => 'main',
'link' => 'route:user.page',
'title' => 'Pineapple',
]);
$menu_link
->save();
$storage
->resetCache();
$menu_link = $storage
->loadRevision($menu_link
->getRevisionId());
$this
->assertEquals('main', $menu_link
->getMenuName());
$this
->assertEquals('Pineapple', $menu_link
->label());
$this
->assertEquals('route:user.page', $menu_link->link->uri);
$this
->assertTrue($menu_link
->isPublished());
$this
->assertMenuLinkTitle(997, 'menu_link_997');
$this
->assertMenuLinkTitle(998, 'menu_link_998');
$this
->assertMenuLinkTitle(999, 'menu_link_999-es');
}
protected function assertMenuLinkTitle($id, $expected_title) {
$database = \Drupal::database();
$query = $database
->select('menu_link_content_data', 'd');
$query
->join('menu_link_content', 'b', 'b.id = d.id AND d.default_langcode = 1');
$title = $query
->fields('d', [
'title',
])
->condition('d.id', $id)
->execute()
->fetchField();
$this
->assertSame($expected_title, $title ?: '');
}
public function testMissingDataUpdateRequirementsCheck() {
Database::getConnection()
->insert('menu_link_content')
->fields([
'id' => '3',
'bundle' => 'menu_link_content',
'uuid' => '15396f85-3c11-4f52-81af-44d2cb5e829f',
'langcode' => 'en',
])
->execute();
$this
->writeSettings([
'settings' => [
'update_free_access' => (object) [
'value' => TRUE,
'required' => TRUE,
],
],
]);
$this
->drupalGet($this->updateUrl);
$this
->assertSession()
->pageTextContains('Errors found');
$this
->assertSession()
->elementTextContains('css', '.system-status-report__entry--error', 'The make_menu_link_content_revisionable database update cannot be run until the data has been fixed.');
}
protected function replaceUser1() {
}
}