/**
* @test
*/
public function it_construct_a_response_with_multiples_response()
{
$tokens = ["first_token", "second_token", "third_token", "fourth_token", "fifth_token", "sixth_token", "seventh_token"];
$tokens1 = ["first_1_token", "second_1_token", "third_1_token", "fourth_1_token", "fifth_1_token", "sixth_1_token", "seventh_1_token"];
$response = new Response(200, [], '{
"multicast_id": 216,
"success": 3,
"failure": 3,
"canonical_ids": 1,
"results": [
{ "message_id": "1:0408" },
{ "error": "Unavailable" },
{ "error": "InvalidRegistration" },
{ "message_id": "1:1516" },
{ "message_id": "1:2342", "registration_id": "32" },
{ "error": "NotRegistered"},
{ "error": "MessageTooBig"}
]
}');
$downstreamResponse = new DownstreamResponse($response, $tokens);
$downstreamResponse1 = new DownstreamResponse($response, $tokens1);
$downstreamResponse->merge($downstreamResponse1);
$this->assertEquals(6, $downstreamResponse->numberSuccess());
$this->assertEquals(6, $downstreamResponse->numberFailure());
$this->assertEquals(2, $downstreamResponse->numberModification());
// Unavailable is not an error caused by the token validity. it don't need to be deleted
$this->assertCount(4, $downstreamResponse->tokensToDelete());
$this->assertCount(2, $downstreamResponse->tokensToModify());
$this->assertCount(2, $downstreamResponse->tokensWithError());
$this->assertEquals($tokens[2], $downstreamResponse->tokensToDelete()[0]);
$this->assertEquals($tokens1[2], $downstreamResponse->tokensToDelete()[2]);
$this->assertEquals($tokens[5], $downstreamResponse->tokensToDelete()[1]);
$this->assertEquals($tokens1[5], $downstreamResponse->tokensToDelete()[3]);
$this->assertCount(2, $downstreamResponse->tokensToRetry());
$this->assertEquals("MessageTooBig", $downstreamResponse->tokensWithError()[$tokens[6]]);
$this->assertEquals("MessageTooBig", $downstreamResponse->tokensWithError()[$tokens1[6]]);
}