Skip to content

Commit 9460b82

Browse files
authored
Refactored & factorized the way jobs are executed (#59)
* Refactored & factorized the way jobs are executed * Fixed PHP 8.0 array with keys unpack * Fixed checkstyle * Add missing JobContainer class comment * Add test case to prove status can be changed by event listeners * Fixed summary log array_merge * Simplified integration tests jobs building * Use PHP 8 promoted properties in JobContainer * Fixed docs after refactoring
1 parent 8372b79 commit 9460b82

File tree

2 files changed

+38
-10
lines changed

2 files changed

+38
-10
lines changed

src/LaunchJobMessageHandler.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,23 @@
55
namespace Yokai\Batch\Bridge\Symfony\Messenger;
66

77
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
8-
use Yokai\Batch\Launcher\JobLauncherInterface;
8+
use Yokai\Batch\Job\JobExecutionAccessor;
9+
use Yokai\Batch\Job\JobExecutor;
910

1011
/**
1112
* Answer to {@see LaunchJobMessage} and launch requested job.
1213
*/
1314
final class LaunchJobMessageHandler implements MessageHandlerInterface
1415
{
1516
public function __construct(
16-
private JobLauncherInterface $jobLauncher,
17+
private JobExecutionAccessor $jobExecutionAccessor,
18+
private JobExecutor $jobExecutor,
1719
) {
1820
}
1921

2022
public function __invoke(LaunchJobMessage $message): void
2123
{
22-
$this->jobLauncher->launch($message->getJobName(), $message->getConfiguration());
24+
$execution = $this->jobExecutionAccessor->get($message->getJobName(), $message->getConfiguration());
25+
$this->jobExecutor->execute($execution);
2326
}
2427
}

tests/LaunchJobMessageHandlerTest.php

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,51 @@
55
namespace Yokai\Batch\Tests\Bridge\Symfony\Messenger;
66

77
use PHPUnit\Framework\TestCase;
8+
use Prophecy\PhpUnit\ProphecyTrait;
89
use Yokai\Batch\Bridge\Symfony\Messenger\LaunchJobMessage;
910
use Yokai\Batch\Bridge\Symfony\Messenger\LaunchJobMessageHandler;
11+
use Yokai\Batch\Factory\JobExecutionFactory;
12+
use Yokai\Batch\Job\JobExecutionAccessor;
13+
use Yokai\Batch\Job\JobExecutor;
14+
use Yokai\Batch\Job\JobInterface;
15+
use Yokai\Batch\JobExecution;
16+
use Yokai\Batch\Registry\JobRegistry;
1017
use Yokai\Batch\Test\Factory\SequenceJobExecutionIdGenerator;
11-
use Yokai\Batch\Test\Launcher\BufferingJobLauncher;
18+
use Yokai\Batch\Test\Storage\InMemoryJobExecutionStorage;
1219

1320
final class LaunchJobMessageHandlerTest extends TestCase
1421
{
22+
use ProphecyTrait;
23+
1524
public function testInvoke(): void
1625
{
17-
$launcher = new BufferingJobLauncher(new SequenceJobExecutionIdGenerator(['123456']));
26+
$job = new class implements JobInterface {
27+
public JobExecution $execution;
28+
public function execute(JobExecution $jobExecution): void
29+
{
30+
$this->execution = $jobExecution;
31+
}
32+
};
1833

19-
$handler = new LaunchJobMessageHandler($launcher);
34+
$jobExecutionStorage = new InMemoryJobExecutionStorage();
35+
$handler = new LaunchJobMessageHandler(
36+
new JobExecutionAccessor(
37+
new JobExecutionFactory(new SequenceJobExecutionIdGenerator(['123456'])),
38+
$jobExecutionStorage,
39+
),
40+
new JobExecutor(
41+
JobRegistry::fromJobArray(['foo' => $job]),
42+
$jobExecutionStorage,
43+
null
44+
)
45+
);
2046
$handler->__invoke(new LaunchJobMessage('foo', ['bar' => 'BAR']));
2147

22-
self::assertCount(1, $launcher->getExecutions());
23-
self::assertSame('foo', $launcher->getExecutions()[0]->getJobName());
24-
self::assertSame('123456', $launcher->getExecutions()[0]->getId());
48+
self::assertSame('foo', $job->execution->getJobName());
49+
self::assertSame('123456', $job->execution->getId());
2550
self::assertSame(
2651
['bar' => 'BAR', '_id' => '123456'],
27-
\iterator_to_array($launcher->getExecutions()[0]->getParameters()->getIterator())
52+
$job->execution->getParameters()->all()
2853
);
2954
}
3055
}

0 commit comments

Comments
 (0)