| 
<?php
 namespace Pharaonic\Laravel\Executor\Tests;
 
 use Illuminate\Foundation\Testing\RefreshDatabase;
 use Pharaonic\Laravel\Executor\Models\Executor;
 use Pharaonic\Laravel\Executor\Services\ExecutorService;
 
 class ExecutorTest extends TestCase
 {
 use RefreshDatabase;
 
 public function testMakeExecutor()
 {
 $this->artisan('execute:make', ['name' => 'testMakeExecutor'])
 ->assertExitCode(0);
 }
 
 public function testMakeOnceExecutor()
 {
 $this->artisan('execute:make', [
 'name' => 'testMakeOnceExecutor',
 '--once' => true,
 ])
 ->assertExitCode(0);
 }
 
 public function testMakeExecutorWithTag()
 {
 $this->artisan('execute:make', [
 'name' => 'testMakeExecutorWithTag',
 '--tag' => 'test',
 ])
 ->assertExitCode(0);
 }
 
 public function testMakeOnceExecutorWithTag()
 {
 $this->artisan('execute:make', [
 'name' => 'testMakeOnceExecutorWithTag',
 '--once' => true,
 '--tag' => 'test',
 ])
 ->assertExitCode(0);
 }
 
 public function testExecute()
 {
 $this->testMakeExecutor();
 $this->artisan('execute')->assertOk();
 $this->assertEquals(1, Executor::count());
 }
 
 public function testRollbackSuccess()
 {
 $this->testMakeExecutor();
 $this->artisan('execute')->assertOk();
 $this->artisan('execute:rollback')->assertOk();
 $this->assertEquals(0, Executor::count());
 }
 
 public function testRollbackFailed()
 {
 $this->artisan('execute:rollback')->assertFailed();
 }
 
 public function testFreshExecutors()
 {
 $this->testMakeExecutor();
 $this->artisan('execute:fresh')->assertOk();
 $this->assertEquals(1, Executor::count());
 }
 
 public function testStatusOfExecutors()
 {
 $this->testMakeExecutor();
 
 $executors = (new ExecutorService)->sync();
 
 $this->artisan('execute:status')
 ->assertOk()
 ->expectsTable(
 ['Name', 'Type', 'Tag', 'Batch', 'Executed'],
 $executors->map(function ($executor) {
 return [
 $executor['name'],
 ucfirst($executor['type']->name),
 $executor['tag'],
 $executor['model']->batch,
 $executor['model']->executed > 0 ? '<info>Yes</info>' : '<comment>No</comment>',
 ];
 })
 );
 }
 }
 
 |