Przeglądaj źródła

Merge pull request #770 from javiereguiluz/fix_764

Improve Updater to not remove useful README titles
Jordi Boggiano 8 lat temu
rodzic
commit
6878ab8c51

+ 5 - 6
src/Packagist/WebBundle/Package/Updater.php

@@ -629,12 +629,11 @@ class Updater
             }
         }
 
-        // remove first title as it's usually the project name which we don't need
-        if ($dom->getElementsByTagName('h1')->length) {
-            $first = $dom->getElementsByTagName('h1')->item(0);
-            $first->parentNode->removeChild($first);
-        } elseif ($dom->getElementsByTagName('h2')->length) {
-            $first = $dom->getElementsByTagName('h2')->item(0);
+        // remove first page element if it's a <h1> or <h2>, because it's usually
+        // the project name or the `README` string which we don't need
+        $first = $dom->getElementsByTagName('body')->item(0)->childNodes->item(0);
+
+        if ($first && ('h1' === $first->nodeName || 'h2' === $first->nodeName)) {
             $first->parentNode->removeChild($first);
         }
 

+ 28 - 0
src/Packagist/WebBundle/Tests/Package/UpdaterTest.php

@@ -104,6 +104,34 @@ EOR;
         self::assertSame($readmeHtml, $this->package->getReadme());
     }
 
+    /**
+     * When <h1> or <h2> titles are not the first element of the README contents,
+     * they should not be removed.
+     */
+    public function testNoUsefulTitlesAreRemovedForReadme()
+    {
+        $readme = <<<EOR
+Lorem ipsum dolor sit amet.
+
+# some title
+
+EOR;
+        $readmeHtml = <<<EOR
+<p>Lorem ipsum dolor sit amet.</p>
+<h1>some title</h1>
+EOR;
+
+        $this->driverMock->expects($this->any())->method('getRootIdentifier')->willReturn('master');
+        $this->driverMock->expects($this->any())->method('getComposerInformation')
+                         ->willReturn(['readme' => 'README.md']);
+        $this->driverMock->expects($this->once())->method('getFileContent')->with('README.md', 'master')
+                         ->willReturn($readme);
+
+        $this->updater->update($this->ioMock, $this->config, $this->package, $this->repositoryMock);
+
+        self::assertSame($readmeHtml, $this->package->getReadme());
+    }
+
     public function testSurrondsTextReadme()
     {
         $this->driverMock->expects($this->any())->method('getRootIdentifier')->willReturn('master');