ComposerValidatorTest.php

Namespace

Drupal\Tests\package_manager\Kernel

File

core/modules/package_manager/tests/src/Kernel/ComposerValidatorTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\package_manager\Kernel;

use Drupal\fixture_manipulator\ActiveFixtureManipulator;
use Drupal\package_manager\Event\PreApplyEvent;
use Drupal\package_manager\Event\PreCreateEvent;
use Drupal\package_manager\ValidationResult;

/**
 * @covers \Drupal\package_manager\Validator\ComposerValidator
 * @group package_manager
 * @internal
 */
class ComposerValidatorTest extends PackageManagerKernelTestBase {
    
    /**
     * Data provider for testComposerSettingsValidation().
     *
     * @return mixed[][]
     *   The test cases.
     */
    public static function providerComposerSettingsValidation() : array {
        $summary = t("Composer settings don't satisfy Package Manager's requirements.");
        $secure_http_error = ValidationResult::createError([
            t('HTTPS must be enabled for Composer downloads. See <a href="https://getcomposer.org/doc/06-config.md#secure-http">the Composer documentation</a> for more information.'),
        ], $summary);
        $tls_error = ValidationResult::createError([
            t('TLS must be enabled for HTTPS Composer downloads. See <a href="https://getcomposer.org/doc/06-config.md#disable-tls">the Composer documentation</a> for more information.'),
            t('You should also check the value of <code>secure-http</code> and make sure that it is set to <code>true</code> or not set at all.'),
        ], $summary);
        return [
            'secure-http set to FALSE' => [
                [
                    'secure-http' => FALSE,
                ],
                [
                    $secure_http_error,
                ],
            ],
            'secure-http explicitly set to TRUE' => [
                [
                    'secure-http' => TRUE,
                ],
                [],
            ],
            'secure-http implicitly set to TRUE' => [
                [
                    'extra.unrelated' => TRUE,
                ],
                [],
            ],
            'disable-tls set to TRUE' => [
                [
                    'disable-tls' => TRUE,
                ],
                [
                    $tls_error,
                ],
            ],
            'disable-tls implicitly set to FALSE' => [
                [
                    'extra.unrelated' => TRUE,
                ],
                [],
            ],
            'explicitly set disable-tls to FALSE' => [
                [
                    'disable-tls' => FALSE,
                ],
                [],
            ],
            'disable-tls set to TRUE + secure-http set to TRUE, message only for TLS, secure-http overridden' => [
                [
                    'disable-tls' => TRUE,
                    'secure-http' => TRUE,
                ],
                [
                    $tls_error,
                ],
            ],
            'disable-tls set to TRUE + secure-http set to FALSE, message only for TLS' => [
                [
                    'disable-tls' => TRUE,
                    'secure-http' => FALSE,
                ],
                [
                    $tls_error,
                ],
            ],
        ];
    }
    
    /**
     * Tests that Composer's settings are validated.
     *
     * @param array $config
     *   The config to set.
     * @param \Drupal\package_manager\ValidationResult[] $expected_results
     *   The expected validation results, if any.
     *
     * @dataProvider providerComposerSettingsValidation
     */
    public function testComposerSettingsValidation(array $config, array $expected_results) : void {
        (new ActiveFixtureManipulator())->addConfig($config)
            ->commitChanges();
        $this->assertStatusCheckResults($expected_results);
        $this->assertResults($expected_results, PreCreateEvent::class);
    }
    
    /**
     * Tests that Composer's settings are validated during pre-apply.
     *
     * @param array $config
     *   The config to set.
     * @param \Drupal\package_manager\ValidationResult[] $expected_results
     *   The expected validation results, if any.
     *
     * @dataProvider providerComposerSettingsValidation
     */
    public function testComposerSettingsValidationDuringPreApply(array $config, array $expected_results) : void {
        $this->getStageFixtureManipulator()
            ->addConfig($config);
        $this->assertResults($expected_results, PreApplyEvent::class);
    }
    
    /**
     * Data provider for ::testLinkToOnlineHelp().
     *
     * @return array[]
     *   The test cases.
     */
    public static function providerLinkToOnlineHelp() : array {
        return [
            'TLS disabled' => [
                [
                    'disable-tls' => TRUE,
                ],
                [
                    t('TLS must be enabled for HTTPS Composer downloads. See <a href="/admin/help/package_manager#package-manager-requirements">the help page</a> for more information on how to configure Composer to download packages securely.'),
                    t('You should also check the value of <code>secure-http</code> and make sure that it is set to <code>true</code> or not set at all.'),
                ],
            ],
            'secure-http is off' => [
                [
                    'secure-http' => FALSE,
                ],
                [
                    t('HTTPS must be enabled for Composer downloads. See <a href="/admin/help/package_manager#package-manager-requirements">the help page</a> for more information on how to configure Composer to download packages securely.'),
                ],
            ],
        ];
    }
    
    /**
     * Tests that invalid configuration links to online help, if available.
     *
     * @param array $config
     *   The Composer configuration to set.
     * @param \Drupal\Core\StringTranslation\TranslatableMarkup[] $expected_messages
     *   The expected validation error messages.
     *
     * @dataProvider providerLinkToOnlineHelp
     */
    public function testLinkToOnlineHelp(array $config, array $expected_messages) : void {
        $this->enableModules([
            'help',
        ]);
        (new ActiveFixtureManipulator())->addConfig($config)
            ->commitChanges();
        $result = ValidationResult::createError($expected_messages, t("Composer settings don't satisfy Package Manager's requirements."));
        $this->assertStatusCheckResults([
            $result,
        ]);
    }
    
    /**
     * {@inheritdoc}
     */
    protected function tearDown() : void {
        // Ensure that any warnings arising from Composer settings (which we expect
        // in this test) will not fail the test during tear-down.
        $this->failureLogger
            ->reset();
        parent::tearDown();
    }

}

Classes

Title Deprecated Summary
ComposerValidatorTest @covers \Drupal\package_manager\Validator\ComposerValidator @group package_manager @internal

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