Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
6 / 6 |
CRAP | |
100.00% |
33 / 33 |
ResponseDeserializer | |
100.00% |
1 / 1 |
|
100.00% |
6 / 6 |
9 | |
100.00% |
33 / 33 |
__construct(SerializerInterface $serializer) | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
addResponse(ResponseInterface $response) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
setResponses(array $responses) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
deserializeResponse( MessageInterface $curlResponse, PayURequestInterface $payURequest ) | |
100.00% |
1 / 1 |
1 | |
100.00% |
5 / 5 |
|||
getResponseClass( PayURequestInterface $payURequest ) | |
100.00% |
1 / 1 |
3 | |
100.00% |
8 / 8 |
|||
deserialize( MessageInterface $curlResponse, $responseClass ) | |
100.00% |
1 / 1 |
2 | |
100.00% |
13 / 13 |
<?php | |
/** | |
* @author Krzysztof Gzocha <krzysztof.gzocha@xsolve.pl> | |
*/ | |
namespace Team3\PayU\Communication\Process\ResponseDeserializer; | |
use Buzz\Message\MessageInterface; | |
use Team3\PayU\Communication\Process\RequestProcessException; | |
use Team3\PayU\Communication\Request\PayURequestInterface; | |
use Team3\PayU\Communication\Response\ResponseInterface; | |
use Team3\PayU\Serializer\SerializerException; | |
use Team3\PayU\Serializer\SerializerInterface; | |
/** | |
* {@inheritdoc} | |
*/ | |
class ResponseDeserializer implements ResponseDeserializerInterface | |
{ | |
/** | |
* @var ResponseInterface[] | |
*/ | |
private $responses; | |
/** | |
* @var SerializerInterface | |
*/ | |
private $serializer; | |
/** | |
* @param SerializerInterface $serializer | |
*/ | |
public function __construct(SerializerInterface $serializer) | |
{ | |
$this->responses = []; | |
$this->serializer = $serializer; | |
} | |
/** | |
* @param ResponseInterface $response | |
* | |
* @return $this | |
*/ | |
public function addResponse(ResponseInterface $response) | |
{ | |
$this->responses[] = $response; | |
return $this; | |
} | |
/** | |
* @param ResponseInterface[] $responses | |
* | |
* @return $this | |
*/ | |
public function setResponses(array $responses) | |
{ | |
$this->responses = $responses; | |
return $this; | |
} | |
/** | |
* @param MessageInterface $curlResponse | |
* @param PayURequestInterface $payURequest | |
* | |
* @return ResponseInterface | |
* @throws NoResponseFoundException | |
*/ | |
public function deserializeResponse( | |
MessageInterface $curlResponse, | |
PayURequestInterface $payURequest | |
) { | |
return $this | |
->deserialize( | |
$curlResponse, | |
$this->getResponseClass($payURequest) | |
); | |
} | |
/** | |
* @param PayURequestInterface $payURequest | |
* | |
* @return string | |
* @throws NoResponseFoundException | |
*/ | |
private function getResponseClass( | |
PayURequestInterface $payURequest | |
) { | |
foreach ($this->responses as $response) { | |
if ($response->supports($payURequest)) { | |
return get_class($response); | |
} | |
} | |
throw new NoResponseFoundException(sprintf( | |
'No response class that supports %s was found', | |
get_class($payURequest) | |
)); | |
} | |
/** | |
* @param MessageInterface $curlResponse | |
* @param string $responseClass | |
* | |
* @return object | |
* @throws RequestProcessException | |
*/ | |
private function deserialize( | |
MessageInterface $curlResponse, | |
$responseClass | |
) { | |
try { | |
return $this | |
->serializer | |
->fromJson( | |
$curlResponse->getContent(), | |
$responseClass | |
); | |
} catch (SerializerException $exception) { | |
throw new RequestProcessException( | |
sprintf( | |
'Exception %s was thrown during deserialization. Message: "%s"', | |
get_class($exception), | |
$exception->getMessage() | |
), | |
$exception->getCode(), | |
$exception | |
); | |
} | |
} | |
} |