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 189

Class

DirectWriteTest
@covers \Drupal\package_manager\EventSubscriber\DirectWriteSubscriber @covers \Drupal\package_manager\SandboxManagerBase::isDirectWrite

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.