/**
  * @param EntityDescriptor|EntitiesDescriptor $entityDescriptor
  *
  * @return FixedEntityDescriptorStore
  *
  * @throws \InvalidArgumentException
  */
 public function add($entityDescriptor)
 {
     if ($entityDescriptor instanceof EntityDescriptor) {
         if (false == $entityDescriptor->getEntityID()) {
             throw new \InvalidArgumentException('EntityDescriptor must have entityId set');
         }
         $this->descriptors[$entityDescriptor->getEntityID()] = $entityDescriptor;
     } elseif ($entityDescriptor instanceof EntitiesDescriptor) {
         foreach ($entityDescriptor->getAllItems() as $item) {
             $this->add($item);
         }
     } else {
         throw new \InvalidArgumentException('Expected EntityDescriptor or EntitiesDescriptor');
     }
     return $this;
 }
    public function test__deserialize()
    {
        $xml = <<<EOT
<?xml version="1.0"?>
<md:EntitiesDescriptor ID="esd1" Name="first" validUntil="2013-10-27T11:55:37.035Z" cacheDuration="P1D" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata">
<md:EntityDescriptor entityID="ed1"/>
<md:EntityDescriptor entityID="ed2"/>
<md:EntitiesDescriptor ID="esd2" Name="second">
    <md:EntityDescriptor entityID="ed3"/>
</md:EntitiesDescriptor>
</md:EntitiesDescriptor>
EOT;
        $context = new DeserializationContext();
        $context->getDocument()->loadXML($xml);
        $esd = new EntitiesDescriptor();
        $esd->deserialize($context->getDocument(), $context);
        $this->assertEquals('esd1', $esd->getId());
        $this->assertEquals('first', $esd->getName());
        $this->assertEquals(1382874937, $esd->getValidUntilTimestamp());
        $this->assertEquals('P1D', $esd->getCacheDuration());
        $items = $esd->getAllItems();
        $this->assertCount(3, $items);
        $this->assertInstanceOf('LightSaml\\Model\\Metadata\\EntityDescriptor', $items[0]);
        $this->assertInstanceOf('LightSaml\\Model\\Metadata\\EntityDescriptor', $items[1]);
        $this->assertInstanceOf('LightSaml\\Model\\Metadata\\EntitiesDescriptor', $items[2]);
    }