/** * @dataProvider mappedMiddlewaresProvider * * @param array|string $mappedMiddlewares * @param int $expectedCounter */ public function testDispatchesMappedMiddlewares($mappedMiddlewares, int $expectedCounter) { $container = $this->prophesize(ContainerInterface::class); $middleware = new WorkerMiddleware(['message-name' => $mappedMiddlewares], $container->reveal()); $request = $this->createRequest(); $response = new Response(); if (is_string($mappedMiddlewares)) { $mappedMiddlewares = (array) $mappedMiddlewares; } foreach ($mappedMiddlewares as $mappedMiddleware) { $container->get($mappedMiddleware)->shouldBeCalled()->willReturn([$this, 'incrementMiddleware']); } $out = function ($request, ResponseInterface $response) use($expectedCounter) { $this->assertEquals('default-queue', $request->getAttribute(WorkerMiddleware::MATCHED_QUEUE_ATTRIBUTE)); $this->assertEquals('123abc', $request->getAttribute(WorkerMiddleware::MESSAGE_ID_ATTRIBUTE)); $this->assertEquals('message-name', $request->getAttribute(WorkerMiddleware::MESSAGE_NAME_ATTRIBUTE)); $this->assertEquals(['id' => 123], $request->getAttribute(WorkerMiddleware::MESSAGE_PAYLOAD_ATTRIBUTE)); $this->assertEquals($expectedCounter, $request->getAttribute('counter', 0)); $this->assertEquals($expectedCounter, $response->hasHeader('counter') ? $response->getHeaderLine('counter') : 0); return $response->withAddedHeader('foo', 'bar'); }; /** @var ResponseInterface $returnedResponse */ $returnedResponse = $middleware($request, $response, $out); $this->assertEquals('bar', $returnedResponse->getHeaderLine('foo'), 'Make sure that $out was called'); $this->assertEquals('ZfrEbWorker', $returnedResponse->getHeaderLine('X-HANDLED-BY'), 'Make sure that it adds the X-HANDLED-BY header'); }