shouldNotReceive('dispatch'); $dispatcher = new LaravelTransactionalDomainEventDispatcher($laravelDispatcher); $event = new class () implements Event { }; // WHEN $dispatcher->dispatch($event); // THEN expect($dispatcher->pendingEventsCount())->toBe(1); }); it('releases all buffered events to Laravel event dispatcher in order and clears buffer', function (): void { // GIVEN /** @var Dispatcher&Mockery\MockInterface $laravelDispatcher */ $laravelDispatcher = Mockery::mock(Dispatcher::class); $event1 = new class () implements Event { }; $event2 = new class () implements Event { }; $laravelDispatcher->expects('dispatch')->once()->with($event1); $laravelDispatcher->expects('dispatch')->once()->with($event2); $dispatcher = new LaravelTransactionalDomainEventDispatcher($laravelDispatcher); $dispatcher->dispatch($event1); $dispatcher->dispatch($event2); expect($dispatcher->pendingEventsCount())->toBe(2); // WHEN $dispatcher->release(); // THEN expect($dispatcher->pendingEventsCount())->toBe(0); }); it('clears all buffered events without dispatching on clear', function (): void { // GIVEN /** @var Dispatcher&Mockery\MockInterface $laravelDispatcher */ $laravelDispatcher = Mockery::mock(Dispatcher::class); $laravelDispatcher->shouldNotReceive('dispatch'); $dispatcher = new LaravelTransactionalDomainEventDispatcher($laravelDispatcher); $event = new class () implements Event { }; $dispatcher->dispatch($event); expect($dispatcher->pendingEventsCount())->toBe(1); // WHEN $dispatcher->clear(); // THEN expect($dispatcher->pendingEventsCount())->toBe(0); }); });