Parcourir la source

Add failing test showing that packages fail to be installed if they match a previous alias which was not removed yet

Jordi Boggiano il y a 4 ans
Parent
commit
17ed09be2e

+ 84 - 0
tests/Composer/Test/Fixtures/installer/update-alias-lock2.test

@@ -0,0 +1,84 @@
+--TEST--
+Updating an aliased package where the old alias matches the new package should not fail
+--COMPOSER--
+{
+    "repositories": [
+        {
+            "type": "package",
+            "package": [
+                {
+                    "name": "a/a", "version": "1.10.x-dev",
+                    "extra": { "branch-alias": { "dev-master": "1.10.x-dev" } },
+                    "source": { "type": "git", "url": "", "reference": "downgradedref" }
+                },
+                {
+                    "name": "a/a", "version": "dev-master",
+                    "extra": { "branch-alias": { "dev-master": "2.x-dev" } },
+                    "source": { "type": "git", "url": "", "reference": "newref" }
+                }
+            ]
+        }
+    ],
+    "require": {
+        "a/a": "^1.0"
+    },
+    "minimum-stability": "dev"
+}
+--LOCK--
+{
+    "_": "outdated lock file, should not have to be loaded in an update",
+    "packages": [
+        {
+            "name": "a/a", "version": "dev-master",
+            "extra": { "branch-alias": { "dev-master": "1.10.x-dev" } },
+            "source": { "type": "git", "url": "", "reference": "installedref" }
+        }
+    ],
+    "packages-dev": [],
+    "aliases": [],
+    "minimum-stability": "dev",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false
+}
+--INSTALLED--
+[
+    {
+        "name": "a/a", "version": "dev-master",
+        "extra": { "branch-alias": { "dev-master": "1.10.x-dev" } },
+        "source": { "type": "git", "url": "", "reference": "installedref" }
+    }
+]
+--RUN--
+update
+--EXPECT-LOCK--
+{
+    "packages": [
+        {
+            "name": "a/a", "version": "1.10.x-dev",
+            "extra": { "branch-alias": { "dev-master": "1.10.x-dev" } },
+            "source": { "type": "git", "url": "", "reference": "downgradedref" },
+            "type": "library"
+        }
+    ],
+    "packages-dev": [],
+    "aliases": [],
+    "minimum-stability": "dev",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": [],
+    "platform-dev": []
+}
+--EXPECT-INSTALLED--
+[
+    {
+        "name": "a/a", "version": "1.10.x-dev",
+        "source": { "type": "git", "url": "", "reference": "downgradedref" },
+        "type": "library",
+        "extra": { "branch-alias": { "dev-master": "1.10.x-dev" } }
+    }
+]
+--EXPECT--
+Marking a/a (1.10.x-dev installedref) as uninstalled, alias of a/a (dev-master installedref)
+Downgrading a/a (dev-master installedref => 1.10.x-dev downgradedref)

+ 3 - 1
tests/Composer/Test/Mock/InstallationManagerMock.php

@@ -66,7 +66,9 @@ class InstallationManagerMock extends InstallationManager
         $this->updated[] = array($operation->getInitialPackage(), $operation->getTargetPackage());
         $this->trace[] = strip_tags((string) $operation);
         $repo->removePackage($operation->getInitialPackage());
-        $repo->addPackage(clone $operation->getTargetPackage());
+        if (!$repo->hasPackage($operation->getTargetPackage())) {
+            $repo->addPackage(clone $operation->getTargetPackage());
+        }
     }
 
     public function uninstall(RepositoryInterface $repo, UninstallOperation $operation)