Browse Source

test the update readme function

Thomas Flori 8 years ago
parent
commit
b7f1725528
1 changed files with 132 additions and 0 deletions
  1. 132 0
      src/Packagist/WebBundle/Tests/Package/UpdaterTest.php

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

@@ -0,0 +1,132 @@
+<?php
+
+namespace Packagist\WebBundle\Tests\Package;
+
+use Composer\Config;
+use Composer\IO\IOInterface;
+use Composer\IO\NullIO;
+use Composer\Package\CompletePackage;
+use Composer\Repository\RepositoryInterface;
+use Composer\Repository\Vcs\GitDriver;
+use Composer\Repository\Vcs\VcsDriverInterface;
+use Composer\Repository\VcsRepository;
+use Doctrine\Bundle\DoctrineBundle\Registry;
+use Doctrine\ORM\EntityManager;
+use Packagist\WebBundle\Entity\Package;
+use Packagist\WebBundle\Package\Updater;
+use PHPUnit\Framework\TestCase;
+use PHPUnit_Framework_MockObject_MockObject;
+
+class UpdaterTest extends TestCase
+{
+    /** @var IOInterface */
+    private $ioMock;
+    /** @var Config */
+    private $config;
+    /** @var Package */
+    private $package;
+    /** @var Updater */
+    private $updater;
+    /** @var RepositoryInterface|PHPUnit_Framework_MockObject_MockObject */
+    private $repositoryMock;
+    /** @var VcsDriverInterface|PHPUnit_Framework_MockObject_MockObject */
+    private $driverMock;
+
+    protected function setUp()
+    {
+        parent::setUp();
+
+        $this->config  = new Config();
+        $this->package = new Package();
+
+        $this->ioMock         = $this->getMockBuilder(NullIO::class)->disableOriginalConstructor()->getMock();
+        $this->repositoryMock = $this->getMockBuilder(VcsRepository::class)->disableOriginalConstructor()->getMock();
+        $registryMock         = $this->getMockBuilder(Registry::class)->disableOriginalConstructor()->getMock();
+        $emMock               = $this->getMockBuilder(EntityManager::class)->disableOriginalConstructor()->getMock();
+        $packageMock          = $this->getMockBuilder(CompletePackage::class)->disableOriginalConstructor()->getMock();
+        $this->driverMock     = $this->getMockBuilder(GitDriver::class)->disableOriginalConstructor()->getMock();
+
+        $registryMock->expects($this->any())->method('getManager')->willReturn($emMock);
+        $this->repositoryMock->expects($this->any())->method('getPackages')->willReturn([
+            $packageMock
+        ]);
+        $this->repositoryMock->expects($this->any())->method('getDriver')->willReturn($this->driverMock);
+        $packageMock->expects($this->any())->method('getRequires')->willReturn([]);
+        $packageMock->expects($this->any())->method('getConflicts')->willReturn([]);
+        $packageMock->expects($this->any())->method('getProvides')->willReturn([]);
+        $packageMock->expects($this->any())->method('getReplaces')->willReturn([]);
+        $packageMock->expects($this->any())->method('getDevRequires')->willReturn([]);
+
+        $this->updater = new Updater($registryMock);
+    }
+
+    public function testUpdatesTheReadme()
+    {
+        $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('This is the readme');
+
+        $this->updater->update($this->ioMock, $this->config, $this->package, $this->repositoryMock);
+
+        self::assertContains('This is the readme', $this->package->getReadme());
+    }
+
+    public function testConvertsMarkdownForReadme()
+    {
+        $readme = <<<EOR
+# some package name
+
+Why you should use this package:
+ - it is easy to use
+ - no overhead
+ - minimal requirements
+
+EOR;
+        $readmeHtml = <<<EOR
+
+<p>Why you should use this package:</p>
+<ul><li>it is easy to use</li>
+<li>no overhead</li>
+<li>minimal requirements</li>
+</ul>
+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');
+        $this->driverMock->expects($this->any())->method('getComposerInformation')
+                         ->willReturn(['readme' => 'README.txt']);
+        $this->driverMock->expects($this->once())->method('getFileContent')->with('README.txt', 'master')
+                         ->willReturn('This is the readme');
+
+        $this->updater->update($this->ioMock, $this->config, $this->package, $this->repositoryMock);
+
+        self::assertSame('<pre>This is the readme</pre>', $this->package->getReadme());
+    }
+
+    public function testUnderstandsDifferentFileNames()
+    {
+        $this->driverMock->expects($this->any())->method('getRootIdentifier')->willReturn('master');
+        $this->driverMock->expects($this->any())->method('getComposerInformation')
+                         ->willReturn(['readme' => 'liesmich']);
+        $this->driverMock->expects($this->once())->method('getFileContent')->with('liesmich', 'master')
+                         ->willReturn('This is the readme');
+
+        $this->updater->update($this->ioMock, $this->config, $this->package, $this->repositoryMock);
+
+        self::assertSame('<pre>This is the readme</pre>', $this->package->getReadme());
+    }
+}