<?php
/*
* This file is part of Chevere.
*
* (c) Rodolfo Berrios <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Chevere\Tests;
use Chevere\Tests\src\TestActionAppendString;
use Chevere\Tests\src\TestActionIntToString;
use Chevere\Tests\src\TestActionNoParams;
use Chevere\Tests\src\TestActionParamFooResponseBar;
use Chevere\Workflow\Jobs;
use Chevere\Workflow\Workflow;
use OverflowException;
use PHPUnit\Framework\TestCase;
use function Chevere\Workflow\async;
use function Chevere\Workflow\response;
use function Chevere\Workflow\run;
use function Chevere\Workflow\sync;
use function Chevere\Workflow\variable;
use function Chevere\Workflow\workflow;
final class WorkflowTest extends TestCase
{
public function testConstruct(): void
{
$job = async(new TestActionNoParams());
$jobs = new Jobs(job: $job);
$workflow = new Workflow($jobs);
$this->assertCount(1, $workflow);
$this->assertTrue($workflow->jobs()->has('job'));
$this->assertSame(['job'], $workflow->jobs()->keys());
}
public function testWithAdded(): void
{
$job = async(new TestActionNoParams());
$jobs = new Jobs(job1: $job);
$workflow = new Workflow($jobs);
$workflowWithAddedStep = $workflow->withAddedJob(job2: $job);
$this->assertNotSame($workflow, $workflowWithAddedStep);
$this->assertCount(2, $workflowWithAddedStep);
$this->assertTrue($workflowWithAddedStep->jobs()->has('job1'));
$this->assertTrue($workflowWithAddedStep->jobs()->has('job2'));
$this->assertSame(['job1', 'job2'], $workflowWithAddedStep->jobs()->keys());
$this->expectException(OverflowException::class);
$workflowWithAddedStep->withAddedJob(job1: $job);
}
public function testWithAddedJobWithArguments(): void
{
$job = async(
new TestActionParamFooResponseBar(),
foo: 'bar'
);
$workflow = (new Workflow(new Jobs(job: $job)))
->withAddedJob(name: $job);
$this->assertSame($job, $workflow->jobs()->get('name'));
}
public function testWithVariable(): void
{
$workflow = new Workflow(
new Jobs(
job1: async(
new TestActionParamFooResponseBar(),
foo: variable('foo')
),
)
);
$this->assertTrue($workflow->jobs()->has('job1'));
$this->assertTrue($workflow->jobs()->variables()->has('foo'));
$this->assertTrue($workflow->parameters()->has('foo'));
$workflow = $workflow
->withAddedJob(
job2: async(
new TestActionParamFooResponseBar(),
foo: variable('foo'),
)->withRunIf(variable('boolean'))
);
$this->assertTrue($workflow->parameters()->has('foo'));
}
public function testWithReference(): void
{
$jobs = new Jobs(
job1: async(
new TestActionAppendString(),
string: 'test',
),
job2: async(
new TestActionAppendString(),
string: response('job1'),
)
);
$workflow = new Workflow($jobs);
$this->assertTrue($workflow->jobs()->has('job1'));
$this->assertContains('job1', $workflow->jobs()->get('job2')->dependencies());
$run = run($workflow);
$this->assertSame('test!!', $run->response('job2')->string());
}
public function testIntToString(): void
{
$workflow = workflow(
toString: sync(
new TestActionIntToString(),
int: 1234
)
);
$run = run($workflow);
$this->assertSame('1234', $run->response('toString')->string());
}
}
|