From 59467693e6782d7f1995d19d2bf1558ec55d0afe Mon Sep 17 00:00:00 2001 From: Julian Hundeloh <5358638+jaulz@users.noreply.github.com> Date: Sat, 9 Nov 2024 20:58:45 +0100 Subject: [PATCH] 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 --- src/JobPipeline.php | 2 +- tests/JobPipelineTest.php | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/JobPipeline.php b/src/JobPipeline.php index a3f7bc3..f77dabf 100644 --- a/src/JobPipeline.php +++ b/src/JobPipeline.php @@ -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; diff --git a/tests/JobPipelineTest.php b/tests/JobPipelineTest.php index 6331770..7724a6b 100644 --- a/tests/JobPipelineTest.php +++ b/tests/JobPipelineTest.php @@ -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