-
Notifications
You must be signed in to change notification settings - Fork 167
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Marian Bäuerle
committed
Feb 5, 2017
1 parent
b36f90e
commit 49d5587
Showing
2 changed files
with
153 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
<?php | ||
/* | ||
* This file is part of the Magallanes package. | ||
* | ||
* (c) Andrés Montañez <andres@andresmontanez.com> | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
|
||
namespace Mage\Task\BuiltIn\FS; | ||
|
||
use Symfony\Component\Process\Process; | ||
use Exception; | ||
|
||
/** | ||
* File System Task - Copy a File | ||
* | ||
* @author Marian Bäuerle | ||
*/ | ||
class ChangeModeTask extends AbstractFileTask | ||
{ | ||
public function getName() | ||
{ | ||
return 'fs/chmod'; | ||
} | ||
|
||
public function getDescription() | ||
{ | ||
try { | ||
return sprintf('[FS] Change mode of "%s" to "%s" with flags "%s"', $this->getFile('file'), $this->options['mode'], $this->options['flags']); | ||
} catch (Exception $exception) { | ||
return '[FS] Chmod [missing parameters]'; | ||
} | ||
} | ||
|
||
public function execute() | ||
{ | ||
$file = $this->getFile('file'); | ||
|
||
$cmd = sprintf('chmod %s %s %s', $this->options['flags'], $this->options['mode'], $file); | ||
|
||
/** @var Process $process */ | ||
$process = $this->runtime->runCommand($cmd); | ||
|
||
return $process->isSuccessful(); | ||
} | ||
|
||
protected function getParameters() | ||
{ | ||
return ['file', 'mode', 'flags']; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
<?php | ||
/* | ||
* This file is part of the Magallanes package. | ||
* | ||
* (c) Andrés Montañez <andres@andresmontanez.com> | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
|
||
namespace Mage\Tests\Task\BuiltIn; | ||
|
||
use Mage\Task\Exception\ErrorException; | ||
use Mage\Task\BuiltIn\FS\ChangeModeTask; | ||
use Exception; | ||
use Mage\Tests\Runtime\RuntimeMockup; | ||
use PHPUnit_Framework_TestCase as TestCase; | ||
|
||
class ChangeModeTest extends TestCase | ||
{ | ||
public function testChangeModeTask() | ||
{ | ||
$runtime = new RuntimeMockup(); | ||
$runtime->setConfiguration(['environments' => ['test' => []]]); | ||
$runtime->setEnvironment('test'); | ||
|
||
$task = new ChangeModeTask(); | ||
$task->setOptions(['file' => 'a.txt', 'flags' => '-R', 'mode' => 'o+w']); | ||
$task->setRuntime($runtime); | ||
|
||
$this->assertContains('a.txt', $task->getDescription()); | ||
$this->assertContains('-R', $task->getDescription()); | ||
$this->assertContains('o+w', $task->getDescription()); | ||
$task->execute(); | ||
|
||
$ranCommands = $runtime->getRanCommands(); | ||
|
||
$testCase = array( | ||
0 => 'chmod -R o+w a.txt', | ||
); | ||
|
||
// Check total of Executed Commands | ||
$this->assertEquals(count($testCase), count($ranCommands)); | ||
|
||
// Check Generated Commands | ||
foreach ($testCase as $index => $command) { | ||
$this->assertEquals($command, $ranCommands[$index]); | ||
} | ||
} | ||
|
||
public function testChangeModeReplaceTask() | ||
{ | ||
$runtime = new RuntimeMockup(); | ||
$runtime->setConfiguration(['environments' => ['test' => []]]); | ||
$runtime->setEnvironment('test'); | ||
|
||
$task = new ChangeModeTask(); | ||
$task->setOptions(['file' => '%environment%.txt', 'flags' => '-R', 'mode' => 'o+w']); | ||
$task->setRuntime($runtime); | ||
|
||
$this->assertContains('test.txt', $task->getDescription()); | ||
$this->assertContains('-R', $task->getDescription()); | ||
$this->assertContains('o+w', $task->getDescription()); | ||
$task->execute(); | ||
|
||
$ranCommands = $runtime->getRanCommands(); | ||
|
||
$testCase = array( | ||
0 => 'chmod -R o+w test.txt', | ||
); | ||
|
||
// Check total of Executed Commands | ||
$this->assertEquals(count($testCase), count($ranCommands)); | ||
|
||
// Check Generated Commands | ||
foreach ($testCase as $index => $command) { | ||
$this->assertEquals($command, $ranCommands[$index]); | ||
} | ||
} | ||
|
||
public function testChangeModeBadOptionsTask() | ||
{ | ||
$runtime = new RuntimeMockup(); | ||
$runtime->setConfiguration(['environments' => ['test' => []]]); | ||
$runtime->setEnvironment('test'); | ||
|
||
$task = new ChangeModeTask(); | ||
$task->setOptions(['from' => 'a.txt', 'flags' => '-R', 'mode' => 'o+w']); | ||
$task->setRuntime($runtime); | ||
|
||
try { | ||
$this->assertContains('[missing parameters]', $task->getDescription()); | ||
$task->execute(); | ||
$this->assertTrue(false, 'Task should have raised an exception'); | ||
} catch (Exception $exception) { | ||
$this->assertTrue($exception instanceof ErrorException); | ||
$this->assertEquals('Parameter "file" is not defined', $exception->getMessage()); | ||
} | ||
} | ||
} |