mirror of https://github.com/hauke68/Magallanes
Jakub Turek
10 years ago
1 changed files with 199 additions and 0 deletions
@ -0,0 +1,199 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace MageTest\Command\BuiltIn; |
||||||
|
|
||||||
|
use Mage\Command\BuiltIn\LockCommand; |
||||||
|
use MageTest\TestHelper\BaseTest; |
||||||
|
use malkusch\phpmock\FixedValueFunction; |
||||||
|
use malkusch\phpmock\MockBuilder; |
||||||
|
|
||||||
|
/** |
||||||
|
* Class LockCommandTest |
||||||
|
* @package MageTest\Command\BuiltIn |
||||||
|
* @coversDefaultClass Mage\Command\BuiltIn\LockCommand |
||||||
|
* @uses malkusch\phpmock\MockBuilder |
||||||
|
* @uses malkusch\phpmock\FixedValueFunction |
||||||
|
* @uses malkusch\phpmock\Mock |
||||||
|
* @uses Mage\Console\Colors |
||||||
|
* @uses Mage\Console |
||||||
|
* @uses Mage\Command\AbstractCommand |
||||||
|
*/ |
||||||
|
class LockCommandTest extends BaseTest |
||||||
|
{ |
||||||
|
public static $fgetsCount; |
||||||
|
public static $mockName; |
||||||
|
public static $mockEmail; |
||||||
|
public static $mockDesc; |
||||||
|
public static $filePutContentsResult; |
||||||
|
public static $filePutContentsFile; |
||||||
|
|
||||||
|
/** |
||||||
|
* @var LockCommand |
||||||
|
*/ |
||||||
|
private $lockCommand; |
||||||
|
|
||||||
|
/** |
||||||
|
* @var FixedValueFunction |
||||||
|
*/ |
||||||
|
private $fgetsValue; |
||||||
|
|
||||||
|
/** |
||||||
|
* @before |
||||||
|
*/ |
||||||
|
public function before() |
||||||
|
{ |
||||||
|
self::$fgetsCount = 0; |
||||||
|
$this->lockCommand = new LockCommand(); |
||||||
|
|
||||||
|
$mockBuilder = new MockBuilder(); |
||||||
|
$fopenMock = $mockBuilder |
||||||
|
->setName('fopen') |
||||||
|
->setNamespace('Mage') |
||||||
|
->setFunction(function () { |
||||||
|
return 'a'; |
||||||
|
}) |
||||||
|
->build(); |
||||||
|
|
||||||
|
$this->fgetsValue = new FixedValueFunction(); |
||||||
|
$fgetsMock = $mockBuilder |
||||||
|
->setNamespace('Mage') |
||||||
|
->setName('fgets') |
||||||
|
->setFunction( |
||||||
|
function () { |
||||||
|
switch (LockCommandTest::$fgetsCount) { |
||||||
|
case 0: |
||||||
|
LockCommandTest::$fgetsCount++; |
||||||
|
return LockCommandTest::$mockName; |
||||||
|
case 1: |
||||||
|
LockCommandTest::$fgetsCount++; |
||||||
|
return LockCommandTest::$mockEmail; |
||||||
|
case 2: |
||||||
|
LockCommandTest::$fgetsCount++; |
||||||
|
return LockCommandTest::$mockDesc; |
||||||
|
default: |
||||||
|
throw new \Exception('"fgets" count limit exceed'); |
||||||
|
} |
||||||
|
} |
||||||
|
) |
||||||
|
->build(); |
||||||
|
$getCwdMock = $mockBuilder |
||||||
|
->setNamespace('Mage\Command\Builtin') |
||||||
|
->setName('getcwd') |
||||||
|
->setFunction( |
||||||
|
function () { |
||||||
|
return ''; |
||||||
|
} |
||||||
|
) |
||||||
|
->build(); |
||||||
|
$fileGetContentsMock = $mockBuilder |
||||||
|
->setNamespace('Mage\Command\Builtin') |
||||||
|
->setName('file_put_contents') |
||||||
|
->setFunction( |
||||||
|
function ($file, $contents) { |
||||||
|
LockCommandTest::$filePutContentsFile = $file; |
||||||
|
LockCommandTest::$filePutContentsResult = $contents; |
||||||
|
} |
||||||
|
) |
||||||
|
->build(); |
||||||
|
|
||||||
|
$dateMock = $mockBuilder |
||||||
|
->setNamespace('Mage\Command\BuiltIn') |
||||||
|
->setName('date') |
||||||
|
->setFunction( |
||||||
|
function () { |
||||||
|
return '2015-01-01 12:00:00'; |
||||||
|
} |
||||||
|
) |
||||||
|
->build(); |
||||||
|
|
||||||
|
$fopenMock->disable(); |
||||||
|
$fgetsMock->disable(); |
||||||
|
$getCwdMock->disable(); |
||||||
|
$fileGetContentsMock->disable(); |
||||||
|
$dateMock->disable(); |
||||||
|
|
||||||
|
$fopenMock->enable(); |
||||||
|
$fgetsMock->enable(); |
||||||
|
$getCwdMock->enable(); |
||||||
|
$fileGetContentsMock->enable(); |
||||||
|
$dateMock->enable(); |
||||||
|
|
||||||
|
$this->setUpConsoleStatics(); |
||||||
|
} |
||||||
|
|
||||||
|
public function lockCommandProvider() |
||||||
|
{ |
||||||
|
return array( |
||||||
|
'normal' => array( |
||||||
|
'name' => 'John Smith', |
||||||
|
'email' => 'john.smith@example.com', |
||||||
|
'description' => "There's a critical bug here!", |
||||||
|
'expectedLockFileContents' => "Locked environment at date: 2015-01-01 12:00:00\n" |
||||||
|
. "Locked by John Smith (john.smith@example.com)\n" |
||||||
|
. "There's a critical bug here!\n", |
||||||
|
), |
||||||
|
'with_no_name' => array( |
||||||
|
'name' => '', |
||||||
|
'email' => 'john.smith@example.com', |
||||||
|
'description' => "There's a critical bug here!", |
||||||
|
'expectedLockFileContents' => "Locked environment at date: 2015-01-01 12:00:00\n" |
||||||
|
. "(john.smith@example.com)\n" |
||||||
|
. "There's a critical bug here!\n", |
||||||
|
), |
||||||
|
'with_no_email' => array( |
||||||
|
'name' => 'John Smith', |
||||||
|
'email' => '', |
||||||
|
'description' => "There's a critical bug here!", |
||||||
|
'expectedLockFileContents' => "Locked environment at date: 2015-01-01 12:00:00\n" |
||||||
|
. "Locked by John Smith \n" |
||||||
|
. "There's a critical bug here!\n", |
||||||
|
), |
||||||
|
'with_no_name_nor_email' => array( |
||||||
|
'name' => '', |
||||||
|
'email' => '', |
||||||
|
'description' => "There's a critical bug here!", |
||||||
|
'expectedLockFileContents' => "Locked environment at date: 2015-01-01 12:00:00\n" |
||||||
|
. "\n" |
||||||
|
. "There's a critical bug here!\n", |
||||||
|
), |
||||||
|
'with_no_desciption' => array( |
||||||
|
'name' => 'John Smith', |
||||||
|
'email' => 'john.smith@example.com', |
||||||
|
'description' => '', |
||||||
|
'expectedLockFileContents' => "Locked environment at date: 2015-01-01 12:00:00\n" |
||||||
|
. "Locked by John Smith (john.smith@example.com)" |
||||||
|
), |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @covers ::run |
||||||
|
* @dataProvider lockCommandProvider |
||||||
|
*/ |
||||||
|
public function testRun($name, $email, $description, $expectedLockFileContents) |
||||||
|
{ |
||||||
|
$expectedOutput = "Your name (enter to leave blank): " |
||||||
|
. "Your email (enter to leave blank): " |
||||||
|
. "Reason of lock (enter to leave blank): " |
||||||
|
. "\tLocked deployment to production environment\n\n"; |
||||||
|
$this->expectOutputString($expectedOutput); |
||||||
|
$expectedLockFilePath = '/.mage/production.lock'; |
||||||
|
$expectedExitCode = 0; |
||||||
|
|
||||||
|
self::$mockName = $name; |
||||||
|
self::$mockEmail = $email; |
||||||
|
self::$mockDesc = $description; |
||||||
|
|
||||||
|
$configMock = $this->getMock('Mage\Config'); |
||||||
|
$configMock->expects($this->atLeastOnce()) |
||||||
|
->method('getEnvironment') |
||||||
|
->willReturn('production'); |
||||||
|
$this->lockCommand->setConfig($configMock); |
||||||
|
|
||||||
|
$actualExitCode = $this->lockCommand->run(); |
||||||
|
|
||||||
|
$this->assertEquals($expectedExitCode, $actualExitCode); |
||||||
|
$this->assertEquals($expectedLockFileContents, self::$filePutContentsResult); |
||||||
|
$this->assertEquals($expectedLockFilePath, self::$filePutContentsFile); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue