|
14 | 14 | usePHPUnit\Framework\TestCase; |
15 | 15 | useSymfony\Component\Cache\Adapter\ArrayAdapter; |
16 | 16 | useSymfony\Component\Clock\ClockInterface; |
| 17 | +useSymfony\Component\Scheduler\Generator\Checkpoint; |
17 | 18 | useSymfony\Component\Scheduler\Generator\MessageContext; |
18 | 19 | useSymfony\Component\Scheduler\Generator\MessageGenerator; |
19 | 20 | useSymfony\Component\Scheduler\RecurringMessage; |
@@ -128,6 +129,35 @@ public function testYieldedContext() |
128 | 129 | $this->assertEquals(self::makeDateTime('22:16:00'),$context->nextTriggerAt); |
129 | 130 | } |
130 | 131 |
|
| 132 | +publicfunctiontestCheckpointSavedInBrokenLoop():void |
| 133 | + { |
| 134 | +$now =self::makeDateTime('22:12:00'); |
| 135 | + |
| 136 | +$clock =$this->createMock(ClockInterface::class); |
| 137 | +$clock->method('now')->willReturnReference($now); |
| 138 | + |
| 139 | +$message =$this->createMessage((object) ['id' =>'message'],'22:13:00','22:14:00','22:16:00'); |
| 140 | +$schedule = (newSchedule())->add($message); |
| 141 | + |
| 142 | +$cache =newArrayAdapter(); |
| 143 | +$schedule->stateful($cache); |
| 144 | +$checkpoint =newCheckpoint('dummy', cache:$cache); |
| 145 | + |
| 146 | +$scheduler =newMessageGenerator($schedule,'dummy', clock:$clock, checkpoint:$checkpoint); |
| 147 | + |
| 148 | +// Warmup. The first run is always returns nothing. |
| 149 | +$this->assertSame([],iterator_to_array($scheduler->getMessages(),false)); |
| 150 | + |
| 151 | +$now =self::makeDateTime('22:13:10'); |
| 152 | + |
| 153 | +foreach ($scheduler->getMessages()as$message) { |
| 154 | +// Message is handled but loop is broken just after |
| 155 | +break; |
| 156 | + } |
| 157 | + |
| 158 | +$this->assertEquals(self::makeDateTime('22:13:00'),$checkpoint->time()); |
| 159 | + } |
| 160 | + |
131 | 161 | publicstaticfunctionmessagesProvider():\Generator |
132 | 162 | { |
133 | 163 | $first = (object) ['id' =>'first']; |
|