Add PresentationBuilder
This commit is contained in:
parent
a2fc812ddb
commit
9148ec5a65
3 changed files with 77 additions and 47 deletions
40
modules/opd_presentations/src/PresentationBuilder.php
Normal file
40
modules/opd_presentations/src/PresentationBuilder.php
Normal file
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Drupal\opd_presentations;
|
||||
|
||||
final class PresentationBuilder {
|
||||
|
||||
public function __construct(
|
||||
private string $title,
|
||||
private array $events = [],
|
||||
private bool $isPublished = TRUE,
|
||||
) {
|
||||
}
|
||||
|
||||
public function build(): Presentation {
|
||||
return Presentation::create([
|
||||
'field_events' => $this->events,
|
||||
'status' => $this->isPublished,
|
||||
'title' => $this->title,
|
||||
]);
|
||||
}
|
||||
|
||||
public function setEvents(array $events): self {
|
||||
$this->events = $events;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setPublished(bool $isPublished = TRUE): self {
|
||||
$this->isPublished = $isPublished;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public static function create(string $title): self {
|
||||
return new self($title);
|
||||
}
|
||||
|
||||
}
|
|
@ -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\PresentationBuilder;
|
||||
use Drupal\opd_presentations\PresentationCounter;
|
||||
use weitzman\DrupalTestTraits\ExistingSiteBase;
|
||||
|
||||
|
@ -19,14 +20,16 @@ final class PresentationCounterTest extends ExistingSiteBase {
|
|||
$counter = $this->container->get(PresentationCounter::class);
|
||||
assert($counter instanceof PresentationCounter);
|
||||
|
||||
$this->createPresentation(
|
||||
events: [
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('yesterday'),
|
||||
eventName: $this->randomString(),
|
||||
),
|
||||
],
|
||||
);
|
||||
$events = [
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('yesterday'),
|
||||
eventName: $this->randomString(),
|
||||
),
|
||||
];
|
||||
|
||||
PresentationBuilder::create('')
|
||||
->setEvents($events)
|
||||
->build();
|
||||
|
||||
$this->assertGreaterThanOrEqual(
|
||||
actual: $counter->getPastCount(),
|
||||
|
@ -40,15 +43,17 @@ final class PresentationCounterTest extends ExistingSiteBase {
|
|||
|
||||
$count = $counter->getPastCount();
|
||||
|
||||
$this->createPresentation(
|
||||
events: [
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('yesterday'),
|
||||
eventName: $this->randomString(),
|
||||
),
|
||||
],
|
||||
isPublished: FALSE,
|
||||
);
|
||||
$events = [
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('yesterday'),
|
||||
eventName: $this->randomString(),
|
||||
),
|
||||
];
|
||||
|
||||
$presentation = PresentationBuilder::create('')
|
||||
->setEvents($events)
|
||||
->setPublished(FALSE)
|
||||
->build();
|
||||
|
||||
$this->assertSame(
|
||||
actual: $counter->getPastCount(),
|
||||
|
@ -68,19 +73,22 @@ final class PresentationCounterTest extends ExistingSiteBase {
|
|||
expected: 0,
|
||||
);
|
||||
|
||||
$this->createPresentation(
|
||||
events: [
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('tomorrow'),
|
||||
eventName: $this->randomString(),
|
||||
),
|
||||
$events = [
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('tomorrow'),
|
||||
eventName: $this->randomString(),
|
||||
),
|
||||
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('yesterday'),
|
||||
eventName: $this->randomString(),
|
||||
),
|
||||
],
|
||||
);
|
||||
$this->createEvent(
|
||||
eventDate: Date::fromString('yesterday'),
|
||||
eventName: $this->randomString(),
|
||||
),
|
||||
];
|
||||
|
||||
$presentation = PresentationBuilder::create($this->randomString())
|
||||
->setEvents($events)
|
||||
->build();
|
||||
$presentation->save();
|
||||
|
||||
$counter = $this->container->get(PresentationCounter::class);
|
||||
|
||||
|
|
|
@ -4,32 +4,14 @@ 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\Presentation;
|
||||
|
||||
trait PresentationCreationTrait {
|
||||
|
||||
use EntityCreationTrait;
|
||||
use NodeCreationTrait;
|
||||
|
||||
/**
|
||||
* @param Event[] $events
|
||||
*/
|
||||
private function createPresentation(array $events, bool $isPublished = TRUE): Presentation {
|
||||
$presentation = $this->createNode([
|
||||
'field_events' => $events,
|
||||
'status' => $isPublished,
|
||||
'type' => Presentation::NODE_TYPE,
|
||||
]);
|
||||
|
||||
assert($presentation instanceof Presentation);
|
||||
|
||||
return $presentation;
|
||||
}
|
||||
|
||||
private function createEvent(string $eventName, Date $eventDate): Event {
|
||||
$event = $this->createEntity(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue