1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
<?php
namespace Illuminate\Tests\Console;
use Illuminate\Console\Command;
use Illuminate\Console\CommandMutex;
use Illuminate\Contracts\Console\Isolatable;
use Illuminate\Foundation\Application;
use Mockery as m;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\NullOutput;
class CommandMutexTest extends TestCase
{
/**
* @var Command
*/
protected $command;
/**
* @var CommandMutex
*/
protected $commandMutex;
protected function setUp(): void
{
$this->command = new class extends Command implements Isolatable
{
public $ran = 0;
public function __invoke()
{
$this->ran++;
}
};
$this->commandMutex = m::mock(CommandMutex::class);
$app = new Application;
$app->instance(CommandMutex::class, $this->commandMutex);
$this->command->setLaravel($app);
}
public function testCanRunIsolatedCommandIfNotBlocked()
{
$this->commandMutex->shouldReceive('create')
->andReturn(true)
->once();
$this->commandMutex->shouldReceive('forget')
->andReturn(true)
->once();
$this->runCommand();
$this->assertEquals(1, $this->command->ran);
}
public function testCannotRunIsolatedCommandIfBlocked()
{
$this->commandMutex->shouldReceive('create')
->andReturn(false)
->once();
$this->runCommand();
$this->assertEquals(0, $this->command->ran);
}
public function testCanRunCommandAgainAfterOtherCommandFinished()
{
$this->commandMutex->shouldReceive('create')
->andReturn(true)
->twice();
$this->commandMutex->shouldReceive('forget')
->andReturn(true)
->twice();
$this->runCommand();
$this->runCommand();
$this->assertEquals(2, $this->command->ran);
}
public function testCanRunCommandAgainNonAutomated()
{
$this->commandMutex->shouldNotHaveBeenCalled();
$this->runCommand(false);
$this->assertEquals(1, $this->command->ran);
}
protected function runCommand($withIsolated = true)
{
$input = new ArrayInput(['--isolated' => $withIsolated]);
$output = new NullOutput;
$this->command->run($input, $output);
}
}
|