From ea2a8cd72557f33f0f10d67a0db1dc9a118bc500 Mon Sep 17 00:00:00 2001 From: valtzu Date: Thu, 26 Oct 2023 22:00:14 +0300 Subject: [PATCH] Add test for autoconfigured schedule --- .../Tests/Fixtures/Messenger/DummyTask.php | 6 ++-- .../Tests/Functional/SchedulerTest.php | 33 +++++++++++++++++++ .../Bundle/FrameworkBundle/composer.json | 1 + 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Messenger/DummyTask.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Messenger/DummyTask.php index ef8e986fa64b5..94773b4e1eb44 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Messenger/DummyTask.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Messenger/DummyTask.php @@ -8,13 +8,13 @@ #[AsCronTask(expression: '* * * * *', arguments: [1], schedule: 'dummy_task')] #[AsCronTask(expression: '0 * * * *', timezone: 'Europe/Berlin', arguments: ['2'], schedule: 'dummy_task', method: 'method2')] #[AsPeriodicTask(frequency: 5, arguments: [3], schedule: 'dummy_task')] -#[AsPeriodicTask(frequency: '1 day', from: '00:00:00', jitter: 60, arguments: ['4'], schedule: 'dummy_task', method: 'method4')] +#[AsPeriodicTask(frequency: '1 day', from: '2023-10-25 09:59:00Z', jitter: 60, arguments: ['4'], schedule: 'dummy_task', method: 'method4')] class DummyTask { public static array $calls = []; - #[AsPeriodicTask(frequency: '1 hour', from: '09:00:00', until: '17:00:00', arguments: ['b' => 6, 'a' => '5'], schedule: 'dummy_task')] - #[AsCronTask(expression: '0 0 * * *', arguments: ['7', 8], schedule: 'dummy_task')] + #[AsPeriodicTask(frequency: '1 hour', from: '2023-10-26 09:00:00Z', until: '2023-10-26 17:00:00Z', arguments: ['b' => 6, 'a' => '5'], schedule: 'dummy_task')] + #[AsCronTask(expression: '0 10 * * *', arguments: ['7', 8], schedule: 'dummy_task')] public function attributesOnMethod(string $a, int $b): void { self::$calls[__FUNCTION__][] = [$a, $b]; diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/SchedulerTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/SchedulerTest.php index 5aef74f473088..7b3cd197d5a70 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/SchedulerTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/SchedulerTest.php @@ -13,9 +13,12 @@ use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\BarMessage; use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\DummySchedule; +use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\DummyTask; use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage; use Symfony\Component\Clock\MockClock; use Symfony\Component\HttpKernel\KernelInterface; +use Symfony\Component\Messenger\MessageBusInterface; +use Symfony\Component\Messenger\Stamp\ReceivedStamp; use Symfony\Component\Scheduler\Messenger\SchedulerTransport; use Symfony\Component\Scheduler\RecurringMessage; @@ -54,6 +57,36 @@ public function testScheduler() $this->assertSame([$foo, $bar, $foo, $bar], $fetchMessages(600.0)); } + public function testAutoconfiguredScheduler() + { + $container = self::getContainer(); + $container->set('clock', $clock = new MockClock('2023-10-26T08:59:59Z')); + + $this->assertTrue($container->get('receivers')->has('scheduler_dummy_task')); + $this->assertInstanceOf(SchedulerTransport::class, $cron = $container->get('receivers')->get('scheduler_dummy_task')); + $bus = $container->get(MessageBusInterface::class); + + $getCalls = static function (float $sleep) use ($clock, $cron, $bus) { + DummyTask::$calls = []; + $clock->sleep($sleep); + foreach ($cron->get() as $message) { + $bus->dispatch($message->with(new ReceivedStamp('scheduler_dummy_task'))); + } + + return DummyTask::$calls; + }; + + $this->assertSame([], $getCalls(0)); + $this->assertSame(['__invoke' => [[1]], 'method2' => [['2']], 'attributesOnMethod' => [['5', 6]]], $getCalls(1)); + $this->assertSame(['__invoke' => [[3]]], $getCalls(5)); + $this->assertSame(['__invoke' => [[3]]], $getCalls(5)); + $calls = $getCalls(3595); + $this->assertCount(779, $calls['__invoke']); + $this->assertSame([['2']], $calls['method2']); + $this->assertSame([['4']], $calls['method4']); + $this->assertSame([['5', 6], ['7', 8]], $calls['attributesOnMethod']); + } + protected static function createKernel(array $options = []): KernelInterface { return parent::createKernel(['test_case' => 'Scheduler'] + $options); diff --git a/src/Symfony/Bundle/FrameworkBundle/composer.json b/src/Symfony/Bundle/FrameworkBundle/composer.json index 7d9bf9cdb2c94..e63a672e8c40b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/composer.json +++ b/src/Symfony/Bundle/FrameworkBundle/composer.json @@ -35,6 +35,7 @@ "require-dev": { "doctrine/annotations": "^1.13.1|^2", "doctrine/persistence": "^1.3|^2|^3", + "dragonmantank/cron-expression": "^3.1", "seld/jsonlint": "^1.10", "symfony/asset": "^5.4|^6.0|^7.0", "symfony/asset-mapper": "^6.4|^7.0", pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy