Add Events::fromDateStrings
This commit is contained in:
parent
678263c75c
commit
3ba181a753
4 changed files with 30 additions and 48 deletions
|
@ -35,6 +35,27 @@ readonly final class Events implements \Countable, \IteratorAggregate {
|
|||
->filter(fn (Event $event): bool => $event->isPast());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param non-empty-string[] $events
|
||||
*/
|
||||
public static function fromDateStrings(string ...$dates): self {
|
||||
$events = array_map(
|
||||
array: $dates,
|
||||
callback: fn (string $date): Event => Event::create([
|
||||
'field_date' => strtotime($date),
|
||||
]),
|
||||
);
|
||||
|
||||
return new self($events);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Event[]
|
||||
*/
|
||||
public function toEvents(): array {
|
||||
return $this->events;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Event[] $events
|
||||
*/
|
||||
|
|
|
@ -7,6 +7,7 @@ namespace Drupal\Tests\opd_presentations;
|
|||
use Drupal\Tests\RandomGeneratorTrait;
|
||||
use Drupal\Tests\opd_presentations\Traits\PresentationCreationTrait;
|
||||
use Drupal\opd_presentations\Date;
|
||||
use Drupal\opd_presentations\Events;
|
||||
use Drupal\opd_presentations\PresentationCounter;
|
||||
use weitzman\DrupalTestTraits\ExistingSiteBase;
|
||||
|
||||
|
@ -20,12 +21,7 @@ final class PresentationCounterTest extends ExistingSiteBase {
|
|||
assert($counter instanceof PresentationCounter);
|
||||
|
||||
$this->createPresentation(
|
||||
events: [
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('yesterday'),
|
||||
eventName: $this->randomString(),
|
||||
),
|
||||
],
|
||||
Events::fromDateStrings('yesterday'),
|
||||
);
|
||||
|
||||
$this->assertGreaterThanOrEqual(
|
||||
|
@ -41,12 +37,7 @@ final class PresentationCounterTest extends ExistingSiteBase {
|
|||
$count = $counter->getPastCount();
|
||||
|
||||
$this->createPresentation(
|
||||
events: [
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('yesterday'),
|
||||
eventName: $this->randomString(),
|
||||
),
|
||||
],
|
||||
events: Events::fromDateStrings('yesterday'),
|
||||
isPublished: FALSE,
|
||||
);
|
||||
|
||||
|
@ -69,17 +60,7 @@ final class PresentationCounterTest extends ExistingSiteBase {
|
|||
);
|
||||
|
||||
$this->createPresentation(
|
||||
events: [
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('tomorrow'),
|
||||
eventName: $this->randomString(),
|
||||
),
|
||||
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('yesterday'),
|
||||
eventName: $this->randomString(),
|
||||
),
|
||||
],
|
||||
Events::fromDateStrings('tomorrow', 'yesterday'),
|
||||
);
|
||||
|
||||
$counter = $this->container->get(PresentationCounter::class);
|
||||
|
|
|
@ -5,7 +5,7 @@ declare(strict_types=1);
|
|||
namespace Drupal\opd_presentations\Functional;
|
||||
|
||||
use Drupal\Tests\opd_presentations\Traits\PresentationCreationTrait;
|
||||
use Drupal\opd_presentations\Date;
|
||||
use Drupal\opd_presentations\Events;
|
||||
use weitzman\DrupalTestTraits\ExistingSiteBase;
|
||||
|
||||
final class PresentationTest extends ExistingSiteBase {
|
||||
|
@ -14,22 +14,7 @@ final class PresentationTest extends ExistingSiteBase {
|
|||
|
||||
public function test_only_past_events_are_returned(): void {
|
||||
$presentation = $this->createPresentation(
|
||||
events: [
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('now'),
|
||||
eventName: 'PHP South West',
|
||||
),
|
||||
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('yesterday'),
|
||||
eventName: 'DrupalCon Lille',
|
||||
),
|
||||
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('tomorrow'),
|
||||
eventName: 'PHP Oxford',
|
||||
),
|
||||
],
|
||||
events: Events::fromDateStrings('now', 'yesterday', 'tomorrow'),
|
||||
);
|
||||
|
||||
$events = $presentation->getEvents()->getPast();
|
||||
|
@ -38,11 +23,6 @@ final class PresentationTest extends ExistingSiteBase {
|
|||
expectedCount: 1,
|
||||
haystack: $events,
|
||||
);
|
||||
|
||||
$this->assertSame(
|
||||
actual: $events->first()->getEventName(),
|
||||
expected: 'DrupalCon Lille',
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,11 +4,11 @@ declare(strict_types=1);
|
|||
|
||||
namespace Drupal\Tests\opd_presentations\Traits;
|
||||
|
||||
use Drupal\Core\Datetime\DrupalDateTime;
|
||||
use Drupal\Tests\node\Traits\NodeCreationTrait;
|
||||
use Drupal\ctools\Testing\EntityCreationTrait;
|
||||
use Drupal\opd_presentations\Date;
|
||||
use Drupal\opd_presentations\Event;
|
||||
use Drupal\opd_presentations\Events;
|
||||
use Drupal\opd_presentations\Presentation;
|
||||
|
||||
trait PresentationCreationTrait {
|
||||
|
@ -19,9 +19,9 @@ trait PresentationCreationTrait {
|
|||
/**
|
||||
* @param Event[] $events
|
||||
*/
|
||||
private function createPresentation(array $events, bool $isPublished = TRUE): Presentation {
|
||||
private function createPresentation(Events $events, bool $isPublished = TRUE): Presentation {
|
||||
$presentation = $this->createNode([
|
||||
'field_events' => $events,
|
||||
'field_events' => $events->toEvents(),
|
||||
'status' => $isPublished,
|
||||
'type' => Presentation::NODE_TYPE,
|
||||
]);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue