public function testSuccessfullyCallsOnHeadersBeforeWritingToSink()
{
Server::flush();
Server::enqueue([new Psr7\Response(200, ['X-Foo' => 'bar'], 'abc 123')]);
$req = new Psr7\Request('GET', Server::$url);
$got = null;
$stream = Psr7\stream_for();
$stream = Psr7\FnStream::decorate($stream, ['write' => function ($data) use($stream, &$got) {
$this->assertNotNull($got);
return $stream->write($data);
}]);
$handler = new Handler\CurlHandler();
$promise = $handler($req, ['sink' => $stream, 'on_headers' => function (ResponseInterface $res) use(&$got) {
$got = $res;
$this->assertEquals('bar', $res->getHeaderLine('X-Foo'));
}]);
$response = $promise->wait();
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals('bar', $response->getHeaderLine('X-Foo'));
$this->assertEquals('abc 123', (string) $response->getBody());
}