mirror of
https://git.friendi.ca/friendica/friendica-addons.git
synced 2024-09-02 00:00:30 +00:00
329 lines
11 KiB
PHP
329 lines
11 KiB
PHP
|
<?php
|
||
|
|
||
|
/*
|
||
|
* This file is part of the Fxp Composer Asset Plugin package.
|
||
|
*
|
||
|
* (c) François Pluchino <francois.pluchino@gmail.com>
|
||
|
*
|
||
|
* For the full copyright and license information, please view the LICENSE
|
||
|
* file that was distributed with this source code.
|
||
|
*/
|
||
|
|
||
|
namespace Fxp\Composer\AssetPlugin\Tests\Util;
|
||
|
|
||
|
use Composer\IO\IOInterface;
|
||
|
use Composer\Test\Util\PerforceTest as BasePerforceTest;
|
||
|
use Composer\Util\Filesystem;
|
||
|
use Composer\Util\ProcessExecutor;
|
||
|
use Fxp\Composer\AssetPlugin\Util\Perforce;
|
||
|
|
||
|
/**
|
||
|
* Tests for the perforce.
|
||
|
*
|
||
|
* @author François Pluchino <francois.pluchino@gmail.com>
|
||
|
*/
|
||
|
class PerforceTest extends BasePerforceTest
|
||
|
{
|
||
|
/**
|
||
|
* @var Perforce
|
||
|
*/
|
||
|
protected $perforce;
|
||
|
|
||
|
/**
|
||
|
* @var ProcessExecutor|\PHPUnit_Framework_MockObject_MockObject
|
||
|
*/
|
||
|
protected $processExecutor;
|
||
|
|
||
|
/**
|
||
|
* @var array
|
||
|
*/
|
||
|
protected $repoConfig;
|
||
|
|
||
|
protected function setUp()
|
||
|
{
|
||
|
$this->processExecutor = $this->getMockBuilder('Composer\Util\ProcessExecutor')->getMock();
|
||
|
$this->repoConfig = $this->getTestRepoConfig();
|
||
|
$this->io = $this->getMockIOInterface();
|
||
|
$this->createNewPerforceWithWindowsFlag(true);
|
||
|
}
|
||
|
|
||
|
protected function tearDown()
|
||
|
{
|
||
|
parent::tearDown();
|
||
|
|
||
|
$fs = new Filesystem();
|
||
|
$fs->remove($this::TEST_PATH);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return IOInterface|\PHPUnit_Framework_MockObject_MockObject
|
||
|
*/
|
||
|
public function getMockIOInterface()
|
||
|
{
|
||
|
return $this->getMockBuilder('Composer\IO\IOInterface')->getMock();
|
||
|
}
|
||
|
|
||
|
public function testQueryP4PasswordWithPasswordAlreadySet()
|
||
|
{
|
||
|
$repoConfig = array(
|
||
|
'depot' => 'depot',
|
||
|
'branch' => 'branch',
|
||
|
'p4user' => 'user',
|
||
|
'p4password' => 'TEST_PASSWORD',
|
||
|
'filename' => 'ASSET.json',
|
||
|
);
|
||
|
$this->perforce = new Perforce($repoConfig, 'port', 'path', $this->processExecutor, false, $this->getMockIOInterface(), 'TEST');
|
||
|
$password = $this->perforce->queryP4Password();
|
||
|
$this->assertEquals('TEST_PASSWORD', $password);
|
||
|
}
|
||
|
|
||
|
public function getTestRepoConfig()
|
||
|
{
|
||
|
return array_merge(parent::getTestRepoConfig(), array(
|
||
|
'filename' => 'ASSET.json',
|
||
|
));
|
||
|
}
|
||
|
|
||
|
public function testGetComposerInformationWithoutLabelWithoutStream()
|
||
|
{
|
||
|
$expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot -p port print //depot/ASSET.json';
|
||
|
$this->processExecutor->expects($this->at(0))
|
||
|
->method('execute')
|
||
|
->with($this->equalTo($expectedCommand))
|
||
|
->will(
|
||
|
$this->returnCallback(
|
||
|
function ($command, &$output) {
|
||
|
$output = PerforceTest::getComposerJson();
|
||
|
|
||
|
return $command ? true : true;
|
||
|
}
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$result = $this->perforce->getComposerInformation('//depot');
|
||
|
$expected = array(
|
||
|
'name' => 'test/perforce',
|
||
|
'description' => 'Basic project for testing',
|
||
|
'minimum-stability' => 'dev',
|
||
|
'autoload' => array('psr-0' => array()),
|
||
|
);
|
||
|
$this->assertEquals($expected, $result);
|
||
|
}
|
||
|
|
||
|
public function testGetComposerInformationWithLabelWithoutStream()
|
||
|
{
|
||
|
$expectedCommand = 'p4 -u user -p port files //depot/ASSET.json@0.0.1';
|
||
|
$this->processExecutor->expects($this->at(0))
|
||
|
->method('execute')
|
||
|
->with($this->equalTo($expectedCommand))
|
||
|
->will(
|
||
|
$this->returnCallback(
|
||
|
function ($command, &$output) {
|
||
|
$output = '//depot/ASSET.json#1 - branch change 10001 (text)';
|
||
|
|
||
|
return $command ? true : true;
|
||
|
}
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot -p port print //depot/ASSET.json@10001';
|
||
|
$this->processExecutor->expects($this->at(1))
|
||
|
->method('execute')
|
||
|
->with($this->equalTo($expectedCommand))
|
||
|
->will(
|
||
|
$this->returnCallback(
|
||
|
function ($command, &$output) {
|
||
|
$output = PerforceTest::getComposerJson();
|
||
|
|
||
|
return $command ? true : true;
|
||
|
}
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$result = $this->perforce->getComposerInformation('//depot@0.0.1');
|
||
|
|
||
|
$expected = array(
|
||
|
'name' => 'test/perforce',
|
||
|
'description' => 'Basic project for testing',
|
||
|
'minimum-stability' => 'dev',
|
||
|
'autoload' => array('psr-0' => array()),
|
||
|
);
|
||
|
$this->assertEquals($expected, $result);
|
||
|
}
|
||
|
|
||
|
public function testGetComposerInformationWithoutLabelWithStream()
|
||
|
{
|
||
|
$this->setAssetPerforceToStream();
|
||
|
|
||
|
$expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot_branch -p port print //depot/branch/ASSET.json';
|
||
|
$this->processExecutor->expects($this->at(0))
|
||
|
->method('execute')
|
||
|
->with($this->equalTo($expectedCommand))
|
||
|
->will(
|
||
|
$this->returnCallback(
|
||
|
function ($command, &$output) {
|
||
|
$output = PerforceTest::getComposerJson();
|
||
|
|
||
|
return $command ? true : true;
|
||
|
}
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$result = $this->perforce->getComposerInformation('//depot/branch');
|
||
|
|
||
|
$expected = array(
|
||
|
'name' => 'test/perforce',
|
||
|
'description' => 'Basic project for testing',
|
||
|
'minimum-stability' => 'dev',
|
||
|
'autoload' => array('psr-0' => array()),
|
||
|
);
|
||
|
$this->assertEquals($expected, $result);
|
||
|
}
|
||
|
|
||
|
public function testGetComposerInformationWithLabelWithStream()
|
||
|
{
|
||
|
$this->setAssetPerforceToStream();
|
||
|
$expectedCommand = 'p4 -u user -p port files //depot/branch/ASSET.json@0.0.1';
|
||
|
$this->processExecutor->expects($this->at(0))
|
||
|
->method('execute')
|
||
|
->with($this->equalTo($expectedCommand))
|
||
|
->will(
|
||
|
$this->returnCallback(
|
||
|
function ($command, &$output) {
|
||
|
$output = '//depot/ASSET.json#1 - branch change 10001 (text)';
|
||
|
|
||
|
return $command ? true : true;
|
||
|
}
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot_branch -p port print //depot/branch/ASSET.json@10001';
|
||
|
$this->processExecutor->expects($this->at(1))
|
||
|
->method('execute')
|
||
|
->with($this->equalTo($expectedCommand))
|
||
|
->will(
|
||
|
$this->returnCallback(
|
||
|
function ($command, &$output) {
|
||
|
$output = PerforceTest::getComposerJson();
|
||
|
|
||
|
return $command ? true : true;
|
||
|
}
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$result = $this->perforce->getComposerInformation('//depot/branch@0.0.1');
|
||
|
|
||
|
$expected = array(
|
||
|
'name' => 'test/perforce',
|
||
|
'description' => 'Basic project for testing',
|
||
|
'minimum-stability' => 'dev',
|
||
|
'autoload' => array('psr-0' => array()),
|
||
|
);
|
||
|
$this->assertEquals($expected, $result);
|
||
|
}
|
||
|
|
||
|
public function testGetComposerInformationWithLabelButNoSuchFile()
|
||
|
{
|
||
|
$this->setAssetPerforceToStream();
|
||
|
$expectedCommand = 'p4 -u user -p port files //depot/branch/ASSET.json@0.0.1';
|
||
|
$this->processExecutor->expects($this->at(0))
|
||
|
->method('execute')
|
||
|
->with($this->equalTo($expectedCommand))
|
||
|
->will(
|
||
|
$this->returnCallback(
|
||
|
function ($command, &$output) {
|
||
|
$output = 'no such file(s).';
|
||
|
|
||
|
return $command ? true : true;
|
||
|
}
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$result = $this->perforce->getComposerInformation('//depot/branch@0.0.1');
|
||
|
|
||
|
$this->assertNull($result);
|
||
|
}
|
||
|
|
||
|
public function testGetComposerInformationWithLabelWithStreamWithNoChange()
|
||
|
{
|
||
|
$this->setAssetPerforceToStream();
|
||
|
$expectedCommand = 'p4 -u user -p port files //depot/branch/ASSET.json@0.0.1';
|
||
|
$this->processExecutor->expects($this->at(0))
|
||
|
->method('execute')
|
||
|
->with($this->equalTo($expectedCommand))
|
||
|
->will(
|
||
|
$this->returnCallback(
|
||
|
function ($command, &$output) {
|
||
|
$output = '//depot/ASSET.json#1 - branch 10001 (text)';
|
||
|
|
||
|
return $command ? true : true;
|
||
|
}
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$result = $this->perforce->getComposerInformation('//depot/branch@0.0.1');
|
||
|
|
||
|
$this->assertNull($result);
|
||
|
}
|
||
|
|
||
|
public function testCheckServerExists()
|
||
|
{
|
||
|
/* @var ProcessExecutor|\PHPUnit_Framework_MockObject_MockObject $processExecutor */
|
||
|
$processExecutor = $this->getMockBuilder('Composer\Util\ProcessExecutor')->getMock();
|
||
|
|
||
|
$expectedCommand = 'p4 -p perforce.does.exist:port info -s';
|
||
|
$processExecutor->expects($this->at(0))
|
||
|
->method('execute')
|
||
|
->with($this->equalTo($expectedCommand), $this->equalTo(null))
|
||
|
->will($this->returnValue(0));
|
||
|
|
||
|
$result = $this->perforce->checkServerExists('perforce.does.exist:port', $processExecutor);
|
||
|
$this->assertTrue($result);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test if "p4" command is missing.
|
||
|
*
|
||
|
* @covers \Composer\Util\Perforce::checkServerExists
|
||
|
*/
|
||
|
public function testCheckServerClientError()
|
||
|
{
|
||
|
/* @var ProcessExecutor|\PHPUnit_Framework_MockObject_MockObject $processExecutor */
|
||
|
$processExecutor = $this->getMockBuilder('Composer\Util\ProcessExecutor')->getMock();
|
||
|
|
||
|
$expectedCommand = 'p4 -p perforce.does.exist:port info -s';
|
||
|
$processExecutor->expects($this->at(0))
|
||
|
->method('execute')
|
||
|
->with($this->equalTo($expectedCommand), $this->equalTo(null))
|
||
|
->will($this->returnValue(127));
|
||
|
|
||
|
$result = $this->perforce->checkServerExists('perforce.does.exist:port', $processExecutor);
|
||
|
$this->assertFalse($result);
|
||
|
}
|
||
|
|
||
|
public function testCleanupClientSpecShouldDeleteClient()
|
||
|
{
|
||
|
/* @var Filesystem|\PHPUnit_Framework_MockObject_MockObject $fs */
|
||
|
$fs = $this->getMockBuilder('Composer\Util\Filesystem')->getMock();
|
||
|
$this->perforce->setFilesystem($fs);
|
||
|
|
||
|
$testClient = $this->perforce->getClient();
|
||
|
$expectedCommand = 'p4 -u '.self::TEST_P4USER.' -p '.self::TEST_PORT.' client -d '.$testClient;
|
||
|
$this->processExecutor->expects($this->once())->method('execute')->with($this->equalTo($expectedCommand));
|
||
|
|
||
|
$fs->expects($this->once())->method('remove')->with($this->perforce->getP4ClientSpec());
|
||
|
|
||
|
$this->perforce->cleanupClientSpec();
|
||
|
}
|
||
|
|
||
|
protected function createNewPerforceWithWindowsFlag($flag)
|
||
|
{
|
||
|
$this->perforce = new Perforce($this->repoConfig, self::TEST_PORT, self::TEST_PATH, $this->processExecutor, $flag, $this->io);
|
||
|
}
|
||
|
|
||
|
private function setAssetPerforceToStream()
|
||
|
{
|
||
|
$this->perforce->setStream('//depot/branch');
|
||
|
}
|
||
|
}
|