1
0
Fork 0
mirror of https://github.com/archtechx/jobpipeline.git synced 2025-12-12 06:44:03 +00:00

fix: handle errors in closures [1.x] (#16)

* fix: pass parameters to method

* test: add tests

* fix: just handle failures in closures correctly

* fix: remove obsolete change

* test: fix test

* test: run test sync
This commit is contained in:
Julian Hundeloh 2024-11-09 20:58:45 +01:00 committed by GitHub
parent 36474ffd21
commit 59467693e6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 18 additions and 1 deletions

View file

@ -67,7 +67,7 @@ class JobPipeline implements ShouldQueue
try {
$result = app()->call($job);
} catch (Throwable $exception) {
if (method_exists(get_class($job[0]), 'failed')) {
if (is_array($job) && method_exists(get_class($job[0]), 'failed')) {
call_user_func_array([$job[0], 'failed'], [$exception]);
} else {
throw $exception;

View file

@ -2,6 +2,7 @@
namespace Stancl\JobPipeline\Tests;
use Exception;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Queue;
@ -167,6 +168,22 @@ class JobPipelineTest extends TestCase
$this->assertTrue($passes);
}
/** @test */
public function failures_in_closures_will_throw_correctly()
{
$this->expectExceptionMessage('foobar');
Event::listen(TestEvent::class, JobPipeline::make([
function () {
throw new Exception('foobar');
}
])->send(function (TestEvent $event) {
return $this->valuestore;
})->shouldBeQueued(false)->toListener());
event(new TestEvent(new TestModel()));
}
}
class FooJob