OverlapWithTopLevelDependenciesTest.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. namespace Drupal\Tests\Composer\Generator;
  3. use PHPUnit\Framework\TestCase;
  4. /**
  5. * Tests DrupalCoreRecommendedBuilder.
  6. *
  7. * @group Metapackage
  8. */
  9. class OverlapWithTopLevelDependenciesTest extends TestCase {
  10. /**
  11. * Provides data for testOverlapWithTemplateProject().
  12. */
  13. public function templateProjectPathProvider() {
  14. return [
  15. [
  16. 'composer/Template/RecommendedProject',
  17. ],
  18. [
  19. 'composer/Template/LegacyProject',
  20. ],
  21. ];
  22. }
  23. /**
  24. * Tests top level and core-recommended dependencies do not overlap.
  25. *
  26. * @dataProvider templateProjectPathProvider
  27. *
  28. * @param string $template_project_path
  29. * The path of the project template to test.
  30. */
  31. public function testOverlapWithTemplateProject($template_project_path) {
  32. $root = dirname(__DIR__, 6);
  33. // Read template project composer.json.
  34. $top_level_composer_json = json_decode(file_get_contents("$root/$template_project_path/composer.json"), TRUE);
  35. // Read drupal/core-recommended composer.json.
  36. $core_recommended_composer_json = json_decode(file_get_contents("$root/composer/Metapackage/CoreRecommended/composer.json"), TRUE);
  37. // Fail if any required project in the require section of the template
  38. // project also exists in core/recommended.
  39. foreach ($top_level_composer_json['require'] as $project => $version_constraint) {
  40. $this->assertArrayNotHasKey($project, $core_recommended_composer_json['require'], "Pinned project $project is also a top-level dependency of $template_project_path. This can expose a Composer bug. See https://www.drupal.org/project/drupal/issues/3134648 and https://github.com/composer/composer/issues/8882");
  41. }
  42. }
  43. }