|
4 | 4 |
|
5 | 5 | namespace Tests\Unit; |
6 | 6 |
|
| 7 | +use BadMethodCallException; |
7 | 8 | use Illuminate\Support\Carbon; |
8 | 9 | use Illuminate\Support\Facades\Event; |
9 | 10 | use Tests\Fixtures\TestActivity; |
10 | 11 | use Tests\Fixtures\TestChildWorkflow; |
11 | 12 | use Tests\Fixtures\TestOtherActivity; |
12 | 13 | use Tests\Fixtures\TestParentWorkflow; |
| 14 | +use Tests\Fixtures\TestThrowOnReturnWorkflow; |
13 | 15 | use Tests\Fixtures\TestWorkflow; |
| 16 | +use Tests\Fixtures\TestYieldNonPromiseWorkflow; |
14 | 17 | use Tests\TestCase; |
15 | 18 | use Workflow\Events\WorkflowFailed; |
16 | 19 | use Workflow\Exception; |
@@ -276,4 +279,52 @@ public function testParentPending(): void |
276 | 279 | $this->assertSame(WorkflowCompletedStatus::class, $childWorkflow->status()); |
277 | 280 | $this->assertSame('other', $childWorkflow->output()); |
278 | 281 | } |
| 282 | + |
| 283 | + public function testThrowsWhenExecuteMethodIsMissing(): void |
| 284 | + { |
| 285 | + $stub = WorkflowStub::load(WorkflowStub::make(TestWorkflow::class)->id()); |
| 286 | + $storedWorkflow = StoredWorkflow::findOrFail($stub->id()); |
| 287 | + $storedWorkflow->update([ |
| 288 | + 'arguments' => Serializer::serialize([]), |
| 289 | + 'status' => WorkflowPendingStatus::class, |
| 290 | + ]); |
| 291 | + |
| 292 | + $this->expectException(BadMethodCallException::class); |
| 293 | + $this->expectExceptionMessage('Execute method not implemented.'); |
| 294 | + |
| 295 | + $workflow = new Workflow($storedWorkflow); |
| 296 | + $workflow->handle(); |
| 297 | + } |
| 298 | + |
| 299 | + public function testThrowsWhenYieldNonPromise(): void |
| 300 | + { |
| 301 | + $stub = WorkflowStub::load(WorkflowStub::make(TestYieldNonPromiseWorkflow::class)->id()); |
| 302 | + $storedWorkflow = StoredWorkflow::findOrFail($stub->id()); |
| 303 | + $storedWorkflow->update([ |
| 304 | + 'arguments' => Serializer::serialize([]), |
| 305 | + 'status' => WorkflowPendingStatus::class, |
| 306 | + ]); |
| 307 | + |
| 308 | + $this->expectException(\Exception::class); |
| 309 | + $this->expectExceptionMessage('something went wrong'); |
| 310 | + |
| 311 | + $workflow = new TestYieldNonPromiseWorkflow($storedWorkflow); |
| 312 | + $workflow->handle(); |
| 313 | + } |
| 314 | + |
| 315 | + public function testThrowsWrappedException(): void |
| 316 | + { |
| 317 | + $stub = WorkflowStub::load(WorkflowStub::make(TestThrowOnReturnWorkflow::class)->id()); |
| 318 | + $storedWorkflow = StoredWorkflow::findOrFail($stub->id()); |
| 319 | + $storedWorkflow->update([ |
| 320 | + 'arguments' => Serializer::serialize([]), |
| 321 | + 'status' => WorkflowPendingStatus::class, |
| 322 | + ]); |
| 323 | + |
| 324 | + $this->expectException(\Exception::class); |
| 325 | + $this->expectExceptionMessage('Workflow failed.'); |
| 326 | + |
| 327 | + $workflow = new TestThrowOnReturnWorkflow($storedWorkflow); |
| 328 | + $workflow->handle(); |
| 329 | + } |
279 | 330 | } |
0 commit comments