class VendorHardeningPluginTest

Same name in other branches
  1. 8.9.x core/tests/Drupal/Tests/Composer/Plugin/VendorHardening/VendorHardeningPluginTest.php \Drupal\Tests\Composer\Plugin\VendorHardening\VendorHardeningPluginTest
  2. 10 core/tests/Drupal/Tests/Composer/Plugin/VendorHardening/VendorHardeningPluginTest.php \Drupal\Tests\Composer\Plugin\VendorHardening\VendorHardeningPluginTest
  3. 11.x core/tests/Drupal/Tests/Composer/Plugin/VendorHardening/VendorHardeningPluginTest.php \Drupal\Tests\Composer\Plugin\VendorHardening\VendorHardeningPluginTest

@coversDefaultClass \Drupal\Composer\Plugin\VendorHardening\VendorHardeningPlugin @group VendorHardening

Hierarchy

Expanded class hierarchy of VendorHardeningPluginTest

File

core/tests/Drupal/Tests/Composer/Plugin/VendorHardening/VendorHardeningPluginTest.php, line 20

Namespace

Drupal\Tests\Composer\Plugin\VendorHardening
View source
class VendorHardeningPluginTest extends TestCase {
    use PhpUnitWarnings;
    use PhpUnitCompatibilityTrait;
    
    /**
     * {@inheritdoc}
     */
    public function setUp() : void {
        parent::setUp();
        vfsStream::setup('vendor', NULL, [
            'drupal' => [
                'package' => [
                    'tests' => [
                        'SomeTest.php' => '<?php',
                    ],
                ],
            ],
        ]);
    }
    
    /**
     * @covers ::cleanPackage
     */
    public function testCleanPackage() {
        $config = $this->getMockBuilder(Config::class)
            ->disableOriginalConstructor()
            ->getMock();
        $config->expects($this->once())
            ->method('getPathsForPackage')
            ->willReturn([
            'tests',
        ]);
        $plugin = $this->getMockBuilder(VendorHardeningPlugin::class)
            ->onlyMethods([
            'getInstallPathForPackage',
        ])
            ->getMock();
        $plugin->expects($this->once())
            ->method('getInstallPathForPackage')
            ->willReturn(vfsStream::url('vendor/drupal/package'));
        $ref_config = new \ReflectionProperty($plugin, 'config');
        $ref_config->setAccessible(TRUE);
        $ref_config->setValue($plugin, $config);
        $io = $this->prophesize(IOInterface::class);
        $ref_io = new \ReflectionProperty($plugin, 'io');
        $ref_io->setAccessible(TRUE);
        $ref_io->setValue($plugin, $io->reveal());
        $this->assertFileExists(vfsStream::url('vendor/drupal/package/tests/SomeTest.php'));
        $package = $this->prophesize(PackageInterface::class);
        $package->getName()
            ->willReturn('drupal/package');
        $plugin->cleanPackage($package->reveal());
        $this->assertFileDoesNotExist(vfsStream::url('vendor/drupal/package/tests'));
    }
    
    /**
     * @covers ::cleanPathsForPackage
     */
    public function testCleanPathsForPackage() {
        $plugin = $this->getMockBuilder(VendorHardeningPlugin::class)
            ->onlyMethods([
            'getInstallPathForPackage',
        ])
            ->getMock();
        $plugin->expects($this->once())
            ->method('getInstallPathForPackage')
            ->willReturn(vfsStream::url('vendor/drupal/package'));
        $io = $this->prophesize(IOInterface::class);
        $ref_io = new \ReflectionProperty($plugin, 'io');
        $ref_io->setAccessible(TRUE);
        $ref_io->setValue($plugin, $io->reveal());
        $this->assertFileExists(vfsStream::url('vendor/drupal/package/tests/SomeTest.php'));
        $package = $this->prophesize(PackageInterface::class);
        $package->getName()
            ->willReturn('drupal/package');
        $ref_clean = new \ReflectionMethod($plugin, 'cleanPathsForPackage');
        $ref_clean->setAccessible(TRUE);
        $ref_clean->invokeArgs($plugin, [
            $package->reveal(),
            [
                'tests',
            ],
        ]);
        $this->assertFileDoesNotExist(vfsStream::url('vendor/drupal/package/tests'));
    }
    
    /**
     * @covers ::cleanAllPackages
     */
    public function testCleanAllPackages() {
        $config = $this->getMockBuilder(Config::class)
            ->disableOriginalConstructor()
            ->getMock();
        $config->expects($this->once())
            ->method('getAllCleanupPaths')
            ->willReturn([
            'drupal/package' => [
                'tests',
            ],
        ]);
        $package = $this->getMockBuilder(PackageInterface::class)
            ->getMockForAbstractClass();
        $package->expects($this->any())
            ->method('getName')
            ->willReturn('drupal/package');
        $plugin = $this->getMockBuilder(VendorHardeningPlugin::class)
            ->onlyMethods([
            'getInstalledPackages',
            'getInstallPathForPackage',
        ])
            ->getMock();
        $plugin->expects($this->once())
            ->method('getInstalledPackages')
            ->willReturn([
            $package,
        ]);
        $plugin->expects($this->once())
            ->method('getInstallPathForPackage')
            ->willReturn(vfsStream::url('vendor/drupal/package'));
        $io = $this->prophesize(IOInterface::class);
        $ref_io = new \ReflectionProperty($plugin, 'io');
        $ref_io->setAccessible(TRUE);
        $ref_io->setValue($plugin, $io->reveal());
        $ref_config = new \ReflectionProperty($plugin, 'config');
        $ref_config->setAccessible(TRUE);
        $ref_config->setValue($plugin, $config);
        $this->assertFileExists(vfsStream::url('vendor/drupal/package/tests/SomeTest.php'));
        $plugin->cleanAllPackages();
        $this->assertFileDoesNotExist(vfsStream::url('vendor/drupal/package/tests'));
    }
    
    /**
     * @covers ::writeAccessRestrictionFiles
     */
    public function testWriteAccessRestrictionFiles() {
        $dir = vfsStream::url('vendor');
        // Set up mocks so that writeAccessRestrictionFiles() can eventually use
        // the IOInterface object.
        $composer = $this->getMockBuilder(Composer::class)
            ->onlyMethods([
            'getPackage',
        ])
            ->getMock();
        $composer->expects($this->once())
            ->method('getPackage')
            ->willReturn($this->prophesize(RootPackageInterface::class)
            ->reveal());
        $plugin = new VendorHardeningPlugin();
        $plugin->activate($composer, $this->prophesize(IOInterface::class)
            ->reveal());
        $this->assertDirectoryExists($dir);
        $this->assertFileDoesNotExist($dir . '/.htaccess');
        $this->assertFileDoesNotExist($dir . '/web.config');
        $plugin->writeAccessRestrictionFiles($dir);
        $this->assertFileExists($dir . '/.htaccess');
        $this->assertFileExists($dir . '/web.config');
    }
    public function providerFindBinOverlap() {
        return [
            [
                [],
                [
                    'bin/script',
                ],
                [
                    'tests',
                ],
            ],
            [
                [
                    'bin/composer' => 'bin/composer',
                ],
                [
                    'bin/composer',
                ],
                [
                    'bin',
                    'tests',
                ],
            ],
            [
                [
                    'bin/composer' => 'bin/composer',
                ],
                [
                    'bin/composer',
                ],
                [
                    'bin/composer',
                ],
            ],
            [
                [],
                [
                    'bin/composer',
                ],
                [
                    'bin/something_else',
                ],
            ],
            [
                [],
                [
                    'test/script',
                ],
                [
                    'test/longer',
                ],
            ],
            [
                [
                    'bin/very/long/path/script' => 'bin/very/long/path/script',
                ],
                [
                    'bin/very/long/path/script',
                ],
                [
                    'bin',
                ],
            ],
            [
                [
                    'bin/bin/bin' => 'bin/bin/bin',
                ],
                [
                    'bin/bin/bin',
                ],
                [
                    'bin/bin',
                ],
            ],
            [
                [],
                [
                    'bin/bin',
                ],
                [
                    'bin/bin/bin',
                ],
            ],
        ];
    }
    
    /**
     * @covers ::findBinOverlap
     * @dataProvider providerFindBinOverlap
     */
    public function testFindBinOverlap($expected, $binaries, $clean_paths) {
        $plugin = $this->getMockBuilder(VendorHardeningPlugin::class)
            ->disableOriginalConstructor()
            ->getMock();
        $ref_find_bin_overlap = new \ReflectionMethod($plugin, 'findBinOverlap');
        $ref_find_bin_overlap->setAccessible(TRUE);
        $this->assertSame($expected, $ref_find_bin_overlap->invokeArgs($plugin, [
            $binaries,
            $clean_paths,
        ]));
    }

}

Members

Title Sort descending Modifiers Object type Summary
PhpUnitWarnings::$deprecationWarnings private static property Deprecation warnings from PHPUnit to raise with @trigger_error().
PhpUnitWarnings::addWarning public function Converts PHPUnit deprecation warnings to E_USER_DEPRECATED.
VendorHardeningPluginTest::providerFindBinOverlap public function
VendorHardeningPluginTest::setUp public function
VendorHardeningPluginTest::testCleanAllPackages public function @covers ::cleanAllPackages
VendorHardeningPluginTest::testCleanPackage public function @covers ::cleanPackage
VendorHardeningPluginTest::testCleanPathsForPackage public function @covers ::cleanPathsForPackage
VendorHardeningPluginTest::testFindBinOverlap public function @covers ::findBinOverlap
@dataProvider providerFindBinOverlap
VendorHardeningPluginTest::testWriteAccessRestrictionFiles public function @covers ::writeAccessRestrictionFiles

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