mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-13 05:44:24 +00:00
Fixed: a bug for range generatoion during week-end
The range generator failed during week-end, because no range is selected (lastStart and endDate is null). with this commit, the rangeGenerator may return null instead of an array, which means no sms will be send.
This commit is contained in:
parent
efe494d61f
commit
3c85b5ca92
@ -51,8 +51,13 @@ class CalendarForShortMessageProvider
|
|||||||
*/
|
*/
|
||||||
public function getCalendars(DateTimeImmutable $at): iterable
|
public function getCalendars(DateTimeImmutable $at): iterable
|
||||||
{
|
{
|
||||||
['startDate' => $startDate, 'endDate' => $endDate] = $this->rangeGenerator
|
$range = $this->rangeGenerator->generateRange($at);
|
||||||
->generateRange($at);
|
|
||||||
|
if (null === $range) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
['startDate' => $startDate, 'endDate' => $endDate] = $range;
|
||||||
|
|
||||||
$offset = 0;
|
$offset = 0;
|
||||||
$batchSize = 10;
|
$batchSize = 10;
|
||||||
|
@ -31,14 +31,14 @@ use UnexpectedValueException;
|
|||||||
*/
|
*/
|
||||||
class DefaultRangeGenerator implements RangeGeneratorInterface
|
class DefaultRangeGenerator implements RangeGeneratorInterface
|
||||||
{
|
{
|
||||||
public function generateRange(\DateTimeImmutable $date): array
|
public function generateRange(\DateTimeImmutable $date): ?array
|
||||||
{
|
{
|
||||||
$onMidnight = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $date->format('Y-m-d') . ' 00:00:00');
|
$onMidnight = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $date->format('Y-m-d') . ' 00:00:00');
|
||||||
|
|
||||||
switch ($dow = (int) $onMidnight->format('w')) {
|
switch ($dow = (int) $onMidnight->format('w')) {
|
||||||
case 6: // Saturday
|
case 6: // Saturday
|
||||||
case 0: // Sunday
|
case 0: // Sunday
|
||||||
return ['startDate' => null, 'endDate' => null];
|
return null;
|
||||||
|
|
||||||
case 1: // Monday
|
case 1: // Monday
|
||||||
// send for Tuesday and Wednesday
|
// send for Tuesday and Wednesday
|
||||||
|
@ -23,7 +23,7 @@ use DateTimeImmutable;
|
|||||||
interface RangeGeneratorInterface
|
interface RangeGeneratorInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @return array<startDate: \DateTimeImmutable, endDate: \DateTimeImmutable>
|
* @return ?array{startDate: DateTimeImmutable, endDate: DateTimeImmutable} when return is null, then no ShortMessage must be send
|
||||||
*/
|
*/
|
||||||
public function generateRange(DateTimeImmutable $date): array;
|
public function generateRange(DateTimeImmutable $date): ?array;
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ use Chill\CalendarBundle\Entity\Calendar;
|
|||||||
use Chill\CalendarBundle\Repository\CalendarRepository;
|
use Chill\CalendarBundle\Repository\CalendarRepository;
|
||||||
use Chill\CalendarBundle\Service\ShortMessageNotification\CalendarForShortMessageProvider;
|
use Chill\CalendarBundle\Service\ShortMessageNotification\CalendarForShortMessageProvider;
|
||||||
use Chill\CalendarBundle\Service\ShortMessageNotification\DefaultRangeGenerator;
|
use Chill\CalendarBundle\Service\ShortMessageNotification\DefaultRangeGenerator;
|
||||||
|
use Chill\CalendarBundle\Service\ShortMessageNotification\RangeGeneratorInterface;
|
||||||
use DateTimeImmutable;
|
use DateTimeImmutable;
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
@ -37,6 +38,32 @@ final class CalendarForShortMessageProviderTest extends TestCase
|
|||||||
{
|
{
|
||||||
use ProphecyTrait;
|
use ProphecyTrait;
|
||||||
|
|
||||||
|
public function testGenerateRangeIsNull()
|
||||||
|
{
|
||||||
|
$calendarRepository = $this->prophesize(CalendarRepository::class);
|
||||||
|
$calendarRepository->findByNotificationAvailable(
|
||||||
|
Argument::type(DateTimeImmutable::class),
|
||||||
|
Argument::type(DateTimeImmutable::class),
|
||||||
|
Argument::type('int'),
|
||||||
|
Argument::exact(0)
|
||||||
|
)->shouldBeCalledTimes(0);
|
||||||
|
$rangeGenerator = $this->prophesize(RangeGeneratorInterface::class);
|
||||||
|
$rangeGenerator->generateRange(Argument::type(DateTimeImmutable::class))->willReturn(null);
|
||||||
|
|
||||||
|
$em = $this->prophesize(EntityManagerInterface::class);
|
||||||
|
$em->clear()->shouldNotBeCalled();
|
||||||
|
|
||||||
|
$provider = new CalendarForShortMessageProvider(
|
||||||
|
$calendarRepository->reveal(),
|
||||||
|
$em->reveal(),
|
||||||
|
$rangeGenerator->reveal()
|
||||||
|
);
|
||||||
|
|
||||||
|
$calendars = iterator_to_array($provider->getCalendars(new DateTimeImmutable('now')));
|
||||||
|
|
||||||
|
$this->assertEquals(0, count($calendars));
|
||||||
|
}
|
||||||
|
|
||||||
public function testGetCalendars()
|
public function testGetCalendars()
|
||||||
{
|
{
|
||||||
$calendarRepository = $this->prophesize(CalendarRepository::class);
|
$calendarRepository = $this->prophesize(CalendarRepository::class);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user