function DirectWriteTest::testMaintenanceModeNotEnteredIfErrorOnPreRequire

Tests that pre-require errors prevent maintenance mode during direct-write.

File

core/modules/package_manager/tests/src/Kernel/DirectWriteTest.php, line 191

Class

DirectWriteTest
@covers \Drupal\package_manager\EventSubscriber\DirectWriteSubscriber[[api-linebreak]] @covers \Drupal\package_manager\SandboxManagerBase::isDirectWrite[[api-linebreak]] @covers \Drupal\package_manager\DirectWritePreconditionBypass[[api-linebreak]]

Namespace

Drupal\Tests\package_manager\Kernel

Code

public function testMaintenanceModeNotEnteredIfErrorOnPreRequire() : void {
  $this->setSetting('package_manager_allow_direct_write', TRUE);
  // Sanity check: we shouldn't be in maintenance mode to begin with.
  $state = $this->container
    ->get(StateInterface::class);
  $this->assertEmpty($state->get('system.maintenance_mode'));
  // Set up an event subscriber which will flag an error.
  $this->container
    ->get(EventDispatcherInterface::class)
    ->addListener(PreRequireEvent::class, function (PreRequireEvent $event) : void {
    $event->addError([
      $this->t('Maintenance mode should not happen.'),
    ]);
  });
  $sandbox_manager = $this->createStage(TestDirectWriteSandboxManager::class);
  $sandbox_manager->create();
  try {
    $sandbox_manager->require([
      'ext-json:*',
    ]);
    $this->fail('Expected an exception to be thrown on pre-require.');
  } catch (SandboxEventException $e) {
    $this->assertSame("Maintenance mode should not happen.\n", $e->getMessage());
    // We should never have entered maintenance mode.
    $this->assertFalse($this->preRequireMaintenanceMode);
    // Sanity check: the post-require event should never have been dispatched.
    $this->assertNull($this->postRequireMaintenanceMode);
  }
}

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