From 3d3eff787f6c2d8eaab1d2bea02d83f1ebadface Mon Sep 17 00:00:00 2001 From: "yash.rode" <yash.rode@3685174.no-reply.drupal.org> Date: Thu, 24 Nov 2022 01:08:15 +0000 Subject: [PATCH] Issue #3322203 by yash.rode, tedbow, Wim Leers: Make sure packages in our fake-site fixture match in both installed.json and installed.php --- .../fake_site/vendor/composer/installed.php | 11 +++ .../tests/src/Kernel/FakeSiteFixtureTest.php | 77 +++++++++++++++++++ .../src/Kernel/FixtureUtilityTraitTest.php | 22 ++++++ 3 files changed, 110 insertions(+) diff --git a/package_manager/tests/fixtures/fake_site/vendor/composer/installed.php b/package_manager/tests/fixtures/fake_site/vendor/composer/installed.php index df34477937..bd4f9d5cc1 100644 --- a/package_manager/tests/fixtures/fake_site/vendor/composer/installed.php +++ b/package_manager/tests/fixtures/fake_site/vendor/composer/installed.php @@ -9,6 +9,17 @@ return [ 'versions' => [ 'drupal/core' => [ 'name' => 'drupal/core', + 'version' => '9.8.0', + 'type' => 'drupal-core', + ], + 'drupal/core-recommended' => [ + 'name' => 'drupal/core-recommended', + 'version' => '9.8.0', + 'type' => 'drupal-core', + ], + 'drupal/core-dev' => [ + 'name' => 'drupal/core-dev', + 'version' => '9.8.0', 'type' => 'drupal-core', ], ], diff --git a/package_manager/tests/src/Kernel/FakeSiteFixtureTest.php b/package_manager/tests/src/Kernel/FakeSiteFixtureTest.php index e8a2dd6921..88ee622c4d 100644 --- a/package_manager/tests/src/Kernel/FakeSiteFixtureTest.php +++ b/package_manager/tests/src/Kernel/FakeSiteFixtureTest.php @@ -37,4 +37,81 @@ class FakeSiteFixtureTest extends PackageManagerKernelTestBase { $this->assertNull($composer_utility->getPackageForProject('drupal/any_random_name')); } + /** + * Tests if `modifyPackage` can be called on all packages in the fixture. + * + * @see \Drupal\Tests\package_manager\Traits\FixtureUtilityTrait::modifyPackage() + */ + public function testCallToModifyPackage(): void { + $project_root = $this->container->get('package_manager.path_locator')->getProjectRoot(); + $stage = $this->createStage(); + $installed_packages = $stage->getActiveComposer()->getInstalledPackages(); + foreach (self::getExpectedFakeSitePackages() as $package_name) { + $this->assertArrayHasKey($package_name, $installed_packages); + $this->assertSame('9.8.0', $installed_packages[$package_name]->getPrettyVersion()); + $this->modifyPackage( + $project_root, + $package_name, + ['version' => '11.1.0'] + ); + } + } + + /** + * Tests if `removePackage` can be called on all packages in the fixture. + * + * @covers \Drupal\Tests\package_manager\Traits\FixtureUtilityTrait::removePackage() + */ + public function testCallToRemovePackage(): void { + $expected_packages = self::getExpectedFakeSitePackages(); + $project_root = $this->container->get('package_manager.path_locator')->getProjectRoot(); + $stage = $this->createStage(); + $actual_packages = array_keys($stage->getActiveComposer()->getInstalledPackages()); + sort($actual_packages); + $this->assertSame($expected_packages, $actual_packages); + foreach (self::getExpectedFakeSitePackages() as $package_name) { + $this->removePackage( + $project_root, + $package_name, + ); + } + } + + /** + * Check which packages are installed in each file. + */ + public function testExpectedPackages(): void { + $expected_packages = $this->getExpectedFakeSitePackages(); + $active_dir = $this->container->get('package_manager.path_locator')->getProjectRoot(); + $stage = $this->createStage(); + $original_installed_php = $stage->getActiveComposer()->getInstalledPackages(); + $installed_php_packages = array_keys($original_installed_php); + sort($installed_php_packages); + $installed_json = json_decode(file_get_contents($active_dir . '/vendor/composer/installed.json'), TRUE, 512, JSON_THROW_ON_ERROR); + $installed_json_packages = []; + foreach ($installed_json['packages'] as $package) { + $installed_json_packages[] = $package['name']; + } + sort($installed_json_packages); + $this->assertSame($expected_packages, $installed_json_packages); + // Assert same packages are present in both installed.json and installed.php. + $this->assertSame($installed_json_packages, $installed_php_packages); + } + + /** + * Gets the expected packages in the `fake_site` fixture. + * + * @return string[] + * The package names. + */ + private static function getExpectedFakeSitePackages(): array { + $packages = [ + 'drupal/core', + 'drupal/core-recommended', + 'drupal/core-dev', + ]; + sort($packages); + return $packages; + } + } diff --git a/package_manager/tests/src/Kernel/FixtureUtilityTraitTest.php b/package_manager/tests/src/Kernel/FixtureUtilityTraitTest.php index 6d933c42d6..7b1ff0f0bf 100644 --- a/package_manager/tests/src/Kernel/FixtureUtilityTraitTest.php +++ b/package_manager/tests/src/Kernel/FixtureUtilityTraitTest.php @@ -117,6 +117,17 @@ class FixtureUtilityTraitTest extends PackageManagerKernelTestBase { $installed_php_expected_packages = [ 'drupal/core' => [ 'name' => 'drupal/core', + 'version' => '9.8.0', + 'type' => 'drupal-core', + ], + 'drupal/core-recommended' => [ + 'name' => 'drupal/core-recommended', + 'version' => '9.8.0', + 'type' => 'drupal-core', + ], + 'drupal/core-dev' => [ + 'name' => 'drupal/core-dev', + 'version' => '9.8.0', 'type' => 'drupal-core', ], ] + $installed_php_expected_packages; @@ -209,6 +220,17 @@ class FixtureUtilityTraitTest extends PackageManagerKernelTestBase { $installed_php_expected_packages = [ 'drupal/core' => [ 'name' => 'drupal/core', + 'version' => '9.8.0', + 'type' => 'drupal-core', + ], + 'drupal/core-recommended' => [ + 'name' => 'drupal/core-recommended', + 'version' => '9.8.0', + 'type' => 'drupal-core', + ], + 'drupal/core-dev' => [ + 'name' => 'drupal/core-dev', + 'version' => '9.8.0', 'type' => 'drupal-core', ], ] + $installed_php_expected_packages; -- GitLab