diff --git a/modules/opd_presentations/src/PresentationBuilder.php b/modules/opd_presentations/src/PresentationBuilder.php new file mode 100644 index 000000000..8a9495bb9 --- /dev/null +++ b/modules/opd_presentations/src/PresentationBuilder.php @@ -0,0 +1,40 @@ + $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); + } + +} diff --git a/modules/opd_presentations/tests/src/Functional/PresentationCounterTest.php b/modules/opd_presentations/tests/src/Functional/PresentationCounterTest.php index 27e1e28d4..506c48bcc 100644 --- a/modules/opd_presentations/tests/src/Functional/PresentationCounterTest.php +++ b/modules/opd_presentations/tests/src/Functional/PresentationCounterTest.php @@ -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); diff --git a/modules/opd_presentations/tests/src/Traits/PresentationCreationTrait.php b/modules/opd_presentations/tests/src/Traits/PresentationCreationTrait.php index d165fe6e5..2a5baa791 100644 --- a/modules/opd_presentations/tests/src/Traits/PresentationCreationTrait.php +++ b/modules/opd_presentations/tests/src/Traits/PresentationCreationTrait.php @@ -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(