mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Merge branch 'calendar/finalization' into testing
This commit is contained in:
commit
333e524136
@ -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