function ViewsSaveProcessTest::testCacheRebuildMethods

Same name and namespace in other branches
  1. main core/modules/views/tests/src/Kernel/ViewsSaveProcessTest.php \Drupal\Tests\views\Kernel\ViewsSaveProcessTest::testCacheRebuildMethods()

Tests cache rebuilding and route rebuilding are not duplicated.

The test_views_save_process contains two block, page, and serialization displays.

File

core/modules/views/tests/src/Kernel/ViewsSaveProcessTest.php, line 61

Class

ViewsSaveProcessTest
Tests saving views and clearing.

Namespace

Drupal\Tests\views\Kernel

Code

public function testCacheRebuildMethods() : void {
  // Resave, this will trigger block cache clear once, but no route
  // rebuilding.
  $this->setCallExpectations(1, 0);
  $view = Views::getView('test_views_save_process');
  $view->save();
  // Updating a path should trigger route rebuild.
  $this->setCallExpectations(1, 1);
  $view = Views::getView('test_views_save_process');
  $view->initDisplay();
  $path = $this->randomMachineName();
  $view->displayHandlers
    ->get('page_1')
    ->overrideOption('path', $path);
  $view->setDisplay('page_1');
  $this->assertEquals($path, $view->getPath());
  $view->save();
  // Updating multiple paths should trigger route rebuild once only.
  $this->setCallExpectations(1, 1);
  $view = Views::getView('test_views_save_process');
  $view->initDisplay();
  $path = $this->randomMachineName();
  $view->displayHandlers
    ->get('page_1')
    ->overrideOption('path', $path);
  $view->setDisplay('page_1');
  $this->assertEquals($path, $view->getPath());
  $path = $this->randomMachineName();
  $view->displayHandlers
    ->get('page_2')
    ->overrideOption('path', $path);
  $view->setDisplay('page_2');
  $this->assertEquals($path, $view->getPath());
  $view->save();
  // Updating serialization format should trigger route rebuild.
  $this->setCallExpectations(1, 1);
  $view = Views::getView('test_views_save_process');
  $view->initDisplay();
  $style = $view->displayHandlers
    ->get('rest_export_1')
    ->getOption('style');
  $style['options']['formats'] = [
    'xml' => 'xml',
  ];
  $view->displayHandlers
    ->get('rest_export_1')
    ->overrideOption('style', $style);
  $view->setDisplay('rest_export_1');
  $view->save();
  // Updating multiple formats should trigger route rebuild once only.
  $this->setCallExpectations(1, 1);
  $view = Views::getView('test_views_save_process');
  $view->initDisplay();
  $style = $view->displayHandlers
    ->get('rest_export_1')
    ->getOption('style');
  $style['options']['formats'] = [
    'xml' => 'xml',
  ];
  $view->displayHandlers
    ->get('rest_export_1')
    ->overrideOption('style', $style);
  $view->setDisplay('rest_export_1');
  $style = $view->displayHandlers
    ->get('rest_export_2')
    ->getOption('style');
  $style['options']['formats'] = [
    'json' => 'json',
  ];
  $view->displayHandlers
    ->get('rest_export_2')
    ->overrideOption('style', $style);
  $view->setDisplay('rest_export_2');
  $view->save();
  // Updating multiple formats and paths should trigger route rebuild once
  // only.
  $this->setCallExpectations(1, 1);
  $view = Views::getView('test_views_save_process');
  $view->initDisplay();
  $style = $view->displayHandlers
    ->get('rest_export_1')
    ->getOption('style');
  $style['options']['formats'] = [
    'xml' => 'xml',
  ];
  $view->displayHandlers
    ->get('rest_export_1')
    ->overrideOption('style', $style);
  $view->setDisplay('rest_export_1');
  $style = $view->displayHandlers
    ->get('rest_export_2')
    ->getOption('style');
  $style['options']['formats'] = [
    'json' => 'json',
  ];
  $view->displayHandlers
    ->get('rest_export_2')
    ->overrideOption('style', $style);
  $view->setDisplay('rest_export_2');
  $path = $this->randomMachineName();
  $view->displayHandlers
    ->get('page_1')
    ->overrideOption('path', $path);
  $view->setDisplay('page_1');
  $path = $this->randomMachineName();
  $view->displayHandlers
    ->get('page_2')
    ->overrideOption('path', $path);
  $view->setDisplay('page_2');
  $view->save();
  // Updating the format to the existing format or path to the existing path
  // Should trigger no route rebuilding.
  $this->setCallExpectations(1, 0);
  $view = Views::getView('test_views_save_process');
  $view->initDisplay();
  $style = $view->displayHandlers
    ->get('rest_export_1')
    ->getOption('style');
  $style['options']['formats'] = [
    'xml' => 'xml',
  ];
  $view->displayHandlers
    ->get('rest_export_1')
    ->overrideOption('style', $style);
  $view->setDisplay('rest_export_1');
  $style = $view->displayHandlers
    ->get('rest_export_2')
    ->getOption('style');
  $style['options']['formats'] = [
    'json' => 'json',
  ];
  $view->displayHandlers
    ->get('rest_export_2')
    ->overrideOption('style', $style);
  $view->setDisplay('rest_export_2');
  $view->setDisplay('page_1');
  $view->displayHandlers
    ->get('page_1')
    ->overrideOption('path', $view->getPath());
  $view->setDisplay('page_2');
  $view->displayHandlers
    ->get('page_2')
    ->overrideOption('path', $view->getPath());
  $view->save();
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.