/**
  * @param string $encodedValue
  * @return ClaimCheck
  * @throws ExceptionInterface
  */
 public function unserialize($encodedValue)
 {
     try {
         $data = Json::decode($encodedValue, Json::TYPE_ARRAY);
     } catch (RuntimeException $e) {
         throw new InvalidArgumentException($e->getMessage(), 0, $e);
     }
     if (!array_key_exists('Message', $data)) {
         throw new InvalidArgumentException('Message is required and cannot be empty.');
     }
     return $this->serializer->unserialize($data['Message']);
 }
 public function testReceiveAlteredReceiptHandle()
 {
     $this->sqsClient->method('__call')->with('receiveMessage')->willReturnCallback(function ($name, array $args) {
         $factory = new ClaimCheckFactory('MyBucket');
         $serializer = new ClaimCheckJsonSerializer();
         return new Result(['Messages' => [['Body' => $serializer->serialize($factory->create('MyKey')), 'ReceiptHandle' => 'MyReceiptHandle']]]);
     });
     $this->s3Client->method('__call')->with('getObject')->willReturnCallback(function ($name, array $args) {
         return new Result(['Body' => 'MyOriginalMessage']);
     });
     $actual = $this->sut->receiveMessage();
     self::assertInstanceOf(Result::class, $actual);
     self::assertContains('MyReceiptHandle', $actual->search('Messages[].ReceiptHandle|[0]'));
     self::assertContains('MyBucket', $actual->search('Messages[].ReceiptHandle|[0]'));
     self::assertContains('MyKey', $actual->search('Messages[].ReceiptHandle|[0]'));
 }
 /**
  * @throws ExceptionInterface
  * @expectedException \Abacaphiliac\AwsSdk\ClaimCheck\Exception\ExceptionInterface
  */
 public function testUnserializeClaimCheckMissingKey()
 {
     $this->sut->unserialize(Json::encode(['s3BucketName' => 'MyBucket']));
 }