Created
June 28, 2019 20:03
-
-
Save wuestkamp/fe7c7f3d759ce440ee63d3425698a4de to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
... | |
class BookingManagerTest extends KernelTestCase | |
{ | |
public function setUp() | |
{ | |
self::bootKernel(); | |
} | |
/** | |
* @throws \Exception | |
*/ | |
public function testCreateBookingProcess(): void | |
{ | |
// first we clear the database | |
DatabaseCleaner::prime(self::$kernel); | |
// now we get all services directly from the container we will need for the test | |
/** @var Container $container */ | |
$container = self::$container; // this allows us to access even private services directly | |
/** @var EntityManager $em */ | |
$em = $container->get('doctrine')->getManager(); | |
/** @var BookingRepository $bookingRepository */ | |
$bookingRepository = $em->getRepository(Booking::class); | |
/** @var BookingManager $bookingManager */ | |
$bookingManager = $container->get(BookingManager::class); | |
/* @var DoctrineReceiver $doctrineReceiver */ | |
$doctrineReceiver = $container->get('messenger.transport.async'); | |
// now it gets interesting, we instantiate an instance of the Symfony Worker to be executed! | |
$eventDispatcher = $container->get(EventDispatcherInterface::class); | |
$logger = $container->get(LoggerInterface::class); | |
$messageBus = $container->get(MessageBusInterface::class); | |
$worker = new Worker([$doctrineReceiver], $messageBus, [], $eventDispatcher, $logger); | |
$worker = new Worker\StopWhenMessageCountIsExceededWorker($worker, 1, $logger); | |
// create a new booking | |
$bookingManager->createBooking('my-amazing-booking'); | |
// assure booking was created | |
$booking = $bookingRepository->findOneBy([]); | |
$this->assertEquals(1, $bookingRepository->count([])); | |
$this->assertEquals('my-amazing-booking', $booking->getName()); | |
$this->assertEquals(Booking::STATUS_NEW, $booking->getStatus()); | |
// assure a CreateBookingMessage was send and received by the messenger doctrine transport | |
$this->assertEquals(1, $doctrineReceiver->getMessageCount()); | |
$envelop = $doctrineReceiver->all()->current(); | |
$this->assertEquals(CreateBookingMessage::class, get_class($envelop->getMessage())); | |
// run the worker process. this simulates the process usually run in the background by a worker | |
$worker->run(); // executed synchronous here | |
// assure message was processed | |
$this->assertEquals(0, $doctrineReceiver->getMessageCount()); | |
// assure booking was updated | |
$booking = $bookingRepository->findOneBy([]); | |
$this->assertEquals(1, $bookingRepository->count([])); | |
$this->assertEquals('my-amazing-booking', $booking->getName()); | |
$this->assertEquals(Booking::STATUS_CREATED, $booking->getStatus()); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment