public function build()
 {
     $serializerDeserializer = new ChainSerializerDeserializer();
     foreach ($this->serializers as $serializer) {
         $serializerDeserializer->addSerializer($serializer);
     }
     foreach ($this->deserializers as $deserializer) {
         $serializerDeserializer->addDeserializer($deserializer);
     }
     return $serializerDeserializer;
 }
 /**
  * @expectedException \Giftcards\Encryption\CipherText\Serializer\FailedToDeserializeException
  */
 public function testDeserializeWithNoSerializerAbleToDeserialize()
 {
     $string = $this->getFaker()->word;
     $this->deserializer1->shouldReceive('canDeserialize')->once()->with($string)->andReturn(false);
     $this->deserializer2->shouldReceive('canDeserialize')->once()->with($string)->andReturn(false)->getMock();
     $this->deserializer3->shouldReceive('canDeserialize')->once()->with($string)->andReturn(false)->getMock();
     $this->chain->deserialize($string);
 }
 public function testBuild()
 {
     $serializer1 = \Mockery::mock('Giftcards\\Encryption\\CipherText\\Serializer\\SerializerInterface');
     $deserializer1 = \Mockery::mock('Giftcards\\Encryption\\CipherText\\Serializer\\DeserializerInterface');
     $serializer2 = \Mockery::mock('Giftcards\\Encryption\\CipherText\\Serializer\\SerializerInterface');
     $deserializer2 = \Mockery::mock('Giftcards\\Encryption\\CipherText\\Serializer\\DeserializerInterface');
     $serializerFactoryName = $this->getFaker()->unique()->word;
     $serializerFactoryOptions = array($this->getFaker()->unique()->word => $this->getFaker()->unique()->word, $this->getFaker()->unique()->word => $this->getFaker()->unique()->word, $this->getFaker()->unique()->word => $this->getFaker()->unique()->word);
     $this->serializerFactory->shouldReceive('create')->once()->with($serializerFactoryName, $serializerFactoryOptions)->andReturn($serializer2);
     $deserializerFactoryName = $this->getFaker()->unique()->word;
     $deserializerFactoryOptions = array($this->getFaker()->unique()->word => $this->getFaker()->unique()->word, $this->getFaker()->unique()->word => $this->getFaker()->unique()->word, $this->getFaker()->unique()->word => $this->getFaker()->unique()->word);
     $this->deserializerFactory->shouldReceive('create')->once()->with($deserializerFactoryName, $deserializerFactoryOptions)->andReturn($deserializer2);
     $this->builder->addSerializer($serializer1)->addDeserializer($deserializer1)->addSerializer($serializerFactoryName, $serializerFactoryOptions)->addDeserializer($deserializerFactoryName, $deserializerFactoryOptions);
     $serializerDeserializer = new ChainSerializerDeserializer();
     $serializerDeserializer->addSerializer($serializer1)->addDeserializer($deserializer1)->addSerializer($serializer2)->addDeserializer($deserializer2);
     $this->assertEquals($serializerDeserializer, $this->builder->build());
 }
 protected function sortDeserializers()
 {
     $container = $this->container;
     $this->deserializers = array_map(function (array $serializers) use($container) {
         return array_map(function ($serializer) use($container) {
             if (!$serializer instanceof DeserializerInterface) {
                 $serializer = $container->get($serializer);
             }
             return $serializer;
         }, $serializers);
     }, $this->deserializers);
     parent::sortDeserializers();
 }