From ee8037c191e82852e283e2c0d20254ed52a38545 Mon Sep 17 00:00:00 2001
From: Ion Bazan <ion.bazan@gmail.com>
Date: Mon, 9 Dec 2024 16:22:19 +0800
Subject: [PATCH] Return package home URL when no generator supports it (#37)

---
 src/Url/GeneratorContainer.php       | 11 ++++++++---
 tests/Url/GeneratorContainerTest.php | 13 +++++++++++++
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/Url/GeneratorContainer.php b/src/Url/GeneratorContainer.php
index 0d204c0..32c578f 100644
--- a/src/Url/GeneratorContainer.php
+++ b/src/Url/GeneratorContainer.php
@@ -2,6 +2,7 @@
 
 namespace IonBazan\ComposerDiff\Url;
 
+use Composer\Package\CompletePackage;
 use Composer\Package\PackageInterface;
 
 class GeneratorContainer implements UrlGenerator
@@ -69,10 +70,14 @@ public function getReleaseUrl(PackageInterface $package)
 
     public function getProjectUrl(PackageInterface $package)
     {
-        if (!$generator = $this->get($package)) {
-            return null;
+        if ($generator = $this->get($package)) {
+            return $generator->getProjectUrl($package);
         }
 
-        return $generator->getProjectUrl($package);
+        if ($package instanceof CompletePackage) {
+            return $package->getHomepage();
+        }
+
+        return null;
     }
 }
diff --git a/tests/Url/GeneratorContainerTest.php b/tests/Url/GeneratorContainerTest.php
index 5ac03f4..1e26d6f 100644
--- a/tests/Url/GeneratorContainerTest.php
+++ b/tests/Url/GeneratorContainerTest.php
@@ -2,6 +2,7 @@
 
 namespace IonBazan\ComposerDiff\Tests\Url;
 
+use Composer\Package\CompletePackage;
 use IonBazan\ComposerDiff\Tests\TestCase;
 use IonBazan\ComposerDiff\Url\GeneratorContainer;
 
@@ -30,4 +31,16 @@ public function testItSupportsPackageSupportedByOneOfTheGenerators()
         self::assertTrue($generator->supportsPackage($this->getPackageWithSource('acme/package', '3.12.0', 'https://bitbucket.org/acme/package.git')));
         self::assertFalse($generator->supportsPackage($this->getPackageWithSource('acme/package', '3.12.0', 'https://non-existent.org/acme/package.git')));
     }
+
+    public function testItReturnsHomepageForProjectUrlWhenNoGeneratorSupportsPackage()
+    {
+        $generator = new GeneratorContainer();
+        $package = new CompletePackage('acme/package', '3.12.0', '3.12.0');
+        $package->setHomepage('https://acme.com');
+
+        self::assertSame('https://acme.com', $generator->getProjectUrl($package));
+
+        $package->setHomepage(null);
+        self::assertNull($generator->getProjectUrl($package));
+    }
 }