public function testMiddlewareCanBeAddedLater()
 {
     $executionOrder = [];
     $middleware1 = Mockery::mock(Middleware::class);
     $middleware1->shouldReceive('execute')->andReturnUsing(function ($command, $next) use(&$executionOrder) {
         $executionOrder[] = 1;
         return $next($command);
     });
     $middleware2 = Mockery::mock(Middleware::class);
     $middleware2->shouldReceive('execute')->andReturnUsing(function ($command, $next) use(&$executionOrder) {
         $executionOrder[] = 2;
         return $next($command);
     });
     $middleware3 = Mockery::mock(Middleware::class);
     $middleware3->shouldReceive('execute')->andReturnUsing(function () use(&$executionOrder) {
         $executionOrder[] = 3;
         return 'foobar';
     });
     $commandBus = new CommandBus();
     $commandBus->prependMiddlewareChain($middleware3);
     $commandBus->prependMiddlewareChain($middleware2);
     $commandBus->prependMiddlewareChain($middleware1);
     $this->assertEquals('foobar', $commandBus->handle(new AddTaskCommand()));
     $this->assertEquals([1, 2, 3], $executionOrder);
 }