public function testRetriesWhenDeciderReturnsTrue()
{
$delayCalls = 0;
$calls = [];
$decider = function ($retries, $request, $response, $error) use(&$calls) {
$calls[] = func_get_args();
return count($calls) < 3;
};
$delay = function ($retries) use(&$delayCalls) {
$delayCalls++;
$this->assertEquals($retries, $delayCalls);
return 1;
};
$m = Middleware::retry($decider, $delay);
$h = new MockHandler([new Response(200), new Response(201), new Response(202)]);
$f = $m($h);
$c = new Client(['handler' => $f]);
$p = $c->sendAsync(new Request('GET', 'http://test.com'), []);
$p->wait();
$this->assertCount(3, $calls);
$this->assertEquals(2, $delayCalls);
$this->assertEquals(202, $p->wait()->getStatusCode());
}