You are here

public function MenuTreeSerializationTitleTest::testUpdate in Drupal 8

Ensures that the system_update_8001() runs as expected.

File

core/modules/system/tests/src/Functional/Update/MenuTreeSerializationTitleTest.php, line 33

Class

MenuTreeSerializationTitleTest
Tests system_update_8001().

Namespace

Drupal\Tests\system\Functional\Update

Code

public function testUpdate() {
  $this
    ->runUpdates();

  // Ensure that some fields got dropped.
  $database = \Drupal::database();
  $schema = $database
    ->schema();
  if (!$schema
    ->tableExists('menu_tree')) {
    return;
  }
  $this
    ->assertFalse($schema
    ->fieldExists('menu_tree', 'title_arguments'));
  $this
    ->assertFalse($schema
    ->fieldExists('menu_tree', 'title_contexts'));

  // Ensure that all titles and description values can be unserialized.
  $select = $database
    ->select('menu_tree');
  $result = $select
    ->fields('menu_tree', [
    'id',
    'title',
    'description',
  ])
    ->execute()
    ->fetchAllAssoc('id');

  // The test coverage relies upon the fact that unserialize() would emit a
  // warning if the value is not a valid serialized value.
  foreach ($result as $link) {
    $title = unserialize($link->title);
    $description = unserialize($link->description);

    // Verify that all the links from system module have a been updated with
    // a TranslatableMarkup as title and description due to the rebuild.
    if (strpos($link->id, 'system.') === 0) {
      $this
        ->assertInstanceOf(TranslatableMarkup::class, $title);
      if ($description) {
        $this
          ->assertInstanceOf(TranslatableMarkup::class, $description);
      }
    }
  }
}