diff --git a/tests/Composer/Test/Downloader/FossilDownloaderTest.php b/tests/Composer/Test/Downloader/FossilDownloaderTest.php new file mode 100644 index 000000000..68babfd1d --- /dev/null +++ b/tests/Composer/Test/Downloader/FossilDownloaderTest.php @@ -0,0 +1,173 @@ + + * 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\FossilDownloader; +use Composer\TestCase; +use Composer\Util\Filesystem; +use Composer\Util\Platform; + +class FossilDownloaderTest extends TestCase +{ + /** @var string */ + private $workingDir; + + protected function setUp() + { + $this->workingDir = $this->getUniqueTmpDirectory(); + } + + protected function tearDown() + { + if (is_dir($this->workingDir)) { + $fs = new Filesystem; + $fs->removeDirectory($this->workingDir); + } + } + + protected function getDownloaderMock($io = null, $config = null, $executor = null, $filesystem = null) + { + $io = $io ?: $this->getMock('Composer\IO\IOInterface'); + $config = $config ?: $this->getMock('Composer\Config'); + $executor = $executor ?: $this->getMock('Composer\Util\ProcessExecutor'); + $filesystem = $filesystem ?: $this->getMock('Composer\Util\Filesystem'); + + return new FossilDownloader($io, $config, $executor, $filesystem); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testDownloadForPackageWithoutSourceReference() + { + $packageMock = $this->getMock('Composer\Package\PackageInterface'); + $packageMock->expects($this->once()) + ->method('getSourceReference') + ->will($this->returnValue(null)); + + $downloader = $this->getDownloaderMock(); + $downloader->download($packageMock, '/path'); + } + + public function testDownload() + { + $packageMock = $this->getMock('Composer\Package\PackageInterface'); + $packageMock->expects($this->any()) + ->method('getSourceReference') + ->will($this->returnValue('trunk')); + $packageMock->expects($this->once()) + ->method('getSourceUrls') + ->will($this->returnValue(array('http://fossil.kd2.org/kd2fw/'))); + $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); + + $expectedFossilCommand = $this->getCmd('fossil clone \'http://fossil.kd2.org/kd2fw/\' \'repo.fossil\''); + $processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedFossilCommand)) + ->will($this->returnValue(0)); + + $expectedFossilCommand = $this->getCmd('fossil open \'repo.fossil\''); + $processExecutor->expects($this->at(1)) + ->method('execute') + ->with($this->equalTo($expectedFossilCommand)) + ->will($this->returnValue(0)); + + $expectedFossilCommand = $this->getCmd('fossil update \'trunk\''); + $processExecutor->expects($this->at(2)) + ->method('execute') + ->with($this->equalTo($expectedFossilCommand)) + ->will($this->returnValue(0)); + + $downloader = $this->getDownloaderMock(null, null, $processExecutor); + $downloader->download($packageMock, 'repo'); + } + + /** + * @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 = $this->getDownloaderMock(); + $downloader->update($initialPackageMock, $sourcePackageMock, '/path'); + } + + public function testUpdate() + { + // Ensure file exists + $file = $this->workingDir . '/.fslckout'; + + if (!file_exists($file)) { + touch($file); + } + + $packageMock = $this->getMock('Composer\Package\PackageInterface'); + $packageMock->expects($this->any()) + ->method('getSourceReference') + ->will($this->returnValue('trunk')); + $packageMock->expects($this->any()) + ->method('getSourceUrls') + ->will($this->returnValue(array('http://fossil.kd2.org/kd2fw/'))); + $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); + + $expectedFossilCommand = $this->getCmd("fossil changes"); + $processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedFossilCommand)) + ->will($this->returnValue(0)); + $expectedFossilCommand = $this->getCmd("fossil pull && fossil up 'trunk'"); + $processExecutor->expects($this->at(1)) + ->method('execute') + ->with($this->equalTo($expectedFossilCommand)) + ->will($this->returnValue(0)); + + $downloader = $this->getDownloaderMock(null, null, $processExecutor); + $downloader->update($packageMock, $packageMock, $this->workingDir); + } + + public function testRemove() + { + $expectedResetCommand = $this->getCmd('cd \'composerPath\' && fossil status'); + + $packageMock = $this->getMock('Composer\Package\PackageInterface'); + $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); + $processExecutor->expects($this->any()) + ->method('execute') + ->with($this->equalTo($expectedResetCommand)); + $filesystem = $this->getMock('Composer\Util\Filesystem'); + $filesystem->expects($this->any()) + ->method('removeDirectory') + ->with($this->equalTo('composerPath')) + ->will($this->returnValue(true)); + + $downloader = $this->getDownloaderMock(null, null, $processExecutor, $filesystem); + $downloader->remove($packageMock, 'composerPath'); + } + + public function testGetInstallationSource() + { + $downloader = $this->getDownloaderMock(null); + + $this->assertEquals('source', $downloader->getInstallationSource()); + } + + private function getCmd($cmd) + { + return Platform::isWindows() ? strtr($cmd, "'", '"') : $cmd; + } +} diff --git a/tests/Composer/Test/Repository/Vcs/FossilDriverTest.php b/tests/Composer/Test/Repository/Vcs/FossilDriverTest.php new file mode 100644 index 000000000..970abf34b --- /dev/null +++ b/tests/Composer/Test/Repository/Vcs/FossilDriverTest.php @@ -0,0 +1,70 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Test\Repository\Vcs; + +use Composer\Repository\Vcs\FossilDriver; +use Composer\Config; +use Composer\TestCase; +use Composer\Util\Filesystem; +use Composer\Util\Platform; + +class FossilDriverTest extends TestCase +{ + protected $home; + protected $config; + + public function setUp() + { + $this->home = $this->getUniqueTmpDirectory(); + $this->config = new Config(); + $this->config->merge(array( + 'config' => array( + 'home' => $this->home, + ), + )); + } + + public function tearDown() + { + $fs = new Filesystem(); + $fs->removeDirectory($this->home); + } + + private function getCmd($cmd) + { + if (Platform::isWindows()) { + return strtr($cmd, "'", '"'); + } + + return $cmd; + } + + public static function supportProvider() + { + return array( + array('http://fossil.kd2.org/kd2fw/', true), + array('https://chiselapp.com/user/rkeene/repository/flint/index', true), + array('ssh://fossil.kd2.org/kd2fw.fossil', true), + ); + } + + /** + * @dataProvider supportProvider + */ + public function testSupport($url, $assertion) + { + $config = new Config(); + $result = FossilDriver::supports($this->getMock('Composer\IO\IOInterface'), $config, $url); + $this->assertEquals($assertion, $result); + } +}