Commit 48d52ff3 authored by catch's avatar catch
Browse files

Issue #3451701 by dww, Mingsong, MegaphoneJon: The update module should not...

Issue #3451701 by dww, Mingsong, MegaphoneJon: The update module should not crash with releases that contain invalid values for core_version_requirement

(cherry picked from commit d3b2a6a5)
parent 96cf406d
Loading
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -169,8 +169,13 @@ public function setReleaseMessage(array &$project_data) {
   *   version of Drupal core, otherwise FALSE.
   */
  protected function isCoreCompatible($core_compatibility_constraint) {
    try {
      return Semver::satisfies($this->existingCoreVersion, $core_compatibility_constraint);
    }
    catch (\Exception $e) {
      return FALSE;
    }
  }

  /**
   * Creates core a compatibility message from a semantic version constraint.
+47 −0
Original line number Diff line number Diff line
@@ -156,4 +156,51 @@ public static function providerSetProjectCoreCompatibilityRanges() {
    return $test_cases;
  }

  /**
   * @covers ::isCoreCompatible
   * @dataProvider providerIsCoreCompatible
   *
   * @param string $constraint
   *   The core_version_constraint to test.
   * @param string $installed_core
   *   The installed version of core to compare against.
   * @param bool $expected
   *   The expected result.
   */
  public function testIsCoreCompatible(string $constraint, string $installed_core, bool $expected): void {
    $core_data['existing_version'] = $installed_core;
    $project_compatibility = new ProjectCoreCompatibility($core_data, [], []);
    $reflection = new \ReflectionClass(ProjectCoreCompatibility::class);
    $reflection_method = $reflection->getMethod('isCoreCompatible');
    $result = $reflection_method->invokeArgs($project_compatibility, [$constraint]);
    $this->assertSame($expected, $result);
  }

  /**
   * Data provider for testIsCoreCompatible().
   */
  public static function providerIsCoreCompatible(): array {
    $test_cases['compatible exact'] = [
      '10.3.0',
      '10.3.0',
      TRUE,
    ];
    $test_cases['compatible with OR'] = [
      '^9 || ^10',
      '10.3.0',
      TRUE,
    ];
    $test_cases['incompatible'] = [
      '^10',
      '11.0.0',
      FALSE,
    ];
    $test_cases['broken'] = [
      '^^11',
      '11.0.0',
      FALSE,
    ];
    return $test_cases;
  }

}