* Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Downloader; use Composer\Downloader\GitDownloader; class GitDownloaderTest extends \PHPUnit_Framework_TestCase { /** * @expectedException \InvalidArgumentException */ public function testDownloadForPackageWithoutSourceReference() { $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->once()) ->method('getSourceReference') ->will($this->returnValue(null)); $downloader = new GitDownloader(); $downloader->download($packageMock, '/path'); } public function testDownload() { $expectedGitCommand = 'git clone \'https://github.com/l3l0/composer\' composerPath && cd composerPath && git checkout \'ref\' && git reset --hard \'ref\''; $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getSourceReference') ->will($this->returnValue('ref')); $packageMock->expects($this->once()) ->method('getSourceUrl') ->will($this->returnValue('https://github.com/l3l0/composer')); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $processExecutor->expects($this->once()) ->method('execute') ->with($this->equalTo($expectedGitCommand)); $downloader = new GitDownloader($processExecutor); $downloader->download($packageMock, 'composerPath'); } /** * @expectedException \InvalidArgumentException */ public function testUpdateforPackageWithoutSourceReference() { $initialPackageMock = $this->getMock('Composer\Package\PackageInterface'); $sourcePackageMock = $this->getMock('Composer\Package\PackageInterface'); $sourcePackageMock->expects($this->once()) ->method('getSourceReference') ->will($this->returnValue(null)); $downloader = new GitDownloader(); $downloader->update($initialPackageMock, $sourcePackageMock, '/path'); } public function testUpdate() { $expectedGitUpdateCommand = 'cd composerPath && git fetch && git checkout ref && git reset --hard ref'; $expectedGitResetCommand = 'cd composerPath && git status --porcelain'; $packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock->expects($this->any()) ->method('getSourceReference') ->will($this->returnValue('ref')); $packageMock->expects($this->any()) ->method('getSourceUrl') ->will($this->returnValue('https://github.com/l3l0/composer')); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $processExecutor->expects($this->at(0)) ->method('execute') ->with($this->equalTo($expectedGitResetCommand)); $processExecutor->expects($this->at(1)) ->method('execute') ->with($this->equalTo($expectedGitUpdateCommand)); $downloader = new GitDownloader($processExecutor); $downloader->update($packageMock, $packageMock, 'composerPath'); } public function testRemove() { $expectedGitResetCommand = 'cd composerPath && git status --porcelain'; $packageMock = $this->getMock('Composer\Package\PackageInterface'); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $processExecutor->expects($this->any()) ->method('execute') ->with($this->equalTo($expectedGitResetCommand)); $downloader = new GitDownloader($processExecutor); $downloader->remove($packageMock, 'composerPath'); } public function testGetInstallationSource() { $downloader = new GitDownloader(); $this->assertEquals('source', $downloader->getInstallationSource()); } }