Skip to content

Commit 42262fa

Browse files
authored
feat(core): allow defer callbacks to receive parameters from container (#798)
1 parent d58d028 commit 42262fa

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

src/Tempest/Core/src/Kernel/FinishDeferredTasks.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,21 @@
44

55
namespace Tempest\Core\Kernel;
66

7+
use Tempest\Container\Container;
78
use Tempest\Core\DeferredTasks;
89

910
final readonly class FinishDeferredTasks
1011
{
1112
public function __construct(
1213
private DeferredTasks $deferredTasks,
14+
private Container $container,
1315
) {
1416
}
1517

1618
public function __invoke(): void
1719
{
1820
foreach ($this->deferredTasks->getTasks() as $task) {
19-
$task();
21+
$this->container->invoke($task);
2022
}
2123
}
2224
}

tests/Integration/Core/DeferredTasksTest.php

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
namespace Tests\Tempest\Integration\Core;
66

7+
use Tempest\Container\Container;
78
use Tempest\Core\Kernel\FinishDeferredTasks;
9+
use function Tempest\defer;
810
use function Tempest\uri;
911
use Tests\Tempest\Fixtures\Controllers\DeferController;
1012
use Tests\Tempest\Integration\FrameworkIntegrationTestCase;
@@ -22,8 +24,23 @@ public function test_deferred_tasks_are_executed(): void
2224
->get(uri(DeferController::class))
2325
->assertOk();
2426

25-
$this->container->get(FinishDeferredTasks::class)();
27+
$this->container->invoke(FinishDeferredTasks::class);
2628

2729
$this->assertTrue(DeferController::$executed);
2830
}
31+
32+
public function test_deferred_tasks_are_executed_with_container_parameters(): void
33+
{
34+
$executed = false;
35+
36+
defer(function (Container $container) use (&$executed): void {
37+
$container->invoke(function () use (&$executed): void {
38+
$executed = true;
39+
});
40+
});
41+
42+
$this->container->invoke(FinishDeferredTasks::class);
43+
44+
$this->assertTrue($executed);
45+
}
2946
}

0 commit comments

Comments
 (0)