You are here

public function ComposerIntegrationTest::testAllCoreComponentsReplaced in Drupal 10

Tests core's composer.json replace section.

Verify that all core components are also listed in the 'replace' section of core's composer.json.

File

core/tests/Drupal/Tests/ComposerIntegrationTest.php, line 94

Class

ComposerIntegrationTest
Tests Composer integration.

Namespace

Drupal\Tests

Code

public function testAllCoreComponentsReplaced() : void {

  // Assemble a path to core components.
  $components_path = $this->root . '/core/lib/Drupal/Component';

  // Grab the 'replace' section of the core composer.json file.
  $json = json_decode(file_get_contents($this->root . '/core/composer.json'), FALSE);
  $composer_replace_packages = (array) $json->replace;

  // Get a list of all the composer.json files in the components path.
  $components_composer_json_files = [];
  $composer_json_finder = new Finder();
  $composer_json_finder
    ->name('composer.json')
    ->in($components_path)
    ->ignoreUnreadableDirs();
  foreach ($composer_json_finder
    ->getIterator() as $composer_json) {
    $components_composer_json_files[$composer_json
      ->getPathname()] = [
      $composer_json
        ->getPathname(),
    ];
  }
  $this
    ->assertNotEmpty($components_composer_json_files);
  $this
    ->assertCount(count($composer_replace_packages), $components_composer_json_files);

  // Assert that each core components has a corresponding 'replace' in
  // composer.json.
  foreach ($components_composer_json_files as $components_composer_json_file) {
    $json = json_decode(file_get_contents(reset($components_composer_json_file)), FALSE);
    $component_name = $json->name;
    $this
      ->assertArrayHasKey($component_name, $composer_replace_packages, 'Unable to find ' . $component_name . ' in replace list of composer.json');
  }
}