public function testHandlerIsKeptByCompilerPass()
 {
     $handlerDefinition = new Definition();
     $client = $this->createClient([], $handlerDefinition);
     $container = $this->createContainer();
     $container->setDefinition('client', $client);
     foreach (['foo' => 0, 'bar' => 10, 'qux' => -1000] as $alias => $priority) {
         $this->createMiddleware($container, $alias, $priority);
     }
     $pass = new MiddlewarePass();
     $pass->process($container);
     $this->assertSame($handlerDefinition, $client->getArgument(0)['handler']);
 }
 public function testSpecificMiddlewareAddedToClient()
 {
     $client = $this->createClient(['foo', 'bar']);
     $container = $this->createContainer();
     $container->setDefinition('client', $client);
     foreach (['foo', 'bar', 'qux'] as $alias) {
         $this->createMiddleware($container, $alias);
     }
     $pass = new MiddlewarePass();
     $pass->process($container);
     $handler = $client->getArgument(0)['handler'];
     $handlerDefinition = $container->getDefinition((string) $handler);
     $this->assertCount(2, $calls = $handlerDefinition->getMethodCalls());
     $this->assertEquals(['push', [new Reference('foo'), 'foo']], $calls[0]);
     $this->assertEquals(['push', [new Reference('bar'), 'bar']], $calls[1]);
 }
 public function testMiddlewareWithPriority()
 {
     $client = $this->createClient();
     $container = $this->createContainer();
     $container->setDefinition('client', $client);
     foreach (['foo' => 0, 'bar' => 10, 'qux' => -1000] as $alias => $priority) {
         $this->createMiddleware($container, $alias, $priority);
     }
     $pass = new MiddlewarePass();
     $pass->process($container);
     $handler = $client->getArgument(0)['handler'];
     $handlerDefinition = $container->getDefinition((string) $handler);
     $this->assertCount(3, $calls = $handlerDefinition->getMethodCalls());
     $this->assertEquals(['push', [new Reference('bar'), 'bar']], $calls[0]);
     $this->assertEquals(['push', [new Reference('foo'), 'foo']], $calls[1]);
     $this->assertEquals(['push', [new Reference('qux'), 'qux']], $calls[2]);
 }
 public function testCustomHandlerCallableIsWrappedAndMiddlewareAdded()
 {
     $handler = function () {
     };
     $client = $this->createClient([], $handler);
     $container = $this->createContainer();
     $container->setDefinition('client', $client);
     foreach (['foo' => 0, 'bar' => 10, 'qux' => -1000] as $alias => $priority) {
         $this->createMiddleware($container, $alias, $priority);
     }
     $pass = new MiddlewarePass();
     $pass->process($container);
     $clientHandler = $client->getArgument(0)['handler'];
     $this->assertInstanceOf(Definition::class, $clientHandler);
     $this->assertSame(HandlerStack::class, $clientHandler->getClass());
     $this->assertSame($handler, $clientHandler->getArgument(0));
     $this->assertTrue($clientHandler->hasMethodCall('push'));
 }